Soporte de comando TRIM de VirtualBox y SSD

27

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?

Krzysztof Szynter
fuente
3
Virtual TRIM utilizado en una máquina virtual conectada a un disco virtual para una sensación virtual ...
Fiasco Labs
Ramhound: Entonces, ¿para qué sirve la casilla de verificación "Unidad de estado sólido" en el submenú de almacenamiento? Además, si hay una opción como --discard mencionada en el manual, entonces debe detallarse. No entiendo completamente tu punto diciendo que "hay una razón por la cual no se describe". Si es así, ¿por qué está en el manual?
Krzysztof Szynter
11
Para responder a @Ramhound, mi blog es una de las publicaciones del OP. No estoy seguro de cuál fue su razón, pero para mí, tenía una máquina virtual que necesitaba para reducir físicamente el tamaño de archivo del disco asignado dinámicamente. Era un disco que contenía datos que se eliminaron y estaba tratando de reducirlo a un tamaño más pequeño; pasar el comando TRIM permitió que eso sucediera ... reducir mi disco virtual de 12G a 7G. Para el OP, espero que mi publicación te haya ayudado. Llegué viendo tráfico entrante en mi blog.
Jayson Rowe
Solo una advertencia para cualquier persona interesada en el tema. La implementación de recorte en el emulador de imagen de disco VirtualBox es extremadamente defectuosa y probablemente bloqueará su vm. Hay un error de 2 años abierto para ello. Es posible habilitarlo, pero no pierdas el tiempo probándolo.
Dominik SMogor
Creo que este es el error al que Dominik se refiere: virtualbox.org/ticket/16450
bobpaul

Respuestas:

19

--discardopciones especifica que la vdiimagen se reducirá en respuesta al trimcomando del sistema operativo invitado. Se deben cumplir los siguientes requisitos:

  • el formato del disco debe ser VDI
  • el área despejada debe tener al menos 1 MB (tamaño)
  • [probablemente] el área despejada debe cubrir uno o más bloques de 1 MB (alineación)

Obviamente, el SO huésped debe estar configurado para emitir trimcomandos, por lo general eso significa que el SO huésped cree que el disco es un SSD. Ext4 admite la -o discardbandera 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 ejemplo fstrim, comandos de Linux , parte del util-linuxpaquete.

Las soluciones anteriores requerían que el usuario pusiera a cero las áreas no utilizadas, por ejemplo, usar zerofreey compactar el disco explícitamente (supongo que eso solo es posible cuando vm está fuera de línea).

Dima Tisnek
fuente
1
Además, el uso de algún tipo de desduplicación en btrfs (particularmente uno que perfora agujeros para 0 regiones) y btrfs balancerealmente ayuda a crear la mayor cantidad posible de regiones recortables.
Omnifarioso
12

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.

Jacob Larsen
fuente
En realidad, maté algunas de mis máquinas virtuales con el comando trim.
davidbaumann
@davidbaumann ¿Cómo sucedió eso?
dvtan
En realidad, después de habilitarlo, comenzó a recortar unos 20 GB. Exactamente en este momento, la computadora portátil se estrelló (tenía algunos problemas con mi GPU en estos días). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann
Comando para hacer esto en el primer disco existente (suponiendo SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM