Eu tenho um diretório preenchido com dados e /var/backups/disk1
desejo converter em uma imagem de disco virtual, que poderei inicializar usando QEMU ou KVM (o diretório contém o sistema de arquivos de uma máquina virtual, copiado via rsync).
Embora existam muitas instruções disponíveis para converter um disco físico completo em um disco virtual, empacotar apenas o conteúdo de um único diretório em uma imagem de disco virtual está se tornando muito mais difícil do que eu esperava. Alguma ideia?
A propósito, eu sei que posso usar qemu-img
para converter um dispositivo de bloco em um disco virtual (por exemplo, qemu-img convert -f /dev/sdc -O qcow2 disk.qcow2
); portanto, se eu conseguisse fazer com que o diretório /var/backups/disk1
parecesse ser um dispositivo de bloco, teoricamente eu seria capaz de atingir meu objetivo usando qemu-img
. No entanto, pensei em maneiras criativas de expor o diretório como um dispositivo de bloco usando o NBD ou um dispositivo de loopback e não obtive sucesso.
qemu-img
efallocate
são um pouco mais convenientes quedd
.Parece que libguestfs pode fazer isso, veja virt-make-fs (1) e talvez virt-copy-in (1) .
fonte
virt-make-fs
doqcow2
exemplo libguestfs/server//a/332114/163884 mencionou, mas aqui está um exemplo completo:
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:
Sou capaz de montar a imagem dentro do QEMU Linux e ler o arquivo.
virt-make-fs
exemplo extEssa ferramenta incrível também pode criar sistemas de arquivos ext brutos, por exemplo:
com o qual podemos verificar diretamente no host:
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:tão:
me diz que a imagem está preenchida em 82%:
Podemos facilmente adicionar algum espaço extra além do mínimo com
--size-=+
:sobrecarga de diário ext4
O manual também menciona que:
e é interessante verificar isso com:
que produz:
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 # 1046829Depois disso, sem nossas soluções alternativas, 18.04 (mas não 16.04) falha com: https://bugzilla.redhat.com/show_bug.cgi?id=1591617
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.
fonte
Usando a estratégia Michaels no Fedora 23:
Isso cria o sistema de arquivos ext2, que você pode montar em algum diretório:
Agora / mnt contém todos os seus arquivos
fonte
file.fs
for um arquivo, não deve omount
comando ser:mount -o loop file.fs /mnt
?Que tal acessar o diretório como um compartilhamento de rede de uma VM que também está montada na sua imagem de disco virtual de destino? Você do que apenas executar uma cópia simples do compartilhamento para a imagem de disco montada.
fonte
Prefiro (e uso) a resposta de Ciro Santilli, mas aqui está algo que funciona com um
guestfish
shell:fonte