Obsługa poleceń TRIM w VirtualBox i SSD

27

Zdaję sobie sprawę z ogromnej liczby postów w Internecie, które mówią, że to nie zadziała i dlaczego i naprawdę spędziłem kilka dni szukając rozwiązań kilka miesięcy temu, ale wczoraj znalazłem kilka wskazówek, jak „włączyć obsługę poleceń TRIM” na maszynach gości . Próbowałem i „wygląda” jak praca. Chciałbym wiedzieć, gdzie jest haczyk lub czy to naprawdę działa tak, jak powinno.

Źródła:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html

Moje dokładne polecenie dołączające plik dysku:

VBoxManage storageattach „GuestOsMachineName” --storagectl „SATA” --port 1 - urządzenie 0 - niedziałający na --discard na --medium "C: \ ścieżka \ do \ file.vdi" --typ hdd

Który generetował ten wpis w pliku * .vbox komputera:

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

Aby mieć pewność, że nie stracę żadnych danych, ten dysk był drugim podłączonym do komputera. Zrobiłem prosty test, taki jak skopiowanie pliku na dysk, pozostawienie go, ponowne uruchomienie komputera, zamknięcie komputera, sprawdzenie, czy jest tam po ponownym uruchomieniu komputera, sprawdzenie użycia pliku na dysku w systemie operacyjnym hosta. Wyniki to:

  • plik dysku dołączony bez opcji --nonrotational i --discard zachowuje swój (dynamiczny) rozmiar nawet po usunięciu plików w systemie-gościu
  • plik dysku dołączony do obu powyższych opcji zwalnia miejsce po usunięciu danych

Oto moje pytania:
- co dokładnie robi - opcja odrzucania? nie jest to opisane w podręczniku VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- czy naprawdę przekazuje TRIM do systemu operacyjnego hosta, czy po prostu wygląda?

Krzysztof Szynter
źródło
3
Wirtualny TRIM używany na maszynie wirtualnej połączonej z wirtualnym dyskiem dla wirtualnego dobrego samopoczucia ...
Fiasco Labs
Ramhound: Więc do czego służy opcja „Dysk półprzewodnikowy” w podmenu pamięci? Poza tym, jeśli w podręczniku jest wspomniana opcja --discard, powinna być szczegółowa. Zupełnie nie rozumiem, że „istnieje powód, dla którego nie został opisany”. Jeśli tak, to dlaczego w ogóle jest w instrukcji?
Krzysztof Szynter,
11
Aby odpowiedzieć na @Ramhound, mój blog jest jednym z postów wymienionych na liście OP. Nie jestem pewien, jaki był jego powód, ale dla mnie miałem maszynę wirtualną, której potrzebowałem, aby fizycznie zmniejszyć rozmiar pliku dynamicznie przydzielanego dysku. Był to dysk, na którym były dane, które zostały usunięte, a ja próbowałem je zmniejszyć z powrotem do mniejszego rozmiaru - przekazanie polecenia TRIM pozwoliło na to ... zmniejszenie mojego dysku wirtualnego z 12G do 7G. Do OP mam nadzieję, że mój post pomógł ci. Dotarłem tutaj, widząc ruch przychodzący na moim blogu.
Jayson Rowe,
Tylko ostrzeżenie dla wszystkich zainteresowanych tematem. Implementacja przycinania w emulatorze obrazu dysku VirtualBox jest bardzo wadliwa i prawdopodobnie spowoduje awarię vm. Został dla niego otwarty 2-letni błąd. Można to włączyć, ale nie marnuj czasu na próby.
Dominik SMogor
Myślę, że to jest błąd, do którego odwołuje się Dominik: virtualbox.org/ticket/16450
bobpaul

Odpowiedzi:

19

--discardopcje określa, że vdiobraz zostanie zmniejszony w odpowiedzi na trimpolecenie systemu operacyjnego gościa. Muszą być spełnione następujące wymagania:

  • format dysku musi być VDI
  • oczyszczony obszar musi mieć co najmniej 1 MB (rozmiar)
  • [prawdopodobnie] oczyszczony obszar musi obejmować jeden lub więcej bloków 1 MB (wyrównanie)

Oczywiście gościnny system operacyjny musi być skonfigurowany do wydawania trimpoleceń, zazwyczaj oznacza to, że system operacyjny gościa musi myśleć, że dysk jest dyskiem SSD. Ext4 obsługuje -o discardflagę mount; OSX prawdopodobnie wymaga dodatkowych ustawień, ponieważ domyślnie tylko dyski SSD dostarczane przez Apple są wydawane . Windows powinien automatycznie wykrywać i obsługiwać dyski SSD co najmniej w wersjach 7 i 8, nie jestem pewien, czy wykrycie nastąpi w czasie instalacji czy uruchamiania. Sterownik Linux exFAT (dzięki uprzejmości Samsunga) obsługuje polecenie odrzuć . Nie jest jasne, czy implementacja exFAT przez Microsoft obsługuje to samo, mimo że system plików został zaprojektowany dla Flasha.

Alternatywnie istnieją metody ad hoc do wydania trim, np. fstrimPolecenie Linux , część util-linuxpakietu.

Wcześniejsze rozwiązania wymagały od użytkownika zerowania nieużywanych obszarów, np. Jawnego używania zerofreei kompaktowania dysku (zakładam, że jest to możliwe tylko wtedy, gdy vm jest offline).

Dima Tisnek
źródło
1
Ponadto użycie jakiegoś rodzaju funkcji usuwania duplikatów na btrfs (szczególnie takiego, który wybija dziury dla 0 regionów) i btrfs balancenaprawdę pomaga w tworzeniu jak największej liczby przycinanych regionów.
Wszechobecny
12

Ponieważ jest to najlepszy wynik w Google, wyjaśnię nieco inne odpowiedzi, nawet jeśli jest to stary post. W rzeczywistości możliwe jest uruchomienie TRIM w tym sensie, że nieużywane bloki wirtualne w systemie plików gościa mogą mieć odpowiadające fizyczne bloki pamięci flash oznaczone jako nieużywane, aby lepiej wykorzystać pamięć flash. Kawałki są nawet obecne w innych odpowiedziach i komentarzach.

Po pierwsze, host musi być skonfigurowany tak, aby wolne miejsce było TRIM'ed. Możesz zamontować system plików z opcją -o discard lub możesz regularnie uruchamiać fstrim na systemie plików za pomocą crona. Wolę ten drugi, ponieważ pierwsza opcja może doprowadzić do zablokowania systemu podczas usuwania wielu plików jednocześnie.

Używany format dysku musi mieć dynamiczny rozmiar VDI podczas zapisywania qarma.

Upewnij się, że nonrotational = "true" discard = "true" są ustawione w pliku .vbox, jak opisano w OP.

Następnie włącz TRIM w systemie-gościu w normalny sposób. W Linuksie ponownie polecam zadanie cron z uruchomionym fstrim. Jest to prawdopodobnie jeszcze ważniejsze w tym przypadku, ponieważ koszt wykonania TRIM na obrazie dysku wirtualnego jest znacznie wyższy niż na fizycznym dysku SSD, ponieważ dane są przenoszone w celu zmniejszenia obrazu.

Teraz, ponieważ obraz dysku jest regularnie kompaktowany, zajmie to tylko tyle, ile zajmie faktyczne miejsce, a także około 1 MB nadwyżki bloku podczas pisania qarma. To znowu oznacza, że ​​wolne miejsce zostanie TRIM'ed na dysku SSD hosta.

Jacob Larsen
źródło
Właściwie zabiłem niektóre z moich maszyn wirtualnych za pomocą polecenia trim.
davidbaumann
@davidbaumann Jak to się stało?
dvtan
W rzeczywistości po włączeniu zaczął zmniejszać około 20 GB. Dokładnie w tym momencie laptop się zawiesił (miałem ostatnio problemy z moim GPU). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann
Polecenie wykonania tego na istniejącym pierwszym dysku (przy założeniu SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM