VirtualBox

Liberar espacio en VirtualBox de discos con reserva dinámica que han crecido con el tiempo

Reducir espacio de archivos de disco en VirtualBox

Si has trabajado con VirtualBox, tendrás máquinas virtuales que después de un tiempo han sufrido: actualizaciones, copias y borrados de archivos, uso de navegador y de programas.

Estas máquinas, por defecto emplean una reserva dinámica del espacio en disco, por lo que inicialmente ocupan poco.

Aunque su espacio ocupado dentro de la máquina virtual no es tanto, el archivo de disco donde se guardan habrá crecido hasta cerca del máximo del tamaño.

Esto se produce porque, a pesar de ir limpiando la máquina virtual, archivos temporales, etc se ha ido reservando el espacio poco a poco y VirtualBox, una vez asignado un espacio, «no sabe» si el sistema operativo lo está usando o no.

¿Sabes por qué trabajar con una máquina virtual hace que se vaya reclamando espacio en disco?

  • Cuando se baja una actualización, se escribe al disco, se descomprimen sus archivos y luego se borra el archivo.
  • El navegador escribe a disco las páginas web a su caché, para poder mostrarlas más rápido.
  • Los programas van escribiendo archivos de trabajo y temporales para poder funcionar.

Todo esto produce escrituras y borrados en el disco que provocan que, poco a poco, vayamos reclamando espacio al disco.

Una vez se ha reclamado espacio, este queda asignado, aunque se borren los archivos contenidos en él.

Con suerte, ese espacio será reutilizado la siguiente vez, pero para liberarlo de verdad en VirtualBox, debemos emplear la herramienta VBoxManage.

Crear otra máquina virtual y borrar la antigua para solucionarlo, es matar moscas a cañonazos. Si quieres saber porqué se produce este efecto y cómo solucionarlo, sigue leyendo.

Reserva estática vs reserva dinámica

Lo habitual cuando creamos una máquina virtual con VirtualBox, es crear un medio de almacenamiento con reserva dinámica.

VirtualBox. Reserva dinámica en almacenamiento

Una reserva dinámica permite que el archivo donde se guarda nuestra emulación de disco duro, crezca a medida que sea necesario.

¿Cómo funcionan las reservas?

En la reserva estática, el tamaño del disco lo ocupamos en el momento de crear el medio de almacenamiento.

Si creamos un disco virtual de 40GB, tendremos 40GB ocupados en nuestro ordenador.

En la reserva dinámica, el tamaño de disco se va reservando a medida que lo necesitamos,

En teoría ocupa el mismo espacio que el usado dentro de la máquina virtual.

Reducir el tamaño de almacenamiento de una máquina virtual (instalada en nuestro equipo) sólo es posible con la reserva dinámica.

Un ejemplo del funcionamiento de las reservas

Para entenderlo mejor, imaginemos una mochila con libretas, una por asignatura, cada libreta tiene 80 hojas. Las asignaturas serían los discos duros de nuestras máquinas virtuales: Matemáticas, ciencias, lengua, física, etc.

Libretas
Reserva estática. Las libretas tienen todas las hojas
Carpeta
Reserva dinámica. Podemos ir poniendo hojas según necesitemos

En este ejemplo, la mochila pesaría bastante y estaría muy llena, pues tendríamos todas las libretas (todos los archivos de disco) dentro de nuestra mochila (disco duro).

La ventaja es tener todo el espacio ya reservado para cada asignatura. Cada libreta tendrá parte escrita inicial y hojas en blanco para continuar. Así funciona la reserva estática.

Otra forma sería emplear una carpeta de anillas. Mediante separadores de hojas, localizamos fácilmente cada asignatura y tenemos hojas en blanco, usables para cualquier asignatura.

¡Ojo! Si nos quedamos sin hojas (sin espacio) no podremos escribir en ninguna «asignatura».

Una mochila con una carpeta o dos, pesa menos. Así funcionaría la reserva dinámica.

Pero ¿qué ocurre si queremos «borrar» una hoja de la carpeta (o una parte)?

En este caso, lo que haría la reserva dinámica es «tacharla». En realidad, se borraría su entrada o referencia en el índice, dejando su contenido intacto pudiéndose escribir encima de él cuando hiciese falta.

Compactando (desfragmentar)

Desde la máquina invitada:

Consiste en poner de forma contigua el texto para ahorrar espacio. Existe fragmentación interna y externa, pero eso ya excede el objetivo de este artículo.

Imaginemos que hemos escrito y borrado muchas hojas o trozos de ellas. Tendremos muchas hojas en esa asignatura tachadas.

¿Cómo arreglarlo?

  1. Primero quitamos las hojas totalmente tachadas.
  2. En hojas que tengan texto sin tachar y parte tachada, escribimos sobre la parte tachada.

El objetivo es emplear el mínimo número de hojas posible.

A esto le llamamos desfragmentar, es decir, quitar los fragmentos.

En este caso, desfragmentaremos para agrupar todo el contenido (y reducir aún más el tamaño).

No importa si usamos HDD o SSD. No usaremos la desfragmentación para mejorar la velocidad (inútil en SSDs) sino para ganar tamaño.

Desfragmentando el disco

Desfragmentador de Microsoft Windows

Dependiendo de nuestro sistema operativo, emplearemos distintas herramientas:

En Microsoft Windows

Tenemos varias opciones, las dos más recomendables serían:

  1. Desframentador de discos de Windows:

Click derecho en el disco -> Propiedades -> Pestaña «Herramientas» -> Botón «Optimizar».

2. Herramienta externa Defragler: https://www.ccleaner.com/defraggler

En GNU/Linux

Comando (considerando el uso del sistema de archivos ext4, uno de los más extendidos en GNU/Linux):

e4defrag /ruta/al/objetivo

/ruta/al/objetivo puede ser un archivo, directorio o partición.

  • En caso de un archivo, lo pone contiguo.
  • Si indicamos un directorio, desfragmentará todos los archivos que contenga.
  • En caso de una partición, buscará su punto de montaje y la trata como un directorio.

Aplicando la «goma de borrar»

Debido a que las hojas tachadas no se borran (para el ordenador es fácil escribir encima de ellas, de forma que cuando se escribe, «se borra» lo anterior) debemos borrarlas realmente.

La herramienta de VirtualBox detecta las zonas a cero como borradas o zonas vacías y permite liberarlas.

Esto equivaldría a pasarlas a la zona de hojas en blanco, haciendo que ocupe menos nuestra asignatura en el clasificador.

En Microsoft Windows

Bajamos, descomprimimos y ejecutamos una vez (para aceptar la licencia) sdelete de las sysinternals de la página de Microsoft. Lo copiaremos a un directorio dentro del PATH de Windows.

Ejemplo: «C:\Windows\System32«

sdelete

Así, podremos ejecutarlo desde cualquier directorio.

¡Atención! Debemos tener permisos de administrador para poder copiar sdelete.exe dentro de un directorio protegido.

A continuación, abrimos un intérprete de comandos/ventana MS-DOS: Tecla de Windows + r y escribimos cmd y damos aceptar.

Dentro de esta ventana, escribimos:

sdelete -z c:

Considerando que es C: la unidad en la que queremos escribir a ceros todo su espacio libre.

En GNU/Linux

Existe un comando llamado zerofree, que hay que instalar y ejecutar de un modo especial, sin embargo, emplearemos dd.

El programa dd, viene instalado por defecto y su uso es más simple, pues nos permite escribir un archivo (o más) con ceros hasta llenar la unidad (al estilo de sdelete en Windows).

Para ello, escribo simplemente en un terminal:

dd if=/dev/zero of=/aaaa.aaa

Y lo dejamos hasta que acabe con el espacio libre. Después borramos el archivo generado:

rm /aaaa.aaa

Podemos crear varios archivos si así lo deseamos.

Recuperando el espacio no reclamado

Desde el anfitrión:

VBoxManage list hdds

Debemos ejecutar la herramienta VBoxManage. Suponemos que está en el PATH tanto en Microsoft Windows como GNU/Linux.

En este punto debemos apagar las máquinas virtuales cuyos discos vamos a optimizar.

Listar los archivos de disco registrados en VirtualBox y ver donde se encuentran.

VBoxManage list hdds

En el apartado «Location» nos viene la ruta de los discos de todas nuestras máquinas virtuales, vamos a uno de esos directorios con «cd» y…

Reducimos el espacio no reclamado de un disco virtual con el comando:

VBoxManage modifymedium disk archivo-de-disco.vdi --compact

El parámetro «archivo-de-disco.vdi» lo cambiamos por lo que corresponda en nuestro caso.

Habrá tantos archivos con extensión .vdi como discos tenga la máquina virtual.

Una buena práctica es mirar el tamaño que ocupa el archivo antes y después.

Resumen

Microsoft Windows:

  1. Desfragmentar
  2. sdelete c: -z
  3. Apagar y ejecutar comando VBoxManage:
VBoxManage modifymedium disk archivo-de-disco.vdi --compact

GNU/Linux

  1. dd (o zerofree)
dd if=/dev/zero of=/aaaa.aaa

2. Apagar y ejecutar comando VBoxManage

VBoxManage modifymedium disk archivo-de-disco.vdi --compact

Entradas relacionadas con VirtualBox:

https://jfsanchez.es/2020/10/inicio-desde-usb-en-virtualbox-bajo-gnu-linux/#more-970

Más información en:

Imágenes obtenidas de: