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
y nonrotational
para cada disco en el archivo de configuración para la máquina virtual. En este momento discard
no está en la GUI, pero nonrotational
está expuesto como la casilla de verificación "Unidad de estado sólido". (ref: foros de vbox, soporte de descarte )
<AttachedDevice discard="true" nonrotational="true" type="HardDisk" [..other options..] >
Inicie la VM y verifique que el soporte TRIM esté habilitado:
sudo hdparm -I /dev/sda | grep TRIM
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 )
devices {
...
issue_discards = 1
}
En fstab, agregue la discard
opción a los sistemas de archivos que desea descartar automáticamente (ref: debian wiki, ejemplo de fstab )
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
Vuelva a montar los sistemas de archivos para que recojan sus nuevas opciones.
sudo mount -o remount /
sudo mount -o remount /build
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 continuo fstab
, 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 ).
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, kernel: linux 4.8 grsec de backports, sistema de archivos: ext4
- Guest2: Debian 9 RC2, kernel: linux 4.9, sistema de archivos: ext4
- Host1: VBox 5.1.14, Win7, imagen fmt: VDI
- Host2: VBox 5.1.14, Win8.1, imagen fmt: VDI