I recently had a windows backup in vhd format stored on an EXT3 drive, only readable by my Ubuntu VM. Don't ask me how this happened, but I need to pull a few files off the backup.
Instead of copying the giant file to a Windows VM, I decided to mount the vhd image then ntfs partition in Ubuntu.
First build and install libvhdi and dependencies
sudo apt-get install -y autopoint libfuse-dev # all my sources lives in ~/src mkdir -p ~/src && cd ~/src git clone [email protected]:libyal/libvhdi.git cd libvhdi ./synclibs.sh ./autogen.sh ./configure make sudo make install
Mount the image
sudo mkdir /mnt/vhdiimage sudo vhdimount -X allow_root /media/mydrive/WindowsImageBackup/uuid.vhd /mnt/vhdiimage/
Figure out what type of disk image we're dealing with:
sudo su cd /mnt/vhdiimage fdisk -lu vhdi1
Find the offset of the partition you want to mount. Oh, look at that, what do you know? It's NTFS.
Disk vhdi1: 239.3 GB, 239286190080 bytes 16 heads, 48 sectors/track, 608536 cylinders, total 467355840 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System vhdi1p1 128 467353727 233676800 7 HPFS/NTFS/exFAT
Calc the offset (Sector size * Start) and mount:
losetup -o $((128*512)) /dev/loop0 vhdi1 mkdir /mnt/backup mount -o ro,noload /dev/loop0 /mnt/backup
The disk is now mounted in /mnt/backup