¿Cómo reducir el tamaño de la imagen de disco de la máquina virtual sin formato (kvm)?

¿Cómo reducir el tamaño de la imagen de disco de la máquina virtual sin formato (kvm)?

Digamos que tengo linux-vm-image.rawun tamaño de 10 GB. En el interior hay una etx4partición primaria (se utiliza una tabla de particiones tipo MS-DOS "clásica", no GPT) (no se utiliza LVM), que se extiende a todo el volumen. Y los datos reales asignados en esa partición son, por ejemplo, 3 GB.

Esta imagen está preparada para usarse en algún entorno de virtualización (kvm+OpenStack en mi caso), y cualquier VM creada a partir de esta imagen cambiaría su tamaño al tamaño del disco virtual objetivo, según la elección del usuario. Por lo tanto, no hay motivos para mantener espacio libre en el disco dentro de esa imagen de disco.

¿Cómo podría reducir el tamaño de esta imagen de disco sin formato al mínimo (de 10 GB a ~3 GB)?

Hayalguno instruccionespara qcow2imágenes de disco, pero tengo que usar rawsolo imágenes, no qcow, no OVFy no otras.

Mi conjetura es algo así como

  • montar esta imagen en algún lugar como un dispositivo de bloque
  • haga algo de mantenimiento para que todos los archivos dentro de la partición ext4 se muevan al "principio" de la misma, en otras palabras, haga una desfragmentación del espacio libre
  • desmontar imagen
  • minimizar el tamaño del sistema de archivos en una imagen (para que coincida con el tamaño de los datos que contiene)
  • minimizar el tamaño de la imagen (para que coincida con el tamaño del sistema de archivos dentro de ella)
  • actualice la tabla de particiones en la imagen para que coincida con el nuevo tamaño de partición

¿Pero no intento inventar una bicicleta? ¿Existe algún comando de una línea o software especial para hacer lo que quiero?

Respuesta1

Las imágenes sin procesar no son realmente fáciles de cambiar de tamaño. Sin embargo, puede probar zerofreeel sistema de archivos (desmontado) y luego comprimir el archivo de imagen resultante.

Además, verifique si su entorno de destino admite el formato de contenedor OVF, que permite imágenes de disco comprimidas. (Aún se aplica la gratuidad cero).

Respuesta2

Estás en el camino correcto. Si puede montarlo como un dispositivo de bloque (montaje en bucle), probablemente pueda trabajar en él.

gparted hará la mayor parte de lo que usted desea:
1. mover los datos de FS al frente de su partición (reducir FS)
2. reducir la partición y ajustar la tabla de particiones
3. incluso puede proporcionarle el "disco" restante tamaño cuando tenga que imprimir la tabla de particiones actualizada (por ejemplo, el último sector de la última partición, etc.).

Esa es la parte difícil. Después de eso, desmóntalo. Es posible que tengas que calcular el tamaño exacto de tu "disco" a mano, pero después de eso, un simple truncamiento del archivo debería bastar.

ACTUALIZACIÓN: Si su tabla de particiones es de tipo MBR, está bien. Con GPT, tiene una copia reflejada al final del disco. Por lo tanto, tenga cuidado con eso, ya que gparted puede no ser lo suficientemente inteligente para eso (a menos que pueda darle la imagen sin formato directamente). Si tiene problemas, considere gdisk como un paso después del truncamiento. Trunque con algunos bloques adicionales y obtenga gdisk/equiv para reconstruir la copia reflejada (probablemente será necesario realizar el montaje en bucle por segunda vez).

información relacionada