virt-make-fs
libguestfsのqcow2
例から
/server//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.36.13-1ubuntu3、QEMU 1:2.11 + dfsg-1ubuntu7.3でテストされています。
qemu-img
およびfallocate
よりも少し便利ですdd
。