ESXi ve Hyper-V'de Snapshot Zinciri Bozulduğunda: İlk Adımlar
Sanal makine açılmıyor ve hata iletisi bir disk dosyasının "üst diskiyle uyuşmadığını" ya da "bulunamadığını" söylüyor. Veri büyük ihtimalle hâlâ datastore'da, ama parçalar arasındaki bağ kopmuş. Bu noktada atılan ilk iki adım, verinin tam mı yoksa eksik mi döneceğini belirler. Bu yazı VMware ESXi ve Hyper-V'de snapshot (checkpoint) zincirinin nasıl çalıştığını, neden koptuğunu ve onarmaya başlamadan önce ne yapılması gerektiğini anlatıyor.
Kısa cevap: Önce sanal makinenin bütün dosyalarını başka bir depolamaya kopyalayın. Ana diski tek başına bir sanal makineye bağlayıp açmayın, fark disklerini silmeyin, yer yokken "tüm snapshot'ları sil" demeyin. Onarımı kopya üzerinde, zinciri salt okunur komutlarla doğruladıktan sonra yapın.
Zincir nasıl çalışır?
VMware ESXi. Bir sanal disk iki dosyadan oluşur: verinin durduğu vm-flat.vmdk ve onu tarif eden küçük metin dosyası vm.vmdk. Snapshot alındığında ana disk dondurulur ve yeni bir fark diski açılır: VMFS datastore'larda vm-000001-delta.vmdk ya da VMFS6'da ve 2 TB'tan büyük disklerde vm-000001-sesparse.vmdk. Onun da kendi tarif dosyası vardır. Sanal makine o andan sonra yalnızca en son fark diskine yazar.
Halkaları birbirine bağlayan şey tarif dosyalarındaki üç satırdır: diskin kendi kimliği (CID), üst diskin kimliği (parentCID) ve üst diskin dosya adı (parentFileNameHint). Her fark diskinin parentCID değeri, bir üstündeki diskin CID değerine eşit olmalıdır.
Hyper-V. Mantık aynıdır, adlar farklıdır. Ana disk .vhdx, her checkpoint'te açılan fark diski .avhdx dosyasıdır. Fark diski üst diskinin yolunu ve kimliğini kendi içinde tutar; sanal makine en yeni .avhdx dosyasına yazar.
İki platformda da kural tektir: fark diski, üst diskin snapshot anındaki hâline göre anlam taşır. Üst disk o andan sonra değişirse fark diskindeki bloklar yanlış zemine oturur.
İki platformun karşılıkları:
| Öğe | VMware ESXi | Hyper-V |
|---|---|---|
| Ana disk | vm-flat.vmdk ve tarif dosyası vm.vmdk | disk.vhdx |
| Fark diski | vm-000001-delta.vmdk ya da -sesparse.vmdk | disk_XXXX.avhdx |
| Bağ bilgisi | Tarif dosyasında CID, parentCID, parentFileNameHint | Fark diskinin içinde üst diskin yolu ve kimliği |
| Snapshot kaydı | .vmsd dosyası | Checkpoint yapılandırma dosyaları |
| Zinciri doğrulama | vmkfstools -e | Test-VHD |
| Birleştirme | Consolidate; ya da vmkfstools -i ile bağımsız kopya | Merge-VHD |
Zincir neden kopar?
| Neden | Ne olur |
|---|---|
| Datastore doldu | Fark diskleri büyür; yer bitince sanal makine durur, o sırada süren birleştirme yarıda kalır. |
| Birleştirme (consolidate, merge) yarıda kesildi | Güç kesintisi, host çökmesi ya da işlemin elle durdurulması. |
| Yedekleme yazılımı sahipsiz snapshot bıraktı | Arayüzde snapshot görünmez ama sanal makine fark diskinden çalışmaya devam eder. |
| Ana disk tek başına bağlanıp açıldı | "Veriye bir bakayım" diye yapılan bu işlem ana diskin kimliğini ve içeriğini değiştirir. |
| Dosyalar elle silindi ya da taşındı | "Gereksiz" görünen fark dosyaları ve tarif dosyaları eksik kalır. |
| Alttaki depolama arızalandı | Zincir sorunu aslında bir RAID ya da LUN sorununun belirtisidir. |
Karşınıza çıkan ileti, sorunun türünü söyler:
| Platform | İletinin söylediği | Anlamı |
|---|---|---|
| ESXi | Üst disk, fark diski oluşturulduktan sonra değiştirilmiş; içerik kimlikleri uyuşmuyor | CID ile parentCID eşleşmiyor |
| ESXi | Disk ya da bağlı olduğu snapshot disklerinden biri açılamıyor | Zincirdeki bir dosya eksik ya da kilitli |
| Hyper-V | Sanal disk zinciri bozuk; üst disk ile fark diskinin kimlikleri uyuşmuyor | Üst disk checkpoint'ten sonra değişmiş |
| Hyper-V | Fark diskinin üst diski bulunamıyor | Üst diskin yolu değişmiş ya da dosya yerinde değil |
İlk kural: önce kopyalayın
Sanal makine kapalıyken klasörünün tamamını başka bir depolamaya kopyalayın: bütün .vmdk dosyaları (ana disk, fark diskleri ve tarif dosyaları), .vmsd, .vmx ve günlük dosyaları; Hyper-V'de .vhdx, bütün .avhdx dosyaları ve yapılandırma dosyaları. Bundan sonraki her denemeyi kopya üzerinde yapın.
Kopyalamadan önce alttaki depolamanın sağlıklı olduğunu doğrulayın. Dizi degraded ise ya da okuma hatası veriyorsa kopyalamaya başlamayın; büyük bir kopyalama, sorunlu diziye bindirilebilecek en ağır yüktür. Önce rebuild öncesi kontrol listesine bakın.
Datastore doluysa yer açmak için snapshot dosyalarını değil, başka sanal makineleri ya da ISO dosyalarını taşıyın.
Yapılmaması gerekenler
| İşlem | Sonucu |
|---|---|
| Ana diski tek başına bir sanal makineye bağlayıp açmak | Açılan işletim sistemi diske yazar; fark disklerinin dayandığı zemin değişir. |
| Fark dosyalarını silmek | Snapshot'tan sonra yazılan bütün veri oradadır. |
| Yer yokken "Delete All Snapshots" ya da birleştirme başlatmak | İşlem geçici alana ihtiyaç duyar; yarıda kalırsa durum ağırlaşır. |
| Eski bir snapshot'a dönmek (revert) | O andan sonraki değişiklikler atılır. |
| Tarif dosyasını yedeğini almadan düzenlemek | Yanlış bir değer zinciri büsbütün açılmaz hâle getirir; geri dönecek kopya kalmaz. |
Hyper-V'de kimlik uyuşmazlığını yok sayarak bağlamak (-IgnoreIdMismatch) | Üst disk değiştiyse zincir "bağlı" görünür ama içerik tutarsızdır. |
Yanlış kurulmuş zincirle açılan sistemde chkdsk çalıştırmak | Tutarsız veriyi kalıcı hâle getirir. |
Zinciri doğrulamak için komutlar
Aşağıdaki komutlar salt okunurdur.
# ESXi kabuğu: tarif dosyalarındaki bağları görün
cd /vmfs/volumes/DATASTORE/VM
ls -la
grep -E "^CID|^parentCID|parentFileNameHint" vm.vmdk vm-000001.vmdk vm-000002.vmdk
# Zincir tutarlı mı? En son fark diskinin tarif dosyasını verin.
# Sanal makine kapalı olmalı; açıkken "Failed to lock the file" hatası alınır.
vmkfstools -e vm-000002.vmdk
# Hyper-V (PowerShell)
Get-VHD -Path .\disk_XXXX.avhdx | Format-List Path, VhdType, ParentPath
Test-VHD -Path .\disk_XXXX.avhdx
grep komutunu yalnızca küçük tarif dosyalarına verin; -flat, -delta ve -sesparse dosyaları verinin kendisidir. Hyper-V'de zincir kopuksa Test-VHD bir hata iletisiyle birlikte False döndürür; bu, komutun değil zincirin sorunudur.
Onarım yolları (kopya üzerinde)
ESXi'de zincir tutarlıysa: en güvenli yol özgün dosyalara dokunmadan zincirin tamamını yeni ve bağımsız bir diske kopyalamaktır. Komut bütün halkaları okur ve birleşik bir disk üretir; hedefte yeterli boş alan gerekir.
vmkfstools -i vm-000002.vmdk /vmfs/volumes/HEDEF/vm-birlesik.vmdk -d thin
Çıkan diski yeni bir sanal makineye bağlayıp doğrulayın.
ESXi'de yalnızca kimlikler uyuşmuyorsa ve ana diskin snapshot'tan sonra hiç yazılmadığından eminseniz, fark diskinin tarif dosyasındaki parentCID değeri üst diskin CID değeriyle eşitlenerek zincir yeniden kurulabilir. Ana diske yazıldıysa bu düzeltme zinciri "tutarlı" gösterir ama içerik tutarsız kalır. Bu yolla açılan sistemi üretime geri almayın; veriyi temiz bir ortama aktarmak için kullanın.
Hyper-V'de üst diskin yalnızca yolu değiştiyse bağ yeniden kurulur; zincir Test-VHD ile doğrulandıktan sonra istenirse birleştirilir:
Set-VHD -Path .\disk_XXXX.avhdx -ParentPath D:\VM\disk.vhdx
Merge-VHD -Path .\disk_XXXX.avhdx -DestinationPath D:\VM\disk.vhdx
Birleştirme geri alınamaz ve diskler hiçbir sanal makineye bağlı değilken yapılır; ardından sanal makinenin disk yolu .vhdx dosyasına çevrilmelidir. Birden fazla fark diski varsa birleştirme en yeniden en eskiye doğru, halka halka yapılır.
Ne zaman durup destek almalı?
| Durum | Ne yapmalı |
|---|---|
| Zincir tutarlı, yalnızca birleştirme gerekiyor | Kopya üzerinde yapılabilir |
| Üst diskin yalnızca yolu değişmiş | Kopya üzerinde yapılabilir |
| Kimlikler uyuşmuyor, ana diske yazılmadığından eminsiniz | Kopya üzerinde düzeltilebilirsistemi üretime almayın |
| Fark dosyaları silinmiş ya da üzerine yazılmış | Durun |
| Ana disk snapshot'tan sonra açılıp kullanılmış | Durun |
| Birleştirme hata vererek yarıda kalmış | Durun |
| Datastore bağlanmıyor ya da alttaki dizi degraded veya offline | Durun |
| Sanal makine şifreli ve anahtar sunucusuna erişim yok | Durun |
"Durun" yazan durumlarda iş dosya düzeyinden blok düzeyine iner: silinen fark disklerinin datastore üzerinde aranması, bozuk dosya sistemi yapılarının onarılması, zincirin elle yeniden kurulması. Depolama tarafındaki arızalar için sunucu veri kurtarma sayfasına, dizi sorunlarında rebuild öncesi kontrol listesine bakabilirsiniz.
Laboratuvara ne gönderilir?
- Sorun depolamadaysa: dizinin bütün diskleri, yuva numaralarıyla etiketlenmiş olarak.
- Sorun yalnızca dosya düzeyindeyse: sanal makine klasörünün eksiksiz kopyası.
- Platform ve sürüm bilgisi; datastore türü (VMFS5, VMFS6, NFS, vSAN ya da NTFS, ReFS, CSV).
- Zaman çizelgesi: sorun ne zaman başladı, hangi işlemler denendi.
Tekrar yaşamamak için
- Snapshot yedek değildir. Ana diskle aynı depolamada durur ve onsuz işe yaramaz.
- Snapshot'ları kısa tutun. VMware'in kendi önerisi tek bir snapshot'ı 72 saatten uzun tutmamak ve zinciri iki üç halkayla sınırlamaktır.
- Datastore boş alanı ve "birleştirme gerekiyor" uyarısı için alarm tanımlayın.
- Yedekleme işlerinden sonra sahipsiz snapshot kalıp kalmadığını düzenli denetleyin.
- Hyper-V'de üretim sistemleri için "production checkpoint" kullanın ve checkpoint'leri iş bitince birleştirin.
Sanal ortamda yedekleme düzeni için sanal ortamınızı veri kaybından nasıl korursunuz yazısına da bakabilirsiniz.
Sık sorulan sorular
Arayüzde snapshot görünmüyor ama klasörde fark dosyaları var. Silebilir miyim?
Hayır. Sanal makinenin yapılandırmasında diskin hangi dosyayı gösterdiğine bakın; fark diskini gösteriyorsa sanal makine hâlâ oradan çalışıyordur. Bu durumda yapılacak işlem silmek değil, birleştirmektir.
Birleştirme saatlerdir sürüyor. İptal etmeli miyim?
Büyük ve uzun süre biriktirilmiş fark disklerinde birleştirme saatler sürebilir. Hata vermediği sürece işlemi kesmeyin; yarıda kesilen birleştirme, baştaki sorundan daha ağır bir sorundur.
Ana diski salt okunur bağlasam olur mu?
Gerçekten salt okunur bağlanıyorsa içeriği değişmez. Uygulamada bunu garanti etmek zordur; işletim sistemi diski bağlarken günlük kayıtlarını işleyebilir. Güvenli olan, kopyası üzerinde çalışmaktır.
Emin olmadığınız adımı kopya üzerinde deneyin. Analiz ücretsizdir; onayınız olmadan işlem yapılmaz. Telefon: 0212 916 12 22 ya da ücretsiz analiz başvurusu.