Tengo un directorio lleno de datos /var/backups/disk1
que quiero convertir en una imagen de disco virtual que luego podré iniciar usando QEMU o KVM (el directorio contiene el sistema de archivos para una máquina virtual, copiado a través de rsync).
Si bien existen muchas instrucciones para convertir un disco físico completo en un disco virtual, empaquetar solo el contenido de un solo directorio en una imagen de disco virtual resulta ser mucho más difícil de lo que esperaba. ¿Algunas ideas?
Por cierto, sé que puedo usar qemu-img
para convertir un dispositivo de bloque en un disco virtual (por ejemplo, qemu-img convert -f /dev/sdc -O qcow2 disk.qcow2
), por lo que si solo pudiera hacer que el directorio /var/backups/disk1
parezca un dispositivo de bloque, entonces, en teoría, debería ser capaz de lograr mi objetivo usando qemu-img
. Sin embargo, he pensado en formas creativas de exponer el directorio como un dispositivo de bloque usando NBD o un dispositivo de bucle invertido, y no he tenido éxito.
qemu-img
yfallocate
son un poco más convenientes quedd
.Parece que libguestfs puede hacerlo, vea virt-make-fs (1) y tal vez virt-copy-in (1) .
fuente
virt-make-fs
delqcow2
ejemplo de libguestfs/server//a/332114/163884 lo mencionó, pero aquí hay un ejemplo completo:
Tenga en cuenta que
sudo
no es necesario, excepto para la instalación y las soluciones de errores de Ubuntu.Luego verifiqué que QEMU realmente puede leerlo con:
Entonces puedo montar la imagen dentro de QEMU Linux y leer el archivo.
virt-make-fs
ejemplo extEsta increíble herramienta también puede crear sistemas de archivos ext sin procesar, por ejemplo:
que podemos verificar directamente en el host con:
Minimización del tamaño de la imagen.
Una característica realmente buena
virt-make-fs
es que intenta minimizar automáticamente el tamaño de la imagen si eso es lo que queremos:entonces:
me dice que la imagen está llena al 82%:
Podemos agregar fácilmente algo de espacio adicional al mínimo con
--size-=+
:gastos generales del diario ext4
El manual también menciona que:
y es interesante verificar eso con:
que produce:
así que vemos que el ext4 salió significativamente más grande.
errores de Ubuntu libguestfs
Ahora por el lado negativo: parece que actualmente no hay mantenedor de Ubuntu y la biblioteca generalmente tiene errores en Ubuntu.
sudo
en teoría no se requiere, pero se requiere debido a un error de empaquetado de Ubuntu a menos que hagamos una solución alternativa: /ubuntu/1046828/how-to-run-libguestfs-tools-tools-such-as- virt-make-fs-without-sudo / 1046829 # 1046829Después de eso, sin nuestras soluciones, 18.04 (pero no 16.04) falla con: https://bugzilla.redhat.com/show_bug.cgi?id=1591617
debido a un error que ya se corrigió en sentido ascendente.
Probado en Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3, QEMU 1: 2.11 + dfsg-1ubuntu7.3.
fuente
Usando la estrategia de Michaels en Fedora 23:
Esto crea un sistema de archivos ext2, que puede montar en algún directorio:
Ahora / mnt contiene todos tus archivos
fuente
file.fs
es un archivo, ¿no debería ser elmount
comandomount -o loop file.fs /mnt
:?¿Qué pasa con el acceso al directorio como un recurso compartido de red desde una VM que también está montada en su imagen de disco virtual de destino? Usted que simplemente realizar una copia simple del recurso compartido a la imagen de disco montada.
fuente
Prefiero (y uso) la respuesta de Ciro Santilli, pero aquí hay algo que funciona con un
guestfish
shell:fuente