Tengo una VM VirtualBox que configuró un tamaño de disco duro muy grande (más grande que el host). Por mi error, un programa en la VM generó muchos archivos de registro y el tamaño del archivo VDI sigue creciendo hasta que no hay espacio en el host.
Ahora he eliminado los archivos de registro pero el tamaño del archivo VDI no se está reduciendo después de usar VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact
¿Hay alguna forma de compactar realmente el tamaño del archivo VDI? ¡Gracias!
fuente
dd ...; rm /bigfile
esto minimizará el tiempo con un disco lleno en caso de que no esté esperandodd
que se complete.Estoy en un host de Windows 7 con invitados de Windows. Aquí hay un archivo por lotes que escribí para compactar todos los VDI en un árbol de carpetas
Dejé los enlaces en los comentarios para que pueda (más o menos) decir cómo funciona.
editar
Bueno, después de todo eso, probé la herramienta CloneVDI e hizo un buen trabajo en mucho menos tiempo y con un solo clic.
fuente
Invitado de Debian en el host de Windows usando descartar / TRIM.
Esta no es una respuesta directa per se, ya que estoy abordando el problema, no la pregunta. En lugar de compactar periódicamente la imagen, esta solución utiliza el descarte para eliminar automáticamente los bloques no utilizados en la imagen del disco VM del host.
Esta solución requiere un sistema de archivos invitado que admita TRIM continuo. El wiki de Arch Linux tiene una lista de sistemas de archivos que admiten operaciones TRIM .
FDE y cryptoroot no están cubiertos específicamente, ya que existen problemas de seguridad y ninguna de las otras soluciones a esta pregunta permitiría la compactación. La wiki de Arch Linux tiene información sobre dispositivos TRIM y dm-crypt .
En teoría, esto funcionará para todos los invitados de Linux en hosts VBox que usan almacenamiento VDI.
Configuración del host
Con VBox salido y sin máquinas virtuales en ejecución, agregue soporte de descarte a sus discos configurando ambos
discard
ynonrotational
para cada disco en el archivo de configuración para la máquina virtual. En este momentodiscard
no está en la GUI, perononrotational
está expuesto como la casilla de verificación "Unidad de estado sólido". (ref: foros de vbox, soporte de descarte )Inicie la VM y verifique que el soporte TRIM esté habilitado:
Configuración de invitado
Si LVM está en uso, cambie la configuración de descarte en
/etc/lvm/lvm.conf
. (ref: debian wiki, ejemplo lvm.conf )En fstab, agregue la
discard
opción a los sistemas de archivos que desea descartar automáticamente (ref: debian wiki, ejemplo de fstab )Vuelva a montar los sistemas de archivos para que recojan sus nuevas opciones.
Recorte manualmente los bloques libres ahora con
fstrim
.fstrim
usa el sistema de archivos montado, no el dispositivo de bloque que lo respalda. En lugar de configurar el descarte continuofstab
, esto podría hacerse en un cron semanal. (Se recomienda el cron semanal para los SSD físicos que pueden tener soporte cuestionable para TRIM, pero esto no es relevante aquí ya que los SSD subyacentes son manejados por el sistema operativo host. Ver: advertencia de recorte ssd ).En este punto, el tamaño de los sistemas de archivos dentro de la VM y el tamaño de las imágenes de la VM deberían tener un valor bastante cercano.
Probado con:
fuente
Para MacOS Guest, haga esto:
Anular espacio libre en el sistema de invitado:
(reemplace / Volumes / Macintosh HD con el nombre de su unidad)
Apague la máquina virtual invitada
Ejecute este comando para reducir el tamaño de la imagen del disco VDI
O
fuente
Lo uso para mi imagen VDI montada en Debian virtual en Windows VirtualBox. No es una solución general, pero al menos debería darte una idea de lo que hago.
Comandos en Debian:
Comandos en Windows:
Espero eso ayude :)
fuente
No quiero habilitar el soporte TRIM en el sistema operativo, porque cada eliminación de datos forzará la compactación de datos en el archivo VDI, haciendo que el sistema invitado sea inutilizable cuando el archivo VDI esté en un disco rotativo clásico. Para mí es mejor realizar la compactación a mano, por ejemplo, una vez al mes.
Durante la compactación normal, el contenido del archivo VDI se copia en un archivo nuevo. Esto requiere un espacio libre (a veces grande) en el disco host.
Tengo una solución similar a la señalada por Andrew Domaszek. Funciona muy bien incluso con NTFS (Windows10).
Para hacer esto:
Cambie los discos basados en VDI para que sean visibles como SSD con soporte TRIM:
máquina de arranque
mount /dev/sda2 /mnt
dd if=/dev/zero of=/mnt/bigfile
rm /mnt/bigfile
fstrim -v /mnt
fuente
Un truco muy bueno para complementar la respuesta aceptada es que puede escapar sin hacer ninguna compactación después de poner a cero el espacio de invitado, utilizando un sistema de archivos comprimido en el host (por ejemplo, seleccionando comprimir la carpeta de unidades virtuales en las propiedades NTFS en un Host de Windows). De hecho, esto tiene el beneficio de ahorrar mucho más espacio porque los sistemas operativos tienden a contener una gran cantidad de texto repetitivo o archivos binarios (por ejemplo, una unidad de invitado de 30 GB que tenía 15 GB de espacio a cero puede convertirse en 4 GB en la unidad host).
Las advertencias incluyen que el acceso a la unidad en el hardware real puede aumentar y hay un ligero aumento en el uso de la CPU.
fuente
NOTA IMPORTANTE PARA LEGADO (~ 1997-2007) SISTEMAS OPERATIVOS
En general, las técnicas en las respuestas dadas anteriormente son válidas; SIN EMBARGO, hay un caso especial muy importante.
Durante un período de algunos años, quizás 1997-2007 más o menos, los sistemas operativos de 32 bits seguían siendo la norma, pero los discos duros de más de 2 GB ya estaban en uso. Como resultado, cuando intente consumir todo el espacio libre escribiendo un archivo de ceros (que siempre debe hacerse como root, para incluir el espacio libre privilegiado de root, que nadie más puede tocar), puede ver:
Archivo demasiado grande
en lugar de lo que esperas:
No queda espacio en el dispositivo.
Si esto ocurre, lo más probable es que haya alcanzado una limitación de tamaño de archivo de 2GB. Esto era común en ese momento porque muchas operaciones de archivos arrojaban resultados en enteros de 32 bits con signo, de modo que los valores negativos podían informar códigos de error. Esto efectivamente significó que los resultados de compensación se limitaron a 2 ^ 31 bytes sin medidas especiales.
La solución es sencilla: siga creando archivos de puesta a cero separados y con nombres diferentes hasta que el disco realmente se quede sin espacio.
Si usted es un instructor que desea demostrar esta situación para una clase, una imagen de disco de 4GB con una copia antigua de Red Hat Linux 7.0 es suficiente.
fuente