VMware Snapshot Chain Repair + Delta Merge 完整教學(含真實案例)
在 VMware ESXi / vSphere 的環境中,
虛擬機快照(Snapshot)一旦使用不當、或合併中斷,就會造成:
- VM 卡在 77% / 81% 無法開機
- D 槽資料回到舊版本
- snapshot chain 爛掉 →
parentCID mismatch - vmkfstools 無法合併 → Error (18)
- 無法移除 snapshot
- 無法掛載 delta → 顯示 0MB
本篇文章記錄一次 真實救援案例,
成功救回 超過 3.4TB 的 Windows Server 2019 資料磁碟,
並完整修復被破壞的 snapshot chain。
🧨 一、災難描述:VM 無法開機、快照合併中斷
客戶一台 Windows 2019 Mail Server(ESXi 6.7)突然出現:
- vSphere HA 嘗試重啟失敗
- VM 卡住:“Powering On 77% / 81%”
- 主機看到殘留 vmx process → Zombie VM
- Snapshot “Delete All” 卡住只到 50%
- 檔案大量存在(000001~000012)
在 vmware.log 中看到:
The parent virtual disk has been modified since the child was created. (18)
Change tracking invalid
Could not open sesparse…
→ 代表 快照鍊鏈(Snapshot Chain)損毀。
🧭 二、初步處理:停止 Zombie VMX、清除 LCK
ESXi SSH:
esxcli vm process list
esxcli vm process kill --type=force --world-id <worldid>
rm -f *.lck
VM 從 “卡住” → “可以操作”,但仍無法啟動。
📦 三、發現關鍵:快照鏈仍完整,但資料未填回 base disk
檢查 snapshot descriptor:
grep -E "CID|parentCID|parentFileNameHint" *.vmdk
結果:
_1-000001→_1-000012的 CID 與 parentCID 完全正確- 沒有 CID mismatch
- 鏈子是通的!
但問題是:
❗ 最上層快照(000012)中包含 最新資料
❗ Snapshot Delete 中斷 → Delta 未回寫 base
❗ VM fallback 到 base → D 槽顯示 “舊資料”
🔥 四、決定救援方向:強制合併 delta
❗ vmkfstools 在 parent 被改過時會拒絕合併:
The parent virtual disk has been modified... (18)
原因:
- Delete snapshot 中途混亂,parent longContentID 改變
- child(000012)的 parentCID 與 metadata 被不同步
🔧 五、修復 snapshot chain(手動 CID 修復)
- 找出 000011 的 CID:
cat "win2019-mail1 Notes_1-000011.vmdk"
CID=11111111
將 base vmdk 修成與第一層 parent 一致:
sed -i 's/CID=f0eb2cd4/CID=5212b7ae/' "win2019-mail1 Notes_1.vmdk"
讓 chain 成功串接:
base → 000001 → 000002 → … → 000012
🛠 六、建立 Merge Descriptor(強制合併用)
建立:
# Disk DescriptorFile
CID=22222222
parentCID=11111111
parentFileNameHint="win2019-mail1 Notes_1-000011.vmdk"
RW 7340032000 SESPARSE "win2019-mail1 Notes_1-000012-sesparse.vmdk"
🚀 七、vmkfstools 成功開始合併(Clone)
vmkfstools -i "win2019-mail1 Notes_1-000012-MERGE.vmdk" "Fixed_D.vmdk"
出現:
Clone: 0% done
→ 代表修復成功,VMware 接受了這條 chain。
🕘 八、等待數小時,clone 產生完整 3.4TB 新磁碟
完成後目錄出現:
Fixed_D-flat.vmdk (3.4 TB)
Fixed_D.vmdk
這就是 已完整合併所有 snapshot 的 D 槽。
🧩 九、掛載新磁碟到原 VM
- 移除舊 D 槽(不刪檔案)
- Add Hard Disk → Existing Disk
- 指向:
Fixed_D.vmdk
- 開機 Windows
D 槽立即恢復所有最新資料。
🧹 十、清理大量殘留快照檔案(可回收 TB 空間)
可安全刪除:
win2019-mail1 Notes_1-000001*.vmdk
win2019-mail1 Notes_1-000002*.vmdk
...
win2019-mail1 Notes_1-000012*.vmdk
*.sesparse.vmdk
*.bak
*.MERGE.vmdk
*.FIXED.vmdk
不可刪除:
win2019-mail1 Notes-flat.vmdk ← C 槽
win2019-mail1 Notes.vmdk
Fixed_D-flat.vmdk ← D 槽(最新)
Fixed_D.vmdk











發佈留言