Ich bin mir der großen Anzahl von Posts im Internet bewusst, die besagen, dass dies nicht funktionieren würde und warum. Ich habe vor Monaten wirklich tagelang nach Lösungen gesucht, aber gestern einige Tipps gefunden, wie die Unterstützung von TRIM-Befehlen für Gastcomputer aktiviert werden kann . Ich habe es ausprobiert und "es sieht aus" wie Arbeiten. Was ich gerne wissen würde, ist, wo der Haken ist oder ob dies wirklich so funktioniert, wie es sollte.
Quellen:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html
Mein genauer Befehl zum Anhängen der Plattendatei:
VBoxManage storageatach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --nonrotational on --discard on --medium "C: \ path \ to \ file.vdi" --type hdd
Wodurch dieser Eintrag in der * .vbox-Datei des Computers generiert wurde:
<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
<Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>
Um sicherzugehen, dass ich keine Daten verlieren würde, war dieses Laufwerk das zweite, das an die Maschine angeschlossen wurde. Ich habe einen einfachen Test durchgeführt, beispielsweise das Kopieren einer Datei auf das Laufwerk, das Verlassen des Laufwerks, das Neustarten des Computers, das Herunterfahren des Computers, das Überprüfen, ob sie nach dem Neustart vorhanden ist, und das Überprüfen der Datenträgerverwendung im Host-Betriebssystem. Ergebnisse sind:
- Festplattendatei ohne Optionen angehängt --nonrotational und --discard behalten ihre (dynamische) Größe auch nach dem Löschen von Dateien im Gastbetriebssystem bei
- Die mit beiden oben genannten Optionen angehängte Festplattendatei gibt den Speicherplatz frei, nachdem die Daten gelöscht wurden
Hier nun meine Fragen:
- Was genau macht die Option --Discard? Es ist nicht im VirtualBox-Handbuch beschrieben ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- Übergibt es TRIM wirklich an das Host-Betriebssystem oder sieht es nur so aus?
quelle
Antworten:
--discard
options gibt an, dass dasvdi
Image als Reaktion auf dentrim
Befehl vom Gastbetriebssystem verkleinert wird . Folgende Voraussetzungen müssen erfüllt sein:Offensichtlich muss das Gastbetriebssystem so konfiguriert sein
trim
, dass ein Befehl ausgegeben wird. Dies bedeutet normalerweise, dass das Gastbetriebssystem so eingestellt ist, dass es sich bei der Festplatte um eine SSD handelt. Ext4 unterstützt-o discard
mount flag; Für OSX sind wahrscheinlich zusätzliche Einstellungen erforderlich, da standardmäßig nur von Apple bereitgestellte SSDs diesen Befehl erhalten . Windows sollte SSDs zumindest in den Versionen 7 und 8 automatisch erkennen und unterstützen. Es ist nicht klar, ob die Erkennung bei der Installation oder zur Laufzeit erfolgt. Der Linux exFAT-Treiber (mit freundlicher Genehmigung von Samsung) unterstützt den Befehl discard . Es ist nicht klar, ob die Microsoft-Implementierung von exFAT dasselbe unterstützt, obwohl das Dateisystem ursprünglich für Flash entwickelt wurde.Alternativ gibt es Ad-hoc-Methoden, die ausgegeben werden können
trim
, z. B. ein Linux-fstrim
Befehl, der Teil desutil-linux
Pakets ist.Bei früheren Lösungen musste der Benutzer ungenutzte Bereiche auf Null setzen, z. B.
zerofree
die Festplatte explizit verwenden und komprimieren (ich gehe davon aus, dass dies nur möglich ist, wenn vm offline ist).quelle
btrfs balance
ausstanzt ) und die Erstellung möglichst vieler trimmbarer Regionen erleichtert.Da dies das Top-Ergebnis bei Google ist, lassen Sie mich andere Antworten etwas präzisieren, auch wenn dies ein alter Beitrag ist. Es ist in der Tat möglich, TRIM in dem Sinne zum Laufen zu bringen, dass nicht verwendete virtuelle Blöcke im Gast-Dateisystem die entsprechenden physischen Flash-Blöcke als nicht verwendet markieren können, um die Flash-Nutzung zu verbessern. Die Stücke sind sogar schon in den anderen Antworten und Kommentaren vorhanden.
Zunächst muss der Host so eingerichtet werden, dass der freie Speicherplatz getrimmt wird. Sie können das Dateisystem entweder mit -o discard mounten oder über cron regelmäßig fstrim auf dem Dateisystem ausführen. Ich bevorzuge letzteres, da die erste Option dazu führen kann, dass das System beim gleichzeitigen Löschen vieler Dateien abstürzt.
Das verwendete Festplattenformat muss die dynamische VDI-Größe haben, die Qarma schreibt.
Stellen Sie sicher, dass in der .vbox-Datei nonrotational = "true" discard = "true" eingestellt ist, wie unter OP beschrieben.
Aktivieren Sie dann TRIM im Gastbetriebssystem wie gewohnt. Unter Linux empfehle ich wieder einen Cron-Job mit fstrim. Dies ist hier wahrscheinlich noch wichtiger, da die Kosten für TRIM auf dem Image der virtuellen Festplatte viel höher sind als auf einer physischen SSD, da Daten verschoben werden, um das Image zu verkleinern.
Da das Disk-Image nun regelmäßig komprimiert wird, beansprucht es nur den tatsächlich verwendeten Speicherplatz und zusätzlich 1 MB Block-Overhead, wie es von Qarma geschrieben wird. Dies bedeutet wiederum, dass der freie Speicherplatz auf der Host-SSD getrimmt wird.
quelle
VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on