Supporto comandi TRIM di VirtualBox e SSD


27

Sono consapevole dell'enorme numero di post su Internet che affermano che ciò non funzionerebbe e perché e ho davvero trascorso giorni a cercare le soluzioni mesi fa, ma ho trovato ieri alcuni suggerimenti su come "abilitare il supporto comandi TRIM" per le macchine guest . L'ho provato e "sembra" come lavorare. Quello che vorrei sapere è dov'è il problema o funziona davvero 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 comando esatto allegando il file del disco:

VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --nonrotational on --discard on --medium "C: \ path \ to \ file.vdi" --type hdd

Che ha generato 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>

A dire il vero non perderei alcun dato che questa unità era la seconda collegata alla macchina. Ho fatto un semplice test come copiare alcuni file sull'unità, lasciarlo, riavviare la macchina, spegnere la macchina, controllare se è presente dopo il riavvio, esaminare l'utilizzo dei file del disco nel sistema operativo host. I risultati sono:

  • file del disco allegato senza opzioni --nonrotational e --discard mantiene le dimensioni (dinamiche) anche dopo aver eliminato i file nel sistema operativo guest
  • il file del disco allegato con entrambe le opzioni sopra menzionate libera lo spazio dopo l'eliminazione dei dati

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


3
Virtual TRIM utilizzato su una macchina virtuale interfacciata a un disco virtuale per un feeling virtuale ...
Fiasco Labs

Ramhound: A cosa serve l'opzione "Unità a stato solido" nel sottomenu di archiviazione? Inoltre, se esiste un'opzione come --discard menzionata nel manuale, dovrebbe essere dettagliata. Non capisco perfettamente che affermi che "c'è un motivo per cui non è descritto". Se è così, perché è nel manuale?
Krzysztof Szynter,

11
Per rispondere a @Ramhound il mio blog è uno dei post elencati dall'OP. Non sono sicuro di quale fosse la sua ragione, ma per me avevo una macchina virtuale di cui avevo bisogno per ridurre fisicamente la dimensione del file del disco allocato dinamicamente. Era un disco che conteneva i dati che erano stati eliminati e stavo cercando di ridurli a una dimensione inferiore: passare il comando TRIM ha permesso che ciò accadesse ... riducendo il mio disco virtuale da 12G a 7G. Spero che il mio post ti abbia aiutato. Sono arrivato qui vedendo il traffico in entrata sul mio blog.
Jayson Rowe,

Solo un avvertimento per chiunque sia interessato all'argomento. L'implementazione del taglio sull'emulatore di immagini del disco di VirtualBox è estremamente difettosa e probabilmente bloccherà la tua VM. È stato aperto un bug di 2 anni. È possibile abilitarlo ma non perdere tempo a provarlo.
Dominik SMogor

Penso che questo sia il bug Dominik si riferisce a: virtualbox.org/ticket/16450
bobpaul

Risposte:


19

--discardopzioni specifica che l' vdiimmagine verrà ridotta in risposta al trimcomando dal SO guest. Devono essere soddisfatti i seguenti requisiti:

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

Ovviamente il SO guest deve essere configurato per emettere il trimcomando, in genere ciò significa che il SO guest è pensato per pensare che il disco sia un SSD. Ext4 supporta -o discardmount flag; OSX probabilmente richiede impostazioni aggiuntive in quanto per impostazione predefinita vengono emessi solo questi SSD forniti da Apple . Windows dovrebbe rilevare e supportare automaticamente gli SSD almeno nelle versioni 7 e 8, non sono chiaro se il rilevamento avvenga in fase di installazione o di esecuzione. Il driver Linux exFAT (fornito da Samsung) supporta il comando discard . Non è chiaro se l'implementazione Microsoft di exFAT supporti lo stesso, anche se il file system è stato progettato inizialmente per Flash.

In alternativa ci sono metodi ad hoc per emettere trim, ad esempio fstrimcomando Linux , parte del util-linuxpacchetto.

Le soluzioni precedenti richiedevano all'utente di azzerare le aree inutilizzate, ad esempio utilizzando zerofreee compattando esplicitamente il disco (suppongo che sia possibile solo quando vm è offline).


1
Inoltre, usando una sorta di de-duplicazione su btrfs (in particolare uno che btrfs balancecrea buchi per 0 regioni) e aiuta davvero a creare quante più regioni ritagliabili possibile.
Onnipotente l'

12

Poiché questo è il miglior risultato su Google, vorrei chiarire un po 'le altre risposte, anche se si tratta di un vecchio post. È infatti possibile far funzionare TRIM nel senso che i blocchi virtuali inutilizzati sul filesystem guest possono avere i corrispondenti blocchi fisici di flash contrassegnati come inutilizzati per un migliore utilizzo del flash. I pezzi sono già presenti anche nelle altre risposte e commenti.

Innanzitutto, l'host deve essere impostato in modo che lo spazio libero sia TRIM. Puoi montare il filesystem con -o discard, oppure puoi eseguire fstrim sul filesystem regolarmente tramite cron. Preferisco quest'ultima, poiché la prima opzione può portare al blocco del sistema quando si eliminano molti file contemporaneamente.

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

Assicurarsi che nonrotational = "true" discard = "true" siano impostati nel file .vbox come descritto in OP.

Quindi abilitare TRIM nel SO guest normalmente. In Linux, consiglio nuovamente un lavoro cron che esegue fstrim. Questo è probabilmente ancora più importante qui, poiché il costo di TRIM sull'immagine del disco virtuale è molto più alto rispetto a un SSD fisico, poiché i dati vengono spostati per rendere l'immagine più piccola.

Ora, poiché l'immagine del disco viene regolarmente compattata, occuperà solo lo spazio effettivo utilizzato, oltre a un overhead di dimensioni del blocco di 1 MB durante la scrittura di qarma. Ciò significa di nuovo che lo spazio libero verrà TRIM sull'unità SSD host.


In realtà ho ucciso alcune delle mie macchine virtuali usando il comando trim.
davidbaumann,

@davidbaumann Come è potuto succedere?
dvtan,

In realtà, dopo averlo abilitato, ha iniziato a tagliare circa 20 GB. Proprio in questo momento, il portatile si è bloccato (ha avuto alcuni problemi con la mia GPU in questi giorni). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

Comando per eseguire questa operazione sul primo disco esistente (presupponendo SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.