Un archivo de disco duro virtual Virtual Box en crecimiento dinámico es capaz de crecer a pedido de la máquina virtual hasta el tamaño máximo que definimos al configurar este archivo. Sin embargo, no libera el espacio de archivos que eliminamos en el sistema operativo invitado.
En caso de que el disco haya crecido demasiado, podemos compactarlo nuevamente, siempre que el espacio no utilizado esté lleno de ceros y la unidad esté en formato VDI.
Para un sistema de archivos ext2 a ext 4, esto se puede hacer desde el invitado Ubuntu con la utilidad de línea de comandos zerofree * .
zerofree /dev/sdxX
Esto necesita que la unidad no esté en uso y que no esté montada . Por lo tanto, es posible que tengamos que vincularlo temporalmente a otra VM que hayamos creado para este propósito, o necesitamos iniciar un entorno en vivo de Ubuntu en esta VM.
Reemplace /dev/sdxXcon la partición formateada ext2, ext3 o ext4 en cuestión.
En más de una partición, tenemos que repetir zerofreepara cada partición. Tenga en cuenta que al llenar con ceros el archivo virtual crecerá temporalmente hasta su tamaño máximo.
Una vez que todo el espacio de la unidad no utilizada se llena con ceros, reducimos la unidad con
VBoxManage modifyhd <name>.vdi --compact
Esto disminuirá considerablemente el tamaño del archivo de nuestro archivo VDI.
* En un invitado de Windows, podemos reemplazar el espacio no utilizado con la utilidad sdelete.
¿Funcionará esto también para un sistema de archivos encriptado dentro del invitado?
smichak
Seguro. Si está utilizando ecryptfs, los archivos cifrados se parecen a los archivos normales de las utilidades de disco, y esto funcionará. Si está utilizando el cifrado de disco completo, no será reconocido como una de todos modos ext con formato de partición :)
chronospoon
Estoy usando la partición ext4 en un dispositivo de bloque dm-crypt ... Probé el método y no veo el archivo .vdi como más pequeño después de la compactación. Creo que los bloques cero se guardan como bloques distintos de cero en el dispositivo de bloque debajo de la cripta dm.
smichak
2
@smichak: ese es el punto de cifrado. Encriptará toda su unidad para asegurarse también de que no podamos ver los límites del archivo.
Takkat
3
Si no desea conectar su VDI a otra máquina, puede iniciar en modo de recuperación y montar el disco solo lectura mount -n -o remount,ro -t ext4 /dev/sda1y luego zerofree -v /dev/sda1.
Hamid Nazari
1
Aquí hay algunas formas alternativas de poner a cero el espacio libre en disco (que puede ser la parte que consume más tiempo). Después, aún tendrá que ejecutar VBoxManage modifyhd <disk> --compactpara compactar el archivo de disco real.
Este comando puede poner a cero el disco mientras está desmontado:
apt-get install zerofree
zerofree -v /dev/sdxN
Aquí hay un ejemplo de cómo obtener dd para imprimir periódicamente la salida:
dd if=/dev/zero of=temp-file-on-disk bs=20M
# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')
Aquí hay un ddprograma similar que imprimirá automáticamente la salida periódicamente:
Lo he visto zerofreeusado en un sistema de archivos montado, pero cuando se montó solo lectura. Incluso para root FS: sudo mount -o remount,ro /pero en una sesión de GUI, la raíz estará ocupada, por lo que fallará. Pero es posible en el nivel de ejecución 1 ( telinit 1), por lo que no necesitará arrancar desde un CD en vivo para hacerlo.
ecryptfs
, los archivos cifrados se parecen a los archivos normales de las utilidades de disco, y esto funcionará. Si está utilizando el cifrado de disco completo, no será reconocido como una de todos modos ext con formato de partición :)mount -n -o remount,ro -t ext4 /dev/sda1
y luegozerofree -v /dev/sda1
.Aquí hay algunas formas alternativas de poner a cero el espacio libre en disco (que puede ser la parte que consume más tiempo). Después, aún tendrá que ejecutar
VBoxManage modifyhd <disk> --compact
para compactar el archivo de disco real.Este comando puede poner a cero el disco mientras está desmontado:
Aquí hay un ejemplo de cómo obtener dd para imprimir periódicamente la salida:
Aquí hay un
dd
programa similar que imprimirá automáticamente la salida periódicamente:fuente
zerofree
usado en un sistema de archivos montado, pero cuando se montó solo lectura. Incluso para root FS:sudo mount -o remount,ro /
pero en una sesión de GUI, la raíz estará ocupada, por lo que fallará. Pero es posible en el nivel de ejecución 1 (telinit 1
), por lo que no necesitará arrancar desde un CD en vivo para hacerlo.