środa, października 27, 2010

Defragmentacja SSD - o tym dlaczego nie należy jej robić

Co jakiś czas ktoś do mnie trafia szukając terminu "defragmentacja dysków SSD" dlatego napiszę to znowu, choć kiedyś już pisałem ;-)
Dysków SSD się nie defragmentuje!

Dlaczego?

Bo po pierwsze to nie ma w ich przypadku sensu, i po drugie bo im to szkodzi.

O co chodzi?

Najpierw krótki opis jak zapisujemy dane na dysku.

Dysk to nic innego jak zbiór "komórek", zwanych sektorami, w których można trzymać jakieś dane, te komórki mają zwykle długość kilku-kilkuset bajtów.
Możemy to sobie wyobrazić w taki sposób:

|sektor 0|sektor 1|sektor 2|sektor 3|....|sektor N-1|sektor N

gdzie N to maksymalna liczba sektorów na dysku.

Te sektory są "nawinięte" na dysk, i dla ułatwienia możemy sobie przyjąć, że sektor 0 jest przy środku dysku, a sektor N na zewnątrz, a same dane są zapisane tak jak to wyglądało w przypadku płyty gramofonowej, czyli robią ślimaka (czy jak ktoś bardziej obyty matematycznie ;-) spiralę ;)) od środka dysku. [To uproszczenie, w rzeczywistości to nie jest ślimak, a zbiór okręgów, z których każdy składa się z pewnej liczby sektorów].
Żeby odczytać dane z dysku zamontowano w nim głowicę, która porusza się na ramieniu i odczytuje dane z dysku. To poruszanie się zabiera czas.

I teraz wracamy do sektorów :-)
W idealnym świecie gdybyśmy zapisywali dane to byłyby one zapisane po kolei, w taki sposób:

|dane pliku A w sektorze 0|dane pliku A w sekotrz 1|dane pliku B w sektorze 2|....

czyli:
AAB....

Oczywiście w świecie rzeczywistym nie jest tak różowo. Gdy najpierw zapisujemy coś na dysku to mamy to tak ładnie ułożone:
AABCCCCDDE
Ale po jakimś czasie część danych skasowaliśmy:
AA.CCCCD.E [czyli skasowaliśmy plik B i część pliku D]
Po czym znów zapisujemy, tym razem plik F o długości 4:
AAFCCCCDFEFF
zapisujemy nasz nowy plik w "wolne" miejsca po starych plikach.
Teraz jednak głowica chcąc odczytać plik F musi pójść do sektora 2, później do 8, a następnie do 10 i 11, gdzie między 2 i 8, i 8 i 10 musi poruszać się niepotrzebnie bo wtedy nic nie czyta.

Dlatego czasem chcemy powrócić do idealnego świata i chcemy uporządkować dysk, bo przecież wystarczy w naszym przypadku np. w miejsce pierwszego kawałka F wrzucić D, E przesunąć na miejsce 2 kawałka F i po E zapisać całe F.

Proces, który do tego prowadzi to właśnie defragmentacja.

I jest super....

Do czasu gdy nie jest to dysk SSD :-)

W dyskach SSD po pierwsze nie ma czegoś takiego jak głowica. Odczyta z grubsza trwa tyle samo niezależnie w jakiej kolejności odczytujemy "sektory". Czyli to jak dane są ułożone na SSD nie jest dlań istotne, odczytanie pliku zajmie za każdym razem mniej więcej tyle samo.

Trochę inaczej będzie z zapisem, bo akurat w przypadku zapisu z powodu fizycznej budowy pamięci Flash zapisywanie jest ciut bardziej skomplikowane. W ogólności chodzi o to, że tylko czasami można dopisać coś do "sektora", zwykle trzeba go wymazać i zapisać od nowa, nawet jeśli doszedł do niego tylko 1 bajt, albo zmienił się tylko 1 bit w którymś z bajtów.

Dodatkowo w dyskach SSD istnieje limit zapisów do sektora..... zwykle to 10 tysięcy zapisów do sektora, po czym dochodzi do fizycznego zniszczenia takiej komórki. Dlatego dyski starają się "kombinować". Gdyby zapisanie do sektora 3 odbywało się kilka razy to po jakimś czasie sektor ten mógłby niebezpiecznie zbliżyć się do limitu.
Dlatego dyski SSD gdy uznają to za stosowne to przenoszą sektory. To co było przed chwilą sektorem 3, teraz już nim może nie być i może być oznaczone jako czysty sektor 9873 albo inny. Zaś sektor widoczny dla komputera jako sektor 3 może znajdować się tam gdzie przed chwilą był sektor 7001 albo inny :-)

Stąd gdy będziemy próbować defragmentować dysk SSD to zrobi on kupę głupich rzecz. Po pierwsze będzie się starał umieścić pliki blisko siebie, ale tylko w warstwie logicznej, czyli dla komputera plik będzie w sektorach 0-10, ale w rzeczywistości może być rozrzucony po całym obszarze SSD.... co nam nie przeszkadza zbytnio.
Po drugie, rozmieszczając pliki w taki sposób jak sobie wymyśli defragmentator będziemy zmuszać dysk SSD do przenoszenia danych i niepotrzebnego zapisywania ich, co będzie zmniejszać limity zapisów na dysku. Czyli defragmentacja dysku SSD prowadzi wprost do spadku jego żywotności....


Dlatego powtórzę ;-)

NIE DEFRAGMENTUJEMY DYSKÓW SSD!!!!

Sam tego nie wiedziałem i na początku posiadania Asus EEE PC 900 z dyskami SSD zdarzyło mi się je defragmentować, dopiero później zrozumiałem swój błąd :-)


Podobne postybeta
Algorytm ;-)
Teoretyczny limit życia dysku SSD w Asus EEE.
Zrób krzywdę swoim danym ;-)
Dodawanie i usuwanie metod i pól z klas Java w locie ;-)
SSD a programowanie

12 komentarzy:

  1. Dzięki pomogłeś artykuł bardzo przydatny dobrze i bardzo logicznie wytłumaczone. Zamierzam kupić sobie dysk ssd Ocz Vertex 3 i tylko przypadkiem trafiłem na to strone ;) ale artykuł przeczytałem :))Pozdr.

    OdpowiedzUsuń
  2. Dzięki pomogłeś artykuł bardzo przydatny dobrze i bardzo logicznie wytłumaczone. Zamierzam kupić sobie dysk ssd Ocz Vertex 3 i tylko przypadkiem trafiłem na to strone ;) ale artykuł przeczytałem :))Pozdr.

    OdpowiedzUsuń
  3. Dzieki WIELKIE!!!! Wlasnie szukalem jakiegos programu do defragmentacji mojego dysku SSD i przypadkiem tutaj trafilem i teraz juz wiem zeby tego nie robic ;).
    Jeszcze raz dzieki ;) bo nie darowal bym sobie tego ze uszkadzam swoj komputer...

    OdpowiedzUsuń
  4. Twoja stara defragmentuje dyski SSD ;P

    OdpowiedzUsuń
  5. Kilka rzeczy mi się w tym artykule nie podoba.
    Po pierwsze skąd wiesz że przy defragmentacji SSD w ogóle dochodzi o przeniesienia sektora? Może ktoś o tym pomyślał i dysk SSD takie polecenie ignoruje?. Przy defragmentacji zmienia się tablica alokacji (nie wiem jak to wygląda w poszczegółnych systemach plików, zatrzymałem się na FAT32), czy uproszczenie tablicy alokacji nie ma wpływu na prędkości zapisu/odczytu?

    OdpowiedzUsuń
    Odpowiedzi
    1. Bo to jest idea defragmentacji. Chodzi o to by głowica mogła odczytać wszystko w 1 ciągu bez skakania. Stąd przenoszenie sektorów.
      Dysk SSD nie wie, że akurat odbywa się defragmentacja.
      Za to i tego nie wiemy, możliwe że np. najnowsze programy do defragmentacji potrafią jakoś wykryć, że mają do czynienia z dyskami SSD i nic im nie robią, albo robią coś co jest dla dysków SSD dobre.

      W FAT32 i wcześniejszych zmiany w tablicy alokacji nie powinny zbytnio wpływać na wydajność. Różnica jest tylko taka czy skoczyć należy o 1 czy o więcej sektorów. Są to jakieś różnice, ale nie aż takie.

      Usuń
  6. Absolutna słuszna rada.To jest (SSD) "Autystyczny" Dysk! nie wymaga większych konserwacji jedynie konkretnych ustawień w REGEDIT!

    OdpowiedzUsuń
  7. W Samsung Galaxy S III mam dodatkowa pamiec 16Gb. Czy te dyski tez nie podlegaja defragmentacji!??. Wszyskie "files" sciagam wylacznie na dysk dodatkowy, nie przeciazajac pamieci (lub i)dysku w telefonie. Nawet w stacjonarnym kompie, nie zasmiecam systemu "pierdolami" . Dziekuje.

    OdpowiedzUsuń
  8. Czy dodatkowy dysk w telefonie rowniez nie moze byc zdefragmentowany (Samsung Galaxy S III) 16Gb HD

    OdpowiedzUsuń
  9. Przemek zakupiłem Vaio SVT1312V1ES z dyskiem ssd128 i tam już była preinstalowana taka aplikacja VAIO CARE, gdzie oczywiście wśród narzędzi jest też defragm. Należy to wywalić, czy nie i czy powinienem korzystać z róznej maści optymalizatorów w sttylu Tune Up (od zawsze korzystałem z CC cleaner). Z góry dzięki za odpowiedź, fajny art. Pozdrawiam Rafał

    OdpowiedzUsuń
  10. Kupując Vaio SVT1312V1ES już miałem zainstalowany VAIO CARE, który bazuje na IOLO i tez ma defragm. Wywalić to , czy nie? I czy korzystać z wszelkiej maści optymalizatorów w stylu Tune Up??? (korzystam niemal od zawsze z CC cleanera) A tak wogóle to fajny artykół. Pozdrawiam

    OdpowiedzUsuń
  11. +Rafał Mammut, nie wiem. To narzędzie choć zowie się defragmenterem może robić coś całkowicie nieszkodliwego, albo po prostu nic.
    Jeśli zaważasz znaczący spadek wydajności SSD to spróbuj i sprawdź czy to coś pomogło, jeśli nie pomogło to będzie wiadomo, że na nic to narzędzie, a jednorazowa zbędna defragmentacja krzywdy dyskowi nie zrobi.
    Ja już od wieków nie korzystam z Tune Upów czy CC Cleanera, nigdy nie wdziałem żadnego wzrostu wydajności po ich użyciu więc po co się męczyć? ;-)

    OdpowiedzUsuń