virt-make-fs
来自libguestfs qcow2
示例
https://serverfault.com/a/332114/163884提到了它,但这是一个完整的示例:
sudo apt-get install libguestfs-tools
# Workarounds for Ubuntu 18.04 bugs. See section below.
sudo rm -rf /var/cache/.guestfs-*
echo dash | sudo tee /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/zz-dash-packages
sudo chmod +r /boot/vmlinuz-*
mkdir sysroot
# Just a test file.
dd if=/dev/urandom of=sysroot/myfile bs=1024 count=1024
virt-make-fs --format=qcow2 --type=ext2 sysroot sysroot.ext2.qcow2
请注意sudo
,除了安装和Ubuntu错误解决方法外,不需要这样做。
然后,我验证了QEMU实际上可以通过以下方式读取它:
qemu-system-x86_64 -drive file=sysroot.ext2.qcow2,format=qcow2,if=virtio,snapshot ...
然后,我可以在QEMU Linux内挂载映像并读取文件。
virt-make-fs
外部例子
这个很棒的工具还可以制作原始的ext文件系统,例如:
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2
virt-make-fs --format=raw --type=ext4 sysroot sysroot.ext4
我们可以使用以下命令直接在主机上进行验证:
mkdir -p mnt
dev="$(sudo losetup --show -f -P sysroot.ext4)"
sudo mount -o loop "$dev" mnt
cmp sysroot/myfile mnt/myfile
图像尺寸最小化
的一个非常好的功能virt-make-fs
是,如果我们要这样做,它将自动尝试最小化图像大小:
Virt-make-fs默认情况下最小化多余的空间,但是如果需要,可以使用--size标志在文件系统中保留空间。
所以:
df -h
告诉我图像已填充82%:
/dev/loop17 1.5M 1.1M 244K 82% /home/ciro/test/guestfs/mnt
我们可以轻松地在最小值的基础上添加一些额外的空间--size-=+
:
virt-make-fs --format=raw --size=+8M --type=ext2 sysroot sysroot.ext2
ext4日志开销
该手册还提到:
请注意,ext3文件系统包含一个日记,大小通常为1-32 MB。如果您不打算以需要日志的方式使用文件系统,那么这只会浪费掉开销。
并用以下方法验证这一点很有趣:
du -bs *
产生:
1052672 sysroot
1446297 sysroot.ext2
2599731 sysroot.ext4
因此,我们看到ext4的尺寸明显更大。
libguestfs Ubuntu错误
现在不利的一面是:目前似乎没有Ubuntu维护者,并且该库在Ubuntu上通常是错误的。
sudo
从理论上讲,这不是必需的,但由于Ubuntu打包错误,除非我们采取以下解决方法,否则它是必需的:https : //askubuntu.com/questions/1046828/how-to-run-libguestfs-tools-tools-such-as- virt-make-fs-without-sudo / 1046829#1046829
libguestfs: error: /usr/bin/supermin exited with error status 1.
To see full error messages you may need to enable debugging.
Do:
export LIBGUESTFS_DEBUG=1 LIBGUESTFS_TRACE=1
and run the command again. For further information, read:
http://libguestfs.org/guestfs-faq.1.html#debugging-libguestfs
You can also run 'libguestfs-test-tool' and post the *complete* output
into a bug report or message to the libguestfs mailing list.
libguestfs: error: /usr/bin/supermin exited with error status 1.
此后,如果没有我们的解决方法,则18.04(但不是16.04)将失败,并显示:https ://bugzilla.redhat.com/show_bug.cgi?id = 1591617
libguestfs: error: tar_in: write error on directory: /:
由于已在上游修复的错误。
在Ubuntu 18.04,libguestfs-tools 1:1.31.36.13-1ubuntu3,QEMU 1:2.11 + dfsg-1ubuntu7.3中进行了测试。
qemu-img
并且fallocate
比dd
。