virt-make-fs
da libguestfs qcow2
esempio
https://serverfault.com/a/332114/163884 lo ha menzionato, ma ecco un esempio completo:
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
Nota come sudo
non è richiesto, ad eccezione dell'installazione e delle soluzioni alternative ai bug di Ubuntu.
Ho quindi verificato che QEMU può effettivamente leggerlo con:
qemu-system-x86_64 -drive file=sysroot.ext2.qcow2,format=qcow2,if=virtio,snapshot ...
Sono quindi in grado di montare l'immagine all'interno di QEMU Linux e leggere il file.
virt-make-fs
ext esempio
Questo fantastico strumento può anche creare filesystem ext non elaborati, ad esempio:
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2
virt-make-fs --format=raw --type=ext4 sysroot sysroot.ext4
che possiamo verificare direttamente sull'host con:
mkdir -p mnt
dev="$(sudo losetup --show -f -P sysroot.ext4)"
sudo mount -o loop "$dev" mnt
cmp sysroot/myfile mnt/myfile
Riduzione al minimo delle dimensioni dell'immagine
Una caratteristica davvero buona di virt-make-fs
è che cerca automaticamente di ridurre al minimo le dimensioni dell'immagine se è quello che vogliamo:
Predefinito Virt-make-fs riduce al minimo lo spazio extra, ma puoi usare il flag --size per lasciare spazio nel filesystem se lo desideri.
così:
df -h
mi dice che l'immagine è riempita all'82%:
/dev/loop17 1.5M 1.1M 244K 82% /home/ciro/test/guestfs/mnt
Possiamo facilmente aggiungere un po 'di spazio in più rispetto al minimo con --size-=+
:
virt-make-fs --format=raw --size=+8M --type=ext2 sysroot sysroot.ext2
ext4 journal overhead
Il manuale menziona inoltre che:
Si noti che i filesystem ext3 contengono un journal, in genere di dimensioni 1-32 MB. Se non hai intenzione di utilizzare il filesystem in un modo che richiede il journal, questo è solo uno spreco di risorse.
ed è interessante verificarlo con:
du -bs *
che produce:
1052672 sysroot
1446297 sysroot.ext2
2599731 sysroot.ext4
quindi vediamo che ext4 è uscito significativamente più grande.
libguestfs Bug di Ubuntu
Ora per il rovescio della medaglia: sembra che al momento non ci siano manutentori di Ubuntu e la libreria è generalmente buggy su Ubuntu.
sudo
in teoria non è richiesto, ma è necessario a causa di un bug di packaging di Ubuntu a meno che non eseguiamo una soluzione alternativa: /ubuntu/1046828/how-to-run-libguestfs-tools-tools-such-as- virt-make-FS-senza-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.
Successivamente, senza le nostre soluzioni alternative, il 18.04 (ma non il 16.04) fallisce con: https://bugzilla.redhat.com/show_bug.cgi?id=1591617
libguestfs: error: tar_in: write error on directory: /:
a causa di un bug che era già stato corretto a monte.
Testato in Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3, QEMU 1: 2.11 + dfsg-1ubuntu7.3.
qemu-img
efallocate
sono leggermente più convenienti didd
.