First, the tools you need
apt-get install qemu-utils
Now, enable NBD
modprobe nbd max_part=8
Once that is enabled, connect the file as a block device
qemu-nbd --connect=/dev/nbd0 /hds/usb/virts/Windows/main.qcow2
Now, the block device should appear like any other, alongside the partitions inside !
fdisk -l
On my machine, this resulted in
Disk /dev/nbd0: 95 GiB, 102005473280 bytes, 199229440 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
Disklabel type: dos
Disk identifier: 0xc5324c42
Device Boot Start End Sectors Size Id Type
/dev/nbd0p1 * 2048 104447 102400 50M 7 HPFS/NTFS/exFAT
/dev/nbd0p2 104448 198138958 198034511 94.4G 7 HPFS/NTFS/exFAT
/dev/nbd0p3 198139904 199225343 1085440 530M 27 Hidden NTFS WinRE
This disk was around 40GB, but fdisk will see the number corresponding to the largest allowed size, 100GB in this case ! let us mount the drive
mount /dev/nbd0p2 /hds/loop
Now, in this case in particular, like any other block device that held the windows operating system, more often than not, you will get the message saying
The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Falling back to read-only mount because the NTFS partition is in an
unsafe state. Please resume and shutdown Windows fully (no hibernation
or fast restarting.)
Could not mount read-write, trying read-only
The solution to that is simple, follow the following two steps to remedy the issue and then force mount the file by using remove_hiberfile
ntfsfix /dev/nbd0p2
mount -t ntfs-3g -o remove_hiberfile /dev/nbd0p2 /hds/loop
The result of NTFSFIX was
Mounting volume... The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
FAILED
Attempting to correct errors...
Processing $MFT and $MFTMirr...
Reading $MFT... OK
Reading $MFTMirr... OK
Comparing $MFTMirr to $MFT... OK
Processing of $MFT and $MFTMirr completed successfully.
Setting required flags on partition... OK
Going to empty the journal ($LogFile)... OK
Checking the alternate boot sector... OK
NTFS volume version is 3.1.
NTFS partition /dev/nbd0p2 was processed successfully.
And the following mount command worked as you would expect, silently
Now, if you want to disconnect the NBD image, you need to unmount (Like you normally would) THEN
#Disconnect the image from the NBD device
qemu-nbd --disconnect /dev/nbd0;
#Unload the NBD module
rmmod nbd;