virt-make-fs
do qcow2
exemplo libguestfs
/server//a/332114/163884 mencionou, mas aqui está um exemplo 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
Observe como isso sudo
não é necessário, exceto para soluções de solução de problemas de instalação e Ubuntu.
Verifiquei então que o QEMU pode realmente lê-lo com:
qemu-system-x86_64 -drive file=sysroot.ext2.qcow2,format=qcow2,if=virtio,snapshot ...
Sou capaz de montar a imagem dentro do QEMU Linux e ler o arquivo.
virt-make-fs
exemplo ext
Essa ferramenta incrível também pode criar sistemas de arquivos ext brutos, por exemplo:
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2
virt-make-fs --format=raw --type=ext4 sysroot sysroot.ext4
com o qual podemos verificar diretamente no host:
mkdir -p mnt
dev="$(sudo losetup --show -f -P sysroot.ext4)"
sudo mount -o loop "$dev" mnt
cmp sysroot/myfile mnt/myfile
Minimização do tamanho da imagem
Uma característica realmente boa virt-make-fs
disso é que ele tenta minimizar automaticamente o tamanho da imagem, se é isso que queremos:
O virt-make-fs usa como padrão minimizar o espaço extra, mas você pode usar o sinalizador --size para deixar espaço no sistema de arquivos, se desejar.
tão:
df -h
me diz que a imagem está preenchida em 82%:
/dev/loop17 1.5M 1.1M 244K 82% /home/ciro/test/guestfs/mnt
Podemos facilmente adicionar algum espaço extra além do mínimo com --size-=+
:
virt-make-fs --format=raw --size=+8M --type=ext2 sysroot sysroot.ext2
sobrecarga de diário ext4
O manual também menciona que:
Observe que os sistemas de arquivos ext3 contêm um diário, geralmente com tamanho de 1 a 32 MB. Se você não usar o sistema de arquivos de uma maneira que exija o diário, isso será desperdiçado.
e é interessante verificar isso com:
du -bs *
que produz:
1052672 sysroot
1446297 sysroot.ext2
2599731 sysroot.ext4
então vemos que o ext4 saiu significativamente maior.
libguestfs Ubuntu bugs
Agora, a desvantagem: parece não haver mantenedor do Ubuntu atualmente e a biblioteca geralmente está com bugs no Ubuntu.
sudo
não é, em teoria, necessário, mas é necessário devido a um erro de empacotamento do Ubuntu, a menos que façamos uma solução alternativa: /ubuntu/1046828/how-to-run-libguestfs-tools-tools-such-as- virt-make-fs-sem-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.
Depois disso, sem nossas soluções alternativas, 18.04 (mas não 16.04) falha com: https://bugzilla.redhat.com/show_bug.cgi?id=1591617
libguestfs: error: tar_in: write error on directory: /:
devido a um erro que já foi corrigido a montante.
Testado no Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3, QEMU 1: 2.11 + dfsg-1ubuntu7.3.
qemu-img
efallocate
são um pouco mais convenientes quedd
.