virt-make-fs
z qcow2
przykładu libguestfs
Wspomniał o tym https://serverfault.com/a/332114/163884 , ale oto pełny przykład:
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
Zwróć uwagę, że sudo
nie jest to wymagane, z wyjątkiem obejścia instalacji i błędów Ubuntu.
Następnie zweryfikowałem, że QEMU może to odczytać za pomocą:
qemu-system-x86_64 -drive file=sysroot.ext2.qcow2,format=qcow2,if=virtio,snapshot ...
Jestem wtedy w stanie zamontować obraz w QEMU Linux i odczytać plik.
virt-make-fs
ext przykład
To niesamowite narzędzie może również tworzyć surowe systemy plików ext, np .:
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2
virt-make-fs --format=raw --type=ext4 sysroot sysroot.ext4
które możemy zweryfikować bezpośrednio na hoście za pomocą:
mkdir -p mnt
dev="$(sudo losetup --show -f -P sysroot.ext4)"
sudo mount -o loop "$dev" mnt
cmp sysroot/myfile mnt/myfile
Minimalizacja rozmiaru obrazu
Naprawdę dobrą cechą virt-make-fs
jest to, że automatycznie próbuje zminimalizować rozmiar obrazu, jeśli tego właśnie chcemy:
Domyślnie Virt-make-fs minimalizuje dodatkowe miejsce, ale możesz użyć flagi --size, aby zostawić miejsce w systemie plików, jeśli chcesz.
więc:
df -h
mówi mi, że obraz jest wypełniony w 82%:
/dev/loop17 1.5M 1.1M 244K 82% /home/ciro/test/guestfs/mnt
Możemy łatwo dodać dodatkowe miejsce ponad minimum dzięki --size-=+
:
virt-make-fs --format=raw --size=+8M --type=ext2 sysroot sysroot.ext2
obciążenie dziennika ext4
Podręcznik wspomina również, że:
Należy pamiętać, że systemy plików ext3 zawierają dziennik, zwykle o wielkości 1-32 MB. Jeśli nie zamierzasz używać systemu plików w sposób, który wymaga dziennika, to jest to po prostu zmarnowane obciążenie.
i warto to sprawdzić za pomocą:
du -bs *
który produkuje:
1052672 sysroot
1446297 sysroot.ext2
2599731 sysroot.ext4
więc widzimy, że ext4 wyszedł znacznie większy.
błędy libuntestfs Ubuntu
Teraz na minus: wydaje się, że obecnie nie ma opiekuna Ubuntu, a biblioteka jest ogólnie wadliwa na Ubuntu.
sudo
nie jest teoretycznie wymagany, ale jest wymagany z powodu błędu opakowania Ubuntu, chyba że obejdziemy obejście: /ubuntu/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.
Następnie, bez naszych obejść, 18.04 (ale nie 16.04) kończy się niepowodzeniem: https://bugzilla.redhat.com/show_bug.cgi?id=1591617
libguestfs: error: tar_in: write error on directory: /:
z powodu błędu, który został już naprawiony w górę.
Testowany w Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3, QEMU 1: 2.11 + dfsg-1ubuntu7.3.
qemu-img
ifallocate
są nieco wygodniejsze niżdd
.