i’m taking backups of vmware esxi vms weekly using ghettovcb. it has been working greatly for many years. once in a while i need to recover a particular file from particular backup. there’s quicker way than just restoring the whole vm!
few tools are needed:
root@host:~# apt-get install qemu-utils mount kpartx
my vmdk files are in the 2gbsparse format:
root@host:~# ls -la app0-1* -rw-r--r-- 1 ninja 1019 664535040 Aug 9 00:14 app0-1-s001.vmdk -rw-r--r-- 1 ninja 1019 1065877504 Aug 9 00:14 app0-1-s002.vmdk -rw-r--r-- 1 ninja 1019 648413184 Aug 9 00:14 app0-1-s003.vmdk -rw-r--r-- 1 ninja 1019 352387072 Aug 9 00:14 app0-1-s004.vmdk -rw-r--r-- 1 ninja 1019 316538880 Aug 9 00:14 app0-1-s005.vmdk -rw-r--r-- 1 ninja 1019 469565440 Aug 9 00:14 app0-1-s006.vmdk -rw-r--r-- 1 ninja 1019 570818560 Aug 9 00:14 app0-1-s007.vmdk -rw-r--r-- 1 ninja 1019 573767680 Aug 9 00:14 app0-1-s008.vmdk -rw-r--r-- 1 ninja 1019 798 Aug 9 00:14 app0-1.vmdk
but monolithic ones should work fine too
first i need to convert the .vmdk format to qemu’s qcow2:
root@host:~# qemu-img convert app0-1.vmdk 1.qemu2
then find partitions within it and mount one that i’m interested in:
root@host:~# losetup /dev/loop7 1.qemu2 root@host:~# kpartx -va /dev/loop7 root@host:~# ls -la /dev/mapper/loop* lrwxrwxrwx 1 root root 7 Dec 1 18:39 /dev/mapper/loop7p1 -> ../dm-2 root@host:~# mount /dev/mapper/loop7p1 /mnt/tmp
and the cleanup:
root@host:~# umount /mnt/tmp root@host:~# kpartx -d /dev/loop7 root@host:~# losetup -d /dev/loop7
2017-11-21 edit:
guestmount -a server1-0.vmdk -i --ro /mnt/test/
worked fine on the ghettoVCB-created backup.
2022-12-13 edit:
for qcow2 files:
modprobe nbd max_part=8 # i'm using -r / read only mostly because my backup is likely a mounted user-space file system from borg backup qemu-nbd -r --connect=/dev/nbd0 /mnt/tmp0/backup/vm-vda.qcow2 fdisk /dev/nbd0 -l # see the partition names # also here read-only to let it mount from borg backup mount -o noload,ro /dev/nbd0p1 /mnt/tmp1/ # once all is done: umount /mnt/somepoint/ qemu-nbd --disconnect /dev/nbd0 rmmod nbd
based on https://gist.github.com/shamil/62935d9b456a6f9877b5