Have a VM disk image that you need to pull a few files from, but you don't want to spin it up into a VM? Here's the simplest way I've found to get at the files inside it:
First, convert whatever format it's in to .raw using qemu-img - you'll need a good bit of disk space for this to work. If your source virtual disk is a qcow2, for example, the command might look like this:
me@box$ qemu-img convert -f qcow2 -O raw var/lib/libvirt/images/own.qcow2 /mnt/thevault/everything/backups/own.raw
Then find the offset of the primary partition inside the image with fdisk:
me@box$ fdisk -l /mnt/thevault/everything/backups/own.raw
Disk /mnt/thevault/everything/backups/own.raw: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 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: 0x0008fa87
Device Boot Start End Blocks Id System
/mnt/thevault/everything/backups/own.raw1 * 2048 40136703 20067328 83 Linux
/mnt/thevault/everything/backups/own.raw2 40138750 41940991 901121 5 Extended
/mnt/thevault/everything/backups/own.raw5 40138752 41940991 901120 82 Linux swap / Solaris
The partition we are interested in is raw1, the Linux (type 83) partition. If you installed Debian on the disk and went with standard default partitioning options, putting everything under / in the same partition, yours will be the same.
Pull your unit size from the output as well, which in this case is 512 bytes, and then multiply that by the start sector (2048) to get 1048576.
Now we mount the .img file as a loopback device, starting with our calculated offset:
me@box$ mount -o loop,offset=1048576 /mnt/thevault/everything/backups/own.raw /mnt/own
And now you can access your files inside the old VM disk! Don't forget to clean up, now.