Tuesday 28 April 2009

Mounting a Xen .xm (xmfile) disk image file

You've probably wondered how to mount one of these pesky things. It turns out they're actually just entire disk images with a boot sector and often with multiple partitions. On Linux you can use the losetup tool - It allows one to mount a disk image on a /dev/loopX device. If it has multiple partitions then you need to find out where in the image the particular partitions are that you want to mount. Firstly you mount the entire image on a [spare] loop device e.g.:
sudo losetup /dev/loop0 diskimage.xm
Then run fdisk to check out the partition table (in sectors):
sudo fdisk -ul /dev/loop0
It will list the partitions - note down the start of the partition you're interested it and multiply it by 512 (the number of bytes per sector): e.g. If the first partition starts at 63 you multiply it by 512 and get 32256 then you use that as the 'offset' argument (i.e. how far into the disk image your chosen partition resides) to the losetup command:
sudo losetup -o32256 /dev/loop0 diskimage.xm
Next you need to determine the filesystem type - you maybe able to check this what fdisk reports, but you can also use the file command:
file -s /dev/loop0
Then mount that partition onto a spare directory on your system (e.g. ext3 filesystem on /mnt):
sudo mount -text3 /dev/loop0 /mnt
And it should then be mounted at /mnt and away you go. Thanks to this page for getting me going - plus a comment there mentions that there's simpler way to mount the image - if you're running a kernel version > 2.6.26 (You can specify modprobe loop max_part=63 and it will create the partitions automatically on calling losetup - but that only works if loop is a module - which it isn't in Ubuntu 9.04).

[corrected 2oct09]

No comments:

Post a Comment