Unterstützung für VirtualBox- und SSD-TRIM-Befehle


27

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?


3
Virtuelles TRIM, das auf einer virtuellen Maschine verwendet wird, die mit einer virtuellen Festplatte verbunden ist, um ein virtuelles Gefühl zu erzeugen ...
Fiasco Labs,

Ramhound: Wozu dient also die Option "Solid-State-Laufwerk" im Speicher-Untermenü? Wenn es außerdem eine Option wie --discard gibt, die im Handbuch erwähnt wird, sollte sie detailliert sein. Ich verstehe es überhaupt nicht, dass "es einen Grund gibt, warum es nicht beschrieben wird". Wenn ja, warum steht es überhaupt im Handbuch?
Krzysztof Szynter

11
Um @Ramhound zu beantworten, ist mein Blog einer der Beiträge, die im OP aufgelistet sind. Ich bin nicht sicher, was sein Grund war, aber für mich hatte ich eine virtuelle Maschine, die ich brauchte, um die Dateigröße der dynamisch zugewiesenen Festplatte physisch zu verkleinern. Es war eine Festplatte, auf der sich gelöschte Daten befanden, und ich habe versucht, sie wieder auf eine kleinere Größe zu verkleinern. Durch Übergabe des Befehls TRIM konnte dies geschehen. Meine virtuelle Festplatte wurde von 12G auf 7G verkleinert. Zum OP hoffe ich, dass mein Beitrag dir geholfen hat. Ich bin hierher gekommen, weil ich auf meinem Blog eingehenden Datenverkehr gesehen habe.
Jayson Rowe

Nur eine Warnung für alle, die sich für das Thema interessieren. Die Trimm-Implementierung des VirtualBox-Disk-Image-Emulators ist äußerst fehlerhaft und wird wahrscheinlich Ihren VM zum Absturz bringen. Es gibt einen 2 Jahre alten Bug, der dafür geöffnet wurde. Es ist möglich, es zu aktivieren, aber verschwenden Sie keine Zeit damit, es zu versuchen.
Dominik SMogor

Ich denke, das ist der Fehler, auf den Dominik sich bezieht: virtualbox.org/ticket/16450
bobpaul

Antworten:


19

--discardoptions gibt an, dass das vdiImage als Reaktion auf den trimBefehl vom Gastbetriebssystem verkleinert wird . Folgende Voraussetzungen müssen erfüllt sein:

  • Das Festplattenformat muss VDI sein
  • Der gelöschte Bereich muss mindestens 1 MB groß sein.
  • [wahrscheinlich] geräumter Bereich muss einen oder mehrere 1-MB-Blöcke abdecken (Ausrichtung)

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 discardmount 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- fstrimBefehl, der Teil des util-linuxPakets ist.

Bei früheren Lösungen musste der Benutzer ungenutzte Bereiche auf Null setzen, z. B. zerofreedie Festplatte explizit verwenden und komprimieren (ich gehe davon aus, dass dies nur möglich ist, wenn vm offline ist).


1
Die Verwendung einer Deduplizierungsfunktion für btrfs (insbesondere eine, die Löcher für 0 Regionen btrfs balanceausstanzt ) und die Erstellung möglichst vieler trimmbarer Regionen erleichtert.
Omnifarious

12

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.


Eigentlich habe ich einige meiner VMs mit dem Befehl trim getötet.
Davidbaumann

@davidbaumann Wie ist das passiert?
dvtan

Nach der Aktivierung wurden etwa 20 GB beschnitten. Genau in diesem Moment stürzte der Laptop ab (hatte heutzutage einige Probleme mit meiner GPU). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

Befehl, dies auf der vorhandenen ersten Festplatte VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
durchzuführen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.