ś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 ;-)
SSD a programowanie
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)