I have a directory filled with data at /var/backups/disk1 that I want to convert into a virtual disk image which I'll then be able to boot using QEMU or KVM (the directory contains the file system for a virtual machine, copied out via rsync).

While there are plenty of instructions out there for converting a complete physical disk to a virtual disk, packaging up only the contents of a single directory into a virtual disk image is turning out to be much more difficult than I expected. Any ideas?

By the way, I know I can use qemu-img to convert a block device into a virtual disk (e.g., "qemu-img convert -f /dev/sdc -O qcow2 disk.qcow2"), so if only I could get the directory /var/backups/disk1 to appear to be a block device, then theoretically I should be able to accomplish my goal using qemu-img. I've thought about creative ways to expose the directory as a block device using NBD or a loopback device, however, and have not had success.

link|improve this question
feedback

3 Answers

First, create a raw image of the required size. I'll assume 10G is enough. Using seek creates a sparse file, which saves space.

dd if=/dev/null of=example.img bs=1M seek=10240

Next, create a filesystem on it.

mkfs.ext4 example.img

Then, mount it.

mkdir /mnt/example
mount -t ext4 -o loop example.img /mnt/example

Now you can copy your files to /mnt/example. Once this is done, unmount it and you can use example.img as a drive in a virtual machine. If you want you can convert it from a raw image to another format like qcow2e using qemu-img, but this isn't required.

link|improve this answer
feedback

Seems like libguestfs can do it, see virt-make-fs(1) and maybe virt-copy-in(1).

link|improve this answer
feedback

What about accessing the directory as a network share from a VM that is also mounted to your target virtual disk image? You than than just perform a simple copy from the share to the mounted disk image.

link|improve this answer
That should work, and is similar to my current strategy, which is to build a VM and rsync the data in. It would be great if there were a quicker and cleaner solution, though. Copying the data into a new machine gets pretty messy because you have to worry about making sure you exclude certain files that shouldn't be copied, like fstab and most things in /boot – Chris Mar 13 '11 at 21:22
"exclude certain files that shouldn't be copied, like fstab and most things in /boot" - may not be that much of an issue when the VM target is an additional volume. – user48838 Mar 14 '11 at 12:32
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.