Soy consciente de la gran cantidad de publicaciones en Internet que dicen que esto no funcionaría y por qué, y realmente pasé días buscando las soluciones hace meses, pero ayer encontré algunos consejos sobre cómo "habilitar el soporte de comandos TRIM" para máquinas invitadas . Lo he probado y "parece" que funciona. Lo que me gustaría saber es dónde está la trampa o si esto realmente funciona como debería.
Fuentes:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html
Mi comando exacto adjuntando el archivo de disco:
Almacenamiento de VBoxManage adjuntar "GuestOsMachineName" --storagectl "SATA" --port 1 --dispositivo 0 --no rotacional en --discard on --medium "C: \ path \ to \ file.vdi" --type hdd
Lo que generó esta entrada en el archivo * .vbox de la máquina:
<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
<Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>
Para asegurarme de que no perdería ningún dato, esta unidad fue la segunda conectada a la máquina. He realizado pruebas simples como copiar un archivo a la unidad, dejarlo, reiniciar la máquina, apagar la máquina, verificar si está allí después de reiniciar, mirar el uso del archivo de disco en el sistema operativo host. Los resultados son:
- archivo de disco adjunto sin opciones --nonrotational y --discard mantiene su tamaño (dinámico) incluso después de eliminar archivos en el SO huésped
- el archivo de disco adjunto con las dos opciones mencionadas anteriormente libera el espacio después de que se eliminaron los datos
Ahora aquí están mis preguntas:
- ¿Qué hace exactamente - opción de descarte? no se describe en el manual de VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
: ¿realmente está transmitiendo TRIM al sistema operativo host o simplemente parece?
fuente
Respuestas:
--discard
opciones especifica que lavdi
imagen se reducirá en respuesta altrim
comando del sistema operativo invitado. Se deben cumplir los siguientes requisitos:Obviamente, el SO huésped debe estar configurado para emitir
trim
comandos, por lo general eso significa que el SO huésped cree que el disco es un SSD. Ext4 admite la-o discard
bandera de montaje; Es probable que OSX requiera configuraciones adicionales, ya que de manera predeterminada solo se emiten este comando a las SSD suministradas por Apple . Windows debería detectar automáticamente y admitir SSD al menos en las versiones 7 y 8, no estoy claro si la detección ocurre en el momento de la instalación o la ejecución. El controlador exFAT de Linux (cortesía de Samsung) admite el comando de descarte . No está claro si la implementación de Microsoft de exFAT es compatible, aunque el sistema de archivos fue diseñado para flash para empezar.Alternativamente, hay métodos ad hoc para emitir
trim
, por ejemplofstrim
, comandos de Linux , parte delutil-linux
paquete.Las soluciones anteriores requerían que el usuario pusiera a cero las áreas no utilizadas, por ejemplo, usar
zerofree
y compactar el disco explícitamente (supongo que eso solo es posible cuando vm está fuera de línea).fuente
btrfs balance
realmente ayuda a crear la mayor cantidad posible de regiones recortables.Dado que este es el mejor resultado en Google, permítanme aclarar un poco otras respuestas, a pesar de que esta es una publicación antigua. De hecho, es posible hacer que TRIM funcione en el sentido de que los bloques virtuales no utilizados en el sistema de archivos invitado pueden tener los bloques físicos correspondientes de flash marcados como no utilizados para una mejor utilización del flash. Las piezas incluso ya están presentes en las otras respuestas y comentarios.
Primero, el host debe configurarse para que el espacio libre se TRIME. Puede montar el sistema de archivos con -o descarte, o puede ejecutar fstrim en el sistema de archivos regularmente a través de cron. Prefiero lo último, ya que la primera opción puede hacer que el sistema se bloquee al eliminar muchos archivos a la vez.
El formato de disco utilizado debe ser el tamaño dinámico de VDI como escribe qarma.
Asegúrese de que nonrotational = "true" discard = "true" esté configurado en el archivo .vbox como se describe en OP.
Luego habilite TRIM en el SO huésped como de costumbre. En Linux, nuevamente recomiendo un trabajo cron que ejecute fstrim. Probablemente esto sea aún más importante aquí, ya que el costo de hacer TRIM en la imagen del disco virtual es mucho mayor que en un SSD físico, ya que los datos se mueven para hacer que la imagen sea más pequeña.
Ahora, dado que la imagen del disco se compacta regularmente, solo ocupará el espacio real utilizado, más una sobrecarga de tamaño de bloque de 1 MB a medida que qarma escribe. De nuevo, esto significa que el espacio libre se recortará en el SSD del host.
fuente
VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on