Supporto di command TRIM e VirtualBox e SSD

Sono consapevole dell'enorme numero di post su internet dicendo che questo non functionrebbe e perché e ho trascorso davvero giorni a cercare le soluzioni mesi fa, ma ho trovato ieri alcuni suggerimenti su come abilitare il supporto di command TRIM per le macchine guest . Ho provato e "sembra" come lavorare. Quello che vorrei sapere è where è la cattura o è questo davvero funzionante come dovrebbe.

fonti:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html

Il mio command esatto che collega il file del disco:

Scaffalatura VBoxManage "GuestOsMachineName" –storagectl "SATA" –port 1 – dispositivo 0 –nonrotational su –discard su –medium "C: \ path \ to \ file.vdi" – tipo hdd

Che generava questa voce nel file * .vbox della macchina:

<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0"> <Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/> </AttachedDevice> 

Per essere sicuri di non perdere alcun dato questo drive era il secondo attaccato alla macchina. Ho eseguito test semplici come copiare alcuni file nell'unità, lasciandolo, riavviando la macchina, spegnendo la macchina, controllando se è presente dopo l'avvio, guardando l'utilizzo del file di disco nel sistema operativo host. I risultati sono:

  • file disco allegato senza opzioni –nonrotational e –discard mantiene la sua dimensione (dynamic) anche dopo aver eliminato i file nell'OS OS
  • il file di disco allegato con entrambe le opzioni di cui sopra rilascia lo spazio dopo che i dati sono stati eliminati

Ora ecco le mie domande:
– cosa fa esattamente l'opzione di scoperta? non è descritto nel manuale VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
– sta davvero passando TRIM al sistema operativo host o sembra proprio?

--discard options specifica che vdi image vdi sarà ridotta in risposta al command di trim da un guest OS. Devono essere soddisfatti i seguenti requisiti:

  • il formato del disco deve essere VDI
  • l'area cancellata deve essere alless 1MB (dimensione)
  • [probabilmente] l'area cancellata deve coprire uno o più blocchi da 1 MB (allineamento)

Ovviamente l'OS ospite deve essere configurato per emettere trim command trim , in genere significa che il guest OS è fatto per pensare che il disco sia un SSD. Ext4 support -o discard bandiera di assembly; OSX richiede probabilmente impostazioni aggiuntive poiché per impostazione predefinita solo SSD forniti da Apple sono rilasciati questo command . Windows deve rilevare e supportre automaticamente SSD alless nelle versioni 7 e 8, non sono chiaro se il rilevamento avviene all'installazione o al tempo di esecuzione. Il driver exFAT Linux (grazie a Samsung) support il command di scartare . Non è chiaro se l'implementazione di Microsoft di exFAT support lo stesso, anche se il file system è stato progettato per iniziare il flash.

In alternativa, ci sono methods ad hoc per l'emissione di trim , ad esempio il command Linux fstrim , parte del util-linux .

Le soluzioni precedenti hanno richiesto all'utente di distriggersre aree inutilizzate, ad esempio utilizzando zerofree e comprimere il disco in modo esplicito ( zerofree che è ansible solo quando vm è offline).

Poiché questo è il miglior risultato su Google, mi permetta di chiarire un po 'le altre risposte, anche se questo è un vecchio post. E 'infatti ansible far funzionare TRIM nel senso che i blocchi virtuali inutilizzati sul filesystem ospite possono avere i corrispondenti blocchi fisici di flash contrassegnati come inutilizzati per una migliore utilizzazione del flash. I pezzi sono già presenti nelle altre risposte e commenti.

In primo luogo, l'host deve essere impostato in modo che lo spazio libero sia TRIM'ed. È ansible montare il filesystem con -o discard o eseguire regolarmente il fstrim sul filesystem tramite cron. Preferisco quest'ultima, in quanto la prima opzione può portre al block del sistema quando si elimina molti file contemporaneamente.

Il formato del disco utilizzato deve essere la dimensione dynamic VDI come scrive qarma.

Assicurarsi che nonrotational = "true" discard = "true" sia impostato nel file vbox come descritto in OP.

Allora abilita TRIM nel guest OS come normale. In Linux, consiglio nuovamente un lavoro cron che esegue fstrim. Ciò è probabilmente ancora più importnte in quanto il costo di fare TRIM sull'image del disco virtuale è molto più elevato che su un SSD fisico, dato che i dati vengono spostati per rendere l'image più piccola.

Ora, poiché l'image del disco viene regolarmente compattata, occuperà solo lo spazio effettivo utilizzato, oltre a un overhead di size di un block di 1 MB, come scrive qarma. Ciò significa ancora che lo spazio libero sarà TRIM'ed sul SSD host.