Recreating a missing virtual machine disk descriptor file
Merhaba,
Bugün sizlere günlük hayatta çoğunlukla karşılaşabileceğiniz bir hatanın çözümünden bahsedeceğim. Malum production ortamı olunca virtual machine’lerin backup’larını alma durumunda kalıyoruz. Bazen backup sırasında bazende restore sırasında virtual machine’e ait vmdk dosyasının corrtup olmasından dolayı ESXi host virtual machine’i power on durumuna getiremeyebilir.
ESXi host’un virtual machine’i power on etmemesinin sebebi, virtual machine’in hangi flat.vmdk dosyasından start edileceğini anlayamamasından kaynaklanmaktadır. Yani ESXi host virtual machine’in hangi flat.vmdk dosyasından boot edeceğini anlayamıyor bu durumdada virtual machine power on edilemiyor. Bu sorunu yaşadığınızda aşağıdaki log’lar ile karşılaşabilirsiniz.
In the virtual machine’s vmware.log file, you see messages similar to:
Jul 22 09:22:32.141: vmx| DISKLIB-LINK : "myvm.vmdk" : failed to open (The system cannot find the file specified). Jul 22 09:22:32.141: vmx| DISKLIB-CHAIN : "myvm.vmdk" : failed to open (The system cannot find the file specified). Jul 22 09:22:32.141: vmx| DISKLIB-LIB : Failed to open 'myvm.vmdk' with flags 0xa (The system cannot find the file specified). Jul 22 09:22:32.142: vmx| Msg_Post: Error Jul 22 09:22:32.142: vmx| [msg.disk.fileNotFound] VMware ESX Server cannot find the virtual disk "myvm.vmdk". Please verify the path is valid and try again. Jul 22 09:22:32.142: vmx| [msg.disk.noBackEnd] Cannot open the disk 'myvm.vmdk' or one of the snapshot disks it depends on. Jul 22 09:22:32.142: vmx| [msg.disk.configureDiskError] Reason: The system cannot find the file specified.
In the /var/log/hostd.log file of an ESXi 5.0 host, you see messages similar to:
2011-07-13T17:59:48.704Z [74258B90 info 'Libs'] FoundryVMDBPowerOpCallback: VMDB reports power op failed for VM /vmfs/volumes/4e1 c0986-14d88a26-416a-000c2988e4dd/myvm/myvm.vmx with error msg = "VMware ESX cannot find the virtual disk "myvm_2.vmdk". Verify the path is valid and try again. --> Cannot open the disk 'myvm_2.vmdk' or one of the snapshot disks it depends on. --> Reason: The system cannot find the file specified." and error code -57. 2011-07-13T17:59:48.705Z [74258B90 info 'Libs'] Vix: [3057 foundryVMMsgPost.c:1354]: Error VIX_E_FAIL in FoundryVMGetMsgPostError (): Unknown error ... 2011-07-13T17:59:48.775Z [743C0B90 info 'vm:/vmfs/volumes/4e1c0986-14d88a26-416a-000c2988e4dd/myvm/myvm.vmx' opID=841A7BF1-00000188] Failed to do Power Op: Error: (4) A file was not found
Bu sorunu çözmek için ilk olarak virtual machine’in bulunduğu host’un SSH’ını açıyoruz ve root ile SSH’a bağlanıyoruz.
SSH ile bağlantı sağladıktan sonra;
cd /vmfs/volumes/VM’in-bulundugu-datastore/VM-ismi
Yukarıdaki komut’da olduğu gibi sorun yaşadığımız virtual machine’in bulunduğu dizine gidiyoruz. Ben burada eski vmdk’nin ismini oldvmdk olarak değiştirdim. Senaryo oluşturmak için:)
mv tayfuntest.vmdk tayfuntest.vmdkold
Yukarıdaki komut ile dosya ismini değiştiriyorum.
Şimdi ilk olarak virtual machine’in hangi disk’den boot olduğunu öğrenmemiz gerekiyor.
Virtual machine’lerin donanım bilgilerinin yer aldığı .vmx dosyasını cat ile listeliyoruz.
cat virtualmachine.vmx
Karşımıza çıkan listede, scsi0.virtualDev ‘in LSILogic controller’ı kullandığını görüyorum. Yani bizim virtual machine’inimiz disk controller olarak bunu kullanıyor.
Disk controller’ı öğrendikten sonra, flat.vmdk’nin boyutunu öğrenmemiz gerekiyor.
ls -l tayfuntest-flat.vmdk
Virtual machine’in disk bilgilerini ve disk boyutunu öğrendikten sonra komut yardımı ile yeni bir disk ve descriptor file oluşturmamız gerekiyor.
Corrupt olmuş scsi controller ve disk boyutunu manual olarak oluşturuyoruz. Bu işlem yapılırken vmkfstools komutunu kullanıyoruz.
vmkfstools -c 42949672960 -a lsilogic -d thin temp.vmdk
vmkfstools komutunda yeni bir vmdk oluşturulacağından, bu vmdk’nın flat.vmdk dosyasının boyutu ile aynı olması gerekiyor. Yukarıdaki komutu çalıştırdıktan sonra temp.vmdk isimli bir vmdk ve flat.vmdk dosyası oluşacaktır. Bizim descriptor file’imiz zaten olduğu için yeni oluşan flat.vmdk dosyasını siliyoruz.
rm temp-flat.vmdk
Yukarıdaki komut ile bu işlemi gerçekleştirebilirsiniz. flat.vmdk dosyasını sildikten sonra yeni oluşturduğumuz temp.vmdk dosyasının ismini bozulan vmdk dosyamızın ismi ile değiştiriyoruz.
mv temp.vmdk tayfuntest.vmdk
Son olarak yeni oluşturduğumuz vmdk’yı, varolan flat.vmdk dosyasına bağlamamız gerekiyor.
Son olarak, oluşturmuş olduğumuz vmdk dosyasının içerine giriyoruz.
vi tayfuntest.vmdk
# Extent description RW 83886080 VMFS "temp-flat.vmdk"
temp-flat.vmdk ismini orjinal olan flat dosyası ile değiştiriyoruz. Daha sonra bunu kaydediyoruz ve virtual machine’i power on ediyoruz.
İşlem aslında ilk başta biraz karışık gelebilir ancak karışık bir durum yok aslında.
Umarım faydalı olmuştur.
İyi çalışmalar.
hocam iyi ki varsın
Merhabalar.Vmware Workstation kullanıyorum, hiç bir sorunu olmayan sanal bilgisayarımda birden “The file specified is not a virtual disk.” şu sorunu almaya başladım.Yazınızı okudum fakat anlayamadım, hatta söyledikleriniz benim sorunum ile ilgilimi ondan bile şüphelenmeye başladım doğrusu.Amacım sorun veren vmdk dosyamı eski haline getirmek bunun için yazdıklarınızı uygulasam (tabi uygulamayacağım o ayrı konu da ) eskisi gibi tekrar açılacak mı?İki sefer oldu başıma geliyor tekrar dosyalarımın silinmesi benim için ölüm gibi olur.Yardımcı olursanız çok sevinirim.Teşekkürler.