Przywracasz wydajność i szacujesz żywotność używanego dysku SSD?


70

Mój stary dysk SSD 128 GB ma teraz około półtora roku i od tego czasu zaktualizowałem go do innego.

Chciałbym wyczyścić mój stary dysk SSD, aby ...

  • przywrócić jego wydajność do prawie nowych poziomów

  • zrehabilituj go i ogólnie sprawdź stan zdrowia

Jak mam to zrobić?


4
Mimo że nie obejmuje przywracania, ten post na blogu może Cię zainteresować, aby temu zapobiec.
Tamara Wijsman

1
Być może właśnie to przeoczyłem, ale nie widziałem, aby którakolwiek z poniższych odpowiedzi została „ sprawdzona ”. Jeśli chodzi o to pytanie, jestem naprawdę ciekawy, co ostatecznie stało się dla ciebie „najlepsze”. (Jeśli zdarzy ci się pamiętać ...)
irracjonalny John

Odpowiedzi:


56

W systemie Linux po prostu uruchom

hdparm --trim-sector-ranges start:count /dev/sda

przekazując zakresy bloków, które chcesz TRIM zamiast starti countoraz urządzenie SSD zamiast /dev/sda. Ma tę zaletę, że jest szybki i nie zapisuje zer na dysku. Raczej po prostu wysyła polecenia TRIM do kontrolera SSD, informując go, że nie obchodzą cię dane w tych blokach i może swobodnie założyć, że nie są one wykorzystywane w algorytmie odśmiecania.

Prawdopodobnie musisz uruchomić tę komendę jako root. Ponieważ to polecenie jest bardzo niebezpieczne, ponieważ może natychmiast spowodować poważną utratę danych, musisz również przekazać --please-destroy-my-driveargument do hdparm(nie dodałem tego do wiersza poleceń, aby zapobiec przypadkowej utracie danych spowodowanej kopiowaniem i wklejaniem).

W powyższym wierszu polecenia /dev/sdanależy zastąpić urządzenie SSD, do którego chcesz wysłać polecenia TRIM. startjest adresem pierwszego bloku (sektora) do TRIM i countjest liczbą bloków, które należy oznaczyć jako wolne od tego adresu początkowego. Możesz przekazać wiele zakresów do polecenia.

Po tym, jak osobiście zrobiłem to z hdparm v9.32 na Ubuntu 11.04 na moim laptopie z 128 GB Crucial RealSSD C300, muszę zwrócić uwagę na problem: nie byłem w stanie przekazać całkowitej liczby bloków dysku (0: 250069680) jako zakresu . Ręcznie (w zasadzie „ręcznie wyszukiwane binarnie”) znalazłem wystarczająco dużą wartość dla liczby bloków, która działała (40000) i byłem w stanie wydać polecenia TRIM w sekwencji 40000 zakresów, aby zwolnić cały dysk. Można to zrobić za pomocą takiego prostego skryptu powłoki (testowanego na Ubuntu 11.04 pod rootem):

 # fdisk -lu /dev/sda

 Disk /dev/sda: 128.0 GB, 128035676160 bytes
 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
 ...  

aby usunąć cały dysk, weź tę całkowitą liczbę sektorów i zamień 250069680 w następującym wierszu na tę liczbę i uruchom (dodaj --please-destroy-my-drive):

 # i=0; while [ $i -lt 250069680 ]; do echo $i:40000; i=$(((i+40000))); done \
 | hdparm --trim-sector-ranges-stdin /dev/sda

I jesteś skończony! Możesz spróbować odczytać surową zawartość dysku hexedit /dev/sdaprzed i po oraz sprawdzić, czy dysk odrzucił dane.


Oczywiście, nawet jeśli nie chcesz używać Linuksa jako podstawowego systemu operacyjnego komputera, możesz wykorzystać tę sztuczkę, uruchamiając płytę CD na żywo i uruchamiając ją na napędzie.


3
Świetnie napisz, ale niestety to nie zadziała w przypadku dysków SSD nieobsługujących TRIM. W tym celu musisz pójść nieco dalej. Zobacz wiki ATA na kernel.org, aby uzyskać instrukcje, jak to zrobić za pomocą hdparm. Byłoby jeszcze lepiej, gdybyś mógł zmodyfikować swój oryginalny wpis, aby zawierał te informacje :)
James

„fstrim” jest łatwą wersją powyższego (patrz osobna odpowiedź).
Bryce

@Bryce, niepoprawny; TRIM ma charakter wyłącznie doradczy i jest przeznaczony ze względów wydajnościowych, a nie bezpieczeństwa, co oznacza, że ​​dysk może zignorować polecenie lub opóźnić usunięcie do późniejszego czasu, jak większość dysków.
psusi

24

Po pierwsze, zacznijmy od zrozumienia, co powoduje obniżenie wydajności. Nie wiedząc o tym, wiele osób zasugeruje nieodpowiednie rozwiązania (jak to już widzę). Sedno tej całej sytuacji sprowadza się zasadniczo do następującego faktu, cytowanego z Wikipedii . Pamiętaj, to ważne:

W przypadku pamięci flash NAND operacje odczytu i programowania muszą być wykonywane pojedynczo, a odblokowywanie i kasowanie musi odbywać się w sposób blokowy.

Dyski SSD składają się z pamięci flash NAND, a pamięć flash składa się z „bloków”. Każdy blok zawiera wiele „stron”. Dla uproszczenia wyobraźmy sobie, że właśnie kupiliśmy nowy błyszczący dysk SSD, który zawiera niesamowity pojedynczy blok pamięci, który składa się z 4 pustych stron.

Dla jasności rozróżniam puste strony, używane strony i usunięte strony za pomocą ∅, 1 i X. Kluczem jest to, że istnieje różnica między nimi z perspektywy kontrolerów! To nie jest tak proste jak 1 i 0. Na początek strony naszego świeżego dysku wyglądają tak:

∅, ∅, ∅, ∅ (wszystkie puste)

Teraz przechodzimy do zapisywania niektórych danych na dysku, co kończy się zapisaniem na pierwszej stronie, a zatem:

1, ∅, ∅, ∅

Następnie piszemy nieco więcej danych, tym razem tyle, że wymaga dwóch stron, a więc jest przechowywany na drugiej i trzeciej stronie:

1, 1, 1, ∅

Kończy nam się miejsce! Zdecydowaliśmy, że tak naprawdę nie potrzebujemy zapisanych początkowych danych, więc usuńmy je, aby zrobić miejsce:

X, 1, 1, ∅

Wreszcie mamy kolejny duży zestaw danych, które musimy przechowywać, które zajmą pozostałe dwie strony. TO JEST GDZIE WYDAJNOŚĆ WYSTĘPUJE W NAPĘDACH BEZ WYKOŃCZENIA !! Przechodząc od naszego ostatniego stanu do tego:

1, 1, 1, 1

... wymaga więcej pracy, niż większość ludzi zdaje sobie sprawę. Ponownie wynika to z faktu, że flash może wymazywać tylko blokowo, a nie stronniczo, co jest dokładnie tym, czego wymaga końcowe przejście powyżej. Układ różniczkujący między wykończenia i non-TRIM SSD oparte jest przy następujących praca jest wykonywana!

Ponieważ musimy skorzystać z pustej strony i usuniętej strony, dysk SSD musi najpierw odczytać zawartość całego bloku w zewnętrznej pamięci / pamięci, usunąć oryginalny blok, zmodyfikować zawartość, a następnie zapisać tę zawartość z powrotem w blok. To nie jest tak proste jak „pisanie”, zamiast tego staje się teraz „czytaniem-kasowaniem-pisaniem”. Jest to duża zmiana, a do tego, aby doszło do tego, kiedy piszemy dużo danych, jest prawdopodobnie najbardziej nieodpowiednim czasem do jej wystąpienia. Można tego wszystkiego uniknąć, jeśli ta „usunięta” strona zostanie odzyskana z wyprzedzeniem, co dokładnie ma na celu TRIM. Dzięki TRIM dysk SSD albo odzyskuje nasze usunięte strony natychmiast po usunięciu, albo w innym odpowiednim czasie, który algorytmy TRIM uznają za właściwe. Ważną częścią jest jednak to, że z TRIM tak się nie dzieje, gdy jesteśmy w trakcie pisania!

Bez TRIM ostatecznie nie możemy uniknąć powyższego scenariusza, ponieważ zapełniamy dyski danymi. Na szczęście niektóre nowsze dyski SSD wykraczają poza TRIM i skutecznie robią to samo, co TRIM w tle na poziomie sprzętowym bez niezbędnych poleceń ATA (niektóre nazywają to odśmiecanie). Ale dla tych, którzy mają pecha, że ​​go nie mają, ważne jest, aby pamiętać, że zapisywanie zer na całym dysku nie wystarcza do odzyskania oryginalnej wydajności !!!!! Zapis wszystkich zer na dysku nie oznacza kontrolerowi, że strona w pamięci flash jest wolna do zapisu. Jedynym sposobem, aby to zrobić na dysku, który nie obsługuje TRIM, jest wywołanie polecenia ATA bezpiecznego wymazywania na dysku za pomocą narzędzia takiego jak HDDErase (za pośrednictwem Wayback Machine) .

Uważam , że niektóre wczesne dyski SSD obsługiwały TRIM tylko po usunięciu partycji lub na takich rzeczach, jak „diskpart clean all all” systemu Windows 7, a nie po usunięciu pojedynczych plików. Może to być powód, dla którego starszy dysk odzyskał wydajność po wykonaniu tego polecenia. Wydaje mi się to trochę mgliste ...

Duża część mojej wiedzy na temat dysków SSD i ogólnie sprzętu / gadżetów pochodzi z anandtech.com . Myślałem, że ma świetny list wyjaśniający to wszystko, ale dla mojego życia nie mogę tego znaleźć!



Przejrzałem tylko to, ale +1 za wzmiankę o bezpiecznym skasowaniu ATA i wycenę na blok vs. na stronę.
Christopher Galpin

1
Chociaż większość z tych odpowiedzi jest poprawna, część dotycząca usuwania pamięci jest niepoprawna. Wszystkie dyski SSD mają funkcję czyszczenia pamięci. Bez tego nie pracowaliby. Odśmiecanie nie jest alternatywą dla TRIM. W stanie pustym komórka NAND reprezentuje 1, a następnie możesz zapisać ją na 0. Ale aby przywrócić ją do zera, musisz usunąć cały blok na raz. Zamiast zastępować istniejące dane, wszelkie zmiany są zapisywane w nowym bloku, a stare dane są oznaczane jako nieprawidłowe. Kasowanie nieprawidłowych danych to Garbage Collection. TRIM informuje dysk SSD, aby oznaczyć dane jako nieprawidłowe po usunięciu ich w systemie operacyjnym.
Pan Alpha

Niezupełnie pan Alpha. Termin „wyrzucanie elementów bezużytecznych” pochodzi od kontrolerów, które proaktywnie wykonują proces, który opisujesz w optymalnych momentach, a nie po prostu reagują, gdy absolutnie muszą to zrobić (co ponownie skutkuje złą wydajnością, gdy dysk się zapełnia).
James

1
Może nigdy nie powinniśmy nazwać go „Garbage Collection”, a zamiast tego nadaliśmy pseudonimowi starszych, reaktywnych kontrolerów „hoarders”.
James

17

Najwyraźniej standardową rekomendacją jest zapisywanie wszystkich zer na pełnym dysku. Nie jestem do końca pewien, dlaczego to pomaga (czy nie wiele zapisów ostatecznie zabija dyski SSD?), Ale wydaje się, że jest to wspierane przez fora wsparcia SSD największych dostawców.

Aby to zrobić w systemie Windows:

  • uruchom wiersz polecenia z uprawnieniami administratora
  • wykonać polecenie diskpart

W narzędziu zobaczysz DISKPART>monit i wydaj następujące polecenia:

DISKPART> list disk
DISKPART> select disk x

Oczywiście UPEWNIJ SIĘ , ŻE WYBRAŁO PRAWIDŁOWY NAPĘD SSD, zanim przejdziesz dalej!

DISKPART> clean all
DISKPART> create partition primary
DISKPART> format quick fs=NTFS 

Magia polega na clean alltym, że zapisuje wszystkie zera na dysku :

Jeśli podasz parametr all, każdy sektor można wyzerować, a wszystkie dane znajdujące się na dysku można usunąć.

Po wykonaniu tej czynności mogę potwierdzić, że wydajność dysku znacznie wzrosła.


11
@Jeff Powód, dla którego pisanie wszystkich zer może być pomocne, został niedawno wyjaśniony przez Davida Spilletta : niektóre kontrolery zakładają, że wyzerowane bloki można odrzucić i powrócić do puli wolnego miejsca, emulując efekt polecenia TRIM.
sblair

1
2 punkty - po pierwsze, zwykle polecenie flash erase kasuje bloki do wszystkich 0xff, więc lepiej byłoby napisać to zamiast zera. Musiałbym jednak sprawdzić arkusze danych, aby się upewnić. Po drugie - jeśli próbujesz oszukać kontroler w TRIMING dysku, czy nie byłoby dobrym pomysłem uruchomienie jakiegoś narzędzia, które po prostu TRIMowało każdy blok na dysku? Osobiście prawdopodobnie zrobiłbym oba (0xffs i TRIM), ale prawdopodobnie jestem tutaj trochę pedantyczny.
Dennis Munsie

2
@dennis na pewno, jeśli istnieje takie narzędzie - zachęcamy do wskazania mi jednego.
Jeff Atwood

1
@Dennis: Jeśli dysk używa bitów „fizycznych” na „bitach”, a te są tłumaczone na logiczne na bitach gdzie, to 0xff może być wzorem, którego potrzebujesz. Mogą jednak używać odwróconej logiki, więc dokumentacja lub komunikacja z producentem to jedyny sposób, aby się upewnić przed kontynuowaniem. Moją propozycją użycia sdelete lub podobnego jest wypróbowanie nieużywanych bloków na działającym systemie plików. Oczywiście spowoduje to zapis bez przycinania dla wszystkich bloków w mapowaniu SSD, które są połączeniem używanych i nieużywanych.
David Spillett

2
Jestem trochę oszołomiony, że tak wiele osób najwyraźniej nie zdaje sobie sprawy z bezpiecznego wymazywania dysku SSD. PRZYCINANIE każdego bloku nie jest konieczne. Wystarczy uruchomić narzędzie, które wysyła polecenie Bezpiecznego wymazywania ATA na dysk SSD, a problem zostanie rozwiązany, niezależnie od tego, czy dysk SSD obsługuje TRIM.
James

16

Znalazłem również narzędzie, SSD Life Pro . Ma dla mnie złe wieści.

SSDLife Pro - zdrowie dysku jest złe!

Jak to oblicza, wykorzystuje wskaźniki SMART SSD. Najwyraźniej próbuje przewidzieć na podstawie danych SMART :

  • Żywotność pamięci flash, na której bazują dyski SSD, jest ograniczona do 10 000 zapisów na komórkę
  • większość dysków wyświetla także dane o zapisanych i / lub odczytanych informacjach w swoich parametrach SMART

Jest to trudne, ponieważ musi również wiedzieć, kiedy dane zostały zapisane w celu oszacowania, ale oto podstawowe dane:

01 Odczyt poziomu błędu 7
09 Godziny włączenia liczą 7085
Cykl zasilania 0C 318
B8 Początkowa liczba złych bloków 15
C3 Liczba bloków awarii programu 0
C4 Kasowanie bloku błędów niepowodzenia 0
C5 Odczyt bloku bloku awarii 0
C6 Odczytaj sektory 5468243171
C7 Napisz sektory 41640920876
C8 Odczytaj polecenia 100482453
C9 Komendy zapisu 417315851
Bity błędów CA z Flash 345270
CB Odczytaj sektory z poprawialnym błędem bitowym 340001
CC Zły blok Pełna flaga 0
CD Maksymalna specyfikacja liczby P / E 5000
Minimalne usuwanie CE Liczba 3774
CF Maksymalna liczba wymazań 65348
D0 Średnia liczba wymazań 4837
D1 Pozostała żywotność napędu 4

Straszną liczbą jest pozostała żywotność dysku, która wynosi 4 .. procent!

I wynikające z tego obliczenia:

Model: CRUCIAL_CT128M225
Rozmiar: 128 GB
Numer seryjny: xxxxxxxxxxxxxxxxx456
Oprogramowanie układowe: 2030
Obsługiwane czasy: 318    
Obsługa TRIM w napędzie / systemie operacyjnym: włączona / włączona
Czas pracy: 9 miesięcy 16 dni 5 godzin
Łącznie odczytane dane: 2607,46 GB
napisane: 19855.94 GB

Dla przypomnienia, ten dysk został pierwotnie zakupiony w październiku 2009 r., Więc ma nieco ponad półtora roku.


3
@Jeff Podczas gdy pamięć flash uległa poprawie pod względem wielkości procesu, liczba cykli programu / kasowania spadła . Wartość 0xCD sugeruje, że masz napęd oparty na 34 nm z 5000 znamionowych cykli P / E, a nie 10 000.
sblair

1
@sblair dobrze wiedzieć; Wypróbowałem to narzędzie na nowym OCZ Vertex 2 i ma on zupełnie inne pola i wartości SMART.
Jeff Atwood

2
Te dane wyglądają trochę nie tak - mówi, że zapisałeś prawie 10 razy więcej danych niż przeczytałeś. Czy to nie brzmi wysoko? Spodziewałbym się więcej odczytów niż to. Czy masz plik stronicowania na tym dysku?
Dennis Munsie

1
Więcej punktów danych - mam podobny dysk SSD zainstalowany w MacBooku mojej żony. To był wcześniej mój laptop, który był używany do celów programistycznych. Właśnie spojrzałem na statystyki na tym dysku SSD, a w ciągu około 8 miesięcy życia tego dysku miał on w sumie 17 mocy na godziny w porównaniu do 7085 dla ciebie (295 dni). Wiem na pewno, że urządzenie działało łącznie ponad 17 godzin, ale wygląda na to, że system operacyjny agresywnie wyłącza dysk.
Dennis Munsie

2
20 TB zapisanych na dysku 128 GB !? Do czego dokładnie używasz tego napędu?
BlueRaja - Danny Pflughoeft

6

Przekonałem się, że zapisywanie zer przez dysk nie jest najlepszym podejściem. Chociaż może to pomóc w krótkim okresie, okazało się, że zdecydowanie nie przywróciłem dysku do pełnej wydajności (mam raczej stary dysk SSD Intel-SSD nie obsługujący TRIM). Po około roku dość intensywnego użytkowania zacząłem uruchamiać się w ciągu 1-2 sekund, gdy dysk SSD próbował zapisać w dowolnym pliku, nawet po wyzerowaniu dysku SSD.

Jedyną rzeczą, którą odkryłem, że w pełni przywraca działanie było bezpieczne wymazywanie użyciu hdparm. Przyzwyczaiłem się do bezpiecznego wymazywania mojego dysku SSD co 6-12 miesięcy, kiedy zaczyna doświadczać drobnych czkawek. Ktoś na Macrumors stworzył samouczek dla komputerów Mac, w jaki sposób zrobić to na urządzeniach Mac *.

Zgodnie ze wszystkimi twierdzeniami, które widziałem, bezpieczne wymazywanie wysyła specjalne polecenie na dysk SSD, który powoduje, że wszystkie sektory są zerowane na znacznie niższym poziomie niż tylko użycie ddlub coś.


jeśli dysk nie obsługuje TRIM, wszystkie zakłady są wyłączone.
Jeff Atwood

1
Niepoprawny Jeff, Bezpieczne usuwanie jest całkowicie niezależne od TRIM. Jest to rzeczywiste polecenie ATA i jedyne, co możesz zrobić, aby w pełni przywrócić dyski nieobsługujące TRIM. Gdy dysk SSD otrzyma to polecenie, wszystkie komórki NAND są oznaczone jako puste, przywracając oryginalną wydajność zapisu na dyskach bez potrzeby TRIM. Istnieje wiele dostępnych narzędzi, które mogą to zrobić, w tym hdparm, do którego odwołuje się jak dotąd najlepsza odpowiedź.
James

5

Na komputerze Mac sprawdź digilloydTools DiskTester . Istnieje również kilka interesujących punktów danych, aby zobaczyć wpływ regeneracji na wydajność dysku.


Wierzę, że wszystko, co robi, to zapisywanie bardzo dużego pliku zerowego na dysku SSD. Możesz osiągnąć wyniki zapisu, robiąc cat /dev/zero > /tmp/bigfile.
Kendall Hopkins


2

Aby sprawdzić żywotność SSD pozostałą na dysku SSD (SSD), musisz zainstalować pakiet smartmontools. Zawiera dwa programy narzędziowe (smartctl i smartd) do sterowania i monitorowania systemów pamięci masowej za pomocą systemu technologii samokontroli, analizy i raportowania (SMART) wbudowanego w większość nowoczesnych dysków twardych ATA i SCSI.

Dla dystrybucji opartych na Ubuntu, Mint lub Debian

# apt-get install smartmontools

For Fedora, Centos, or Red Hat based distributions
# yum install smartmontools

Media_Wearout_Indicator jest tym, czego szukasz. Dla 100 oznacza, że ​​twoje ssd ma 100% życia, niższa liczba oznacza mniej życia.

# smartctl -a /dev/sda | grep Media_Wearout_Indicator

Wyjście z mojego laptopa

233 Media_Wearout_Indicator 0×0032 100 100 000 Old_age Always – 0

Jeśli chcesz zobaczyć więcej szczegółów i pełne atrybuty z dysku, możesz uruchomić

# smartctl -data -A /dev/sda

Źródło: namhuy.net/1024/how-to-check-ssd-life-left.html


2

Istnieje teraz znacznie lepsza odpowiedź dla systemów Linux w porównaniu do odpowiedzi @LeakyCode:

sudo fstrim -v / boot

Polecenie „fstrim” z „util-linx” uruchomi system plików i wyda polecenia TRIM dla całego nieużywanego miejsca. W dystrybucjach takich jak Ubuntu jest to domyślnie wyłączone, z wyjątkiem wybranej listy „znanych bezpiecznych” napędów Intel i Samsung. Ale polecenie można uruchomić ręcznie na dowolnej partycji dla dowolnego dysku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.