Huésped Debian en un host Windows usando discard/TRIM.
Esta no es una respuesta directa en sí, ya que estoy tratando el problema, no la pregunta. En lugar de compactar periódicamente la imagen, esta solución usa el descarte para eliminar automáticamente los bloques no utilizados en la imagen de disco de la VM del host.
Esta solución requiere un sistema de ficheros huésped que soporte TRIM continuo. El wiki de Arch Linux tiene una lista de sistemas de archivos que soportan operaciones TRIM .
FDE y cryptoroot no están específicamente cubiertos, ya que hay preocupaciones de seguridad y ninguna de las otras soluciones a esta pregunta permitiría la compactación tampoco. El wiki de Arch Linux tiene información sobre TRIM y dispositivos dm-crypt .
En teoría, esto funcionará para todos los huéspedes Linux en hosts VBox que usen almacenamiento VDI.
Configuración del host
Con VBox cerrado y sin VMs en ejecución, agregue soporte de descarte a sus discos configurando tanto discard
como nonrotational
para cada disco en el archivo de configuración de la VM. En este momento discard
no está en la interfaz gráfica, pero nonrotational
está expuesto como la casilla de verificación “Unidad de estado sólido”. (ref: foros de vbox, soporte de descartes )
<AttachedDevice discard="true" nonrotational="true" type="HardDisk" [..other options..] >
Arranca la VM, y verifica que el soporte TRIM está activado:
sudo hdparm -I /dev/sda | grep TRIM
Configuración del huésped
Si LVM está en uso, cambia la configuración de descartes en /etc/lvm/lvm.conf
. (ref: debian wiki, lvm.conf ejemplo )
devices {
...
issue_discards = 1
}
En fstab, añade la opción discard
a los sistemas de archivos que desees descartar automáticamente (ref: debian wiki, fstab ejemplo )
UUID=8db6787f-1e82-42d8-b39f-8b7491a0523c / ext4 discard,errors=remount-ro 0 1
UUID=70bfca92-8454-4777-9d87-a7face32b7e7 /build ext4 discard,errors=remount-ro,noatime 0 1
Remonta los sistemas de archivos para que recojan sus nuevas opciones.
sudo mount -o remount /
sudo mount -o remount /build
Recorta manualmente los bloques libres ahora con fstrim
. fstrim
utiliza el sistema de archivos montado, no el dispositivo de bloques que lo respalda. En lugar de configurar el descarte continuo en fstab
, esto podría hacerse en un cron semanal. (El cron semanal se recomienda para las SSD físicas que pueden tener un soporte cuestionable para TRIM, pero esto no es relevante aquí ya que las SSD subyacentes son manejadas por el sistema operativo anfitrión. ver: ssd trim warning ).
fstrim /
fstrim /build
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:
- Guest1: Debian 8.7, núcleo: linux 4.8 grsec de backports, sistema de archivos: ext4
- Invitado2: Debian 9 RC2, núcleo: linux 4.9, sistema de archivos: ext4
- Huésped1: VBox 5.1.14, Win7, imagen fmt: VDI
- Host2: VBox 5.1.14, Win8.1, imagen fmt: VDI