VMware guest crash!? 救回 vmdk 中的資料

先後兩次發生 Esxi 的 guest crash,
開機運行中的 guest 所有的 guest 設定檔、log 統統不見,
整個 guest 目錄夾裡只剩一個 vmdk 檔,
將 guest 停機後,這個 vmdk 再也開不了機,用 vm tool 也掛載不上,
後來先後找到兩篇資料,將 vmdk 在 linux 上掛載救回其中資料。

    vmdk 中只有一個分割時:

這是容易一點的,參考:
http://www.cromoteca.com/
losetup /dev/loop0 /diskimage-flat.vmdk
losetup -o 32256 /dev/loop1 /dev/loop0
mount -t ntfs-3g /dev/loop1 /mnt/diskimage

    救出第2 partition 以後之資料:

增加 loop0 分割的 nod 到 /dev/mapper 裡
kpartx -a /dev/loop0
mount -t ext3 /dev/loop0p2 /mnt/img

若有增加分割失敗,以 loop0p5為例,先列出分割資訊:
# kpartx -l /dev/loop0
loop0p1 : 0 2104452 /dev/loop0 63
loop0p2 : 0 20964825 /dev/loop0 2104515
loop0p3 : 0 8385930 /dev/loop0 23069340
loop0p4 : 0 31455270 /dev/loop0 31455270
loop0p5 : 0 31455207 /dev/dm-3 63

新增 loop0p5 到 loop1:
losetup -o 16105130496 /dev/loop1 /dev/loop0
則可 mount /dev/loop1 /mnt/diskimage
其中數字的算法為: (31455270+63)x512=16105130496