将目录转换为QEMU / KVM虚拟磁盘映像

我在/ var / backups / disk1中有一个目录,我想要转换成虚拟磁盘映像,然后使用QEMU或KVM启动(该目录包含虚拟机的文件系统,已复制通过rsync输出)。

虽然有很多指令将一个完整的物理磁盘转换为一个虚拟磁盘,但是将只有一个目录的内容打包成一个虚拟磁盘映像要比我想象的要困难得多。 有任何想法吗?

顺便说一下,我知道我可以使用qemu-img将块设备转换为虚拟磁盘(例如,“qemu-img convert -f / dev / sdc -O qcow2 disk.qcow2”),所以如果我只能得到目录/ var / backups / disk1看起来是一个块设备,那么理论上我应该能够使用qemu-img完成我的目标。 我想过创造性的方法,使用NBD或环回设备将目录作为块设备公开,但是还没有成功。

首先,创build所需大小的原始图像。 我假设10G就够了。 使用seek会创build一个稀疏文件 ,节省空间。

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

接下来,在其上创build一个文件系统。

 mkfs.ext4 -F example.img 

(请注意,您需要mkfs.ext4-F选项才能在文件上运行,而不是在磁盘分区上运行)

然后,安装它。

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

现在您可以将文件复制到/ mnt / example。 一旦完成,卸载它,您可以使用example.img作为虚拟机中的驱动器。 如果你想要,你可以从原始图像转换为另一种格式,如qcow2e使用qemu-img,但这不是必需的。

看起来像libguestfs可以做到这一点,请参阅virt-make-fs(1)和virt-copy-in(1) 。

在Fedora 23中使用Michaels策略:

 # dnf install -y libguestfs-tools-c # virt-make-fs --format=raw --label mylabel the_directory myfs.raw 

这会创buildext2文件系统,您可以挂载到某个目录:

 # mount file.fs /mnt 

现在/ mnt包含所有的文件

那么从一个虚拟机访问目录作为networking共享,同样也挂载到目标虚拟磁盘映像? 你比从共享执行一个简单的副本到装载的磁盘映像。