Zbudowane na pamięciach Flash-NAND dyski SSD - Solid State Drive są bardzo zróżnicowane między sobą, jeśli chodzi o ich wewnętrzną organizację, stosowane algorytmy zapisu danych, mechanizmy translacji, sposoby wyłączania z eksploatacji zużytych komórek pamięci, metody zabezpieczenia i szyfrowania danych. Wszystkie te czynniki, a także bardzo ograniczona dostępność (w zasadzie brak) dokumentacji, sprawiają, że odzyskiwanie danych z uszkodzonych dysków SSD jest skomplikowane, zaś szanse powodzenia w znacznej mierze zależą od użytego przez producenta dysku kontrolera. To właśnie kontroler odpowiada za sposób rozmieszczenia danych w poszczególnych układach pamięci i za przekształczenia zawartej w nich informacji w logiczny obraz danych, czytelny dla komputera i dla użytkownika.
Największe szanse powodzenia przy odzyskiwaniu danych z dysków SSD mamy w przypadku dysków z kontrolerami z rodziny Indilinx Barefoot. Duże szanse mamy także w przypadku dysków Intela. Najwięcej problemów sprawiają dyski na kontrolerach Sandforce i jego licznych klonach - w tych przypadkach dobrym zwyczajem jest powiązanie harmonogramu robienia kopii zapasowej z harmonogramem mycia zębów. Kto już dzisiaj zdążył zabezpieczyć swoje dokumenty na drugim nośniku, może spokojnie poczytać o najczęściej spotykanych problemach i stosowanych metodach odzyskiwania danych z dysków SSD.
Producenci dysków SSD zazwyczaj oprócz zwykłego trybu pracy zgodnego ze standardem ATA, przewidują w tych dyskach dodatkowe funkcje, pozwalające na przetestowanie poszczególnych podsystemów i zmianę parametrów konfiguracyjnych. Komendy pozwalające na realizację tych funkcji przyjęto nazywać technologicznymi. Są one wykorzystywane do odzyskiwania danych w częstych przypadkach uszkodzeń oprogramowania wewnętrznego dysków SSD.
W czasie eksploatacji dysków SSD, podobnie, jak i w każdym innym przypadku nośnika danych zbudowanego na pamięciach Flash, nieuchronnie pojawiają się uszkodzone komórki pamięci. W większości przypadków awarie dysków SSD są konsekwencją pojawienia się przekłamań w informacji serwisowej wynikających z nadmiernego zużycia komórek pamięci. Usterki tego typu często objawiają się w ten sposób, że od strony elektronicznej wszystkie elementy pracują poprawnie, ale dysk nie może się zainicjalizować z powodu uszkodzenia którejś struktury oprogramowania wewnętrznego.
W różnych modelach dysków SSD taka sytuacja może dawać różne objawy. Zwykle dysk przechodzi w awaryjny tryb pracy, w którym jego funkcjonalność zostaje mocno ograniczona. Przejawia się to najczęściej zwracaniem komunikatów o błędach przy próbie odczytu lub zapisu danych, wykrywaniem dysku z zerową lub inną nieprawidłową pojemnością, nieprawidłowym rozpoznawaniem nazwy dysku (często zamiast niej wyświetlany jest symbol kontrolera lub kod błędu).
W takich sytuacjach pomocna jest znajomość nieopisanych w standardzie ATA, specyficznych dla każdego producenta komend technologicznych. Z ich pomocą można przeanalizować struktury informacji serwisowej, odczytać wewnętrzne logi dysku i ustalić przyczyny niepowodzenia inicjalizacji. Po określeniu przyczyny błędu można spróbować ją usunąć i przywrócić dysk do sprawności, jednak wymaga to dobrego poznania mikroprogramu dysku SSD i struktur informacji serwisowej, z którymi ten mikroprogram pracuje. Nie dysponując dokumentacją producenta, konieczne jest poświęcenie wielu godzin na poznanie wewnętrznej organizacji dysku SSD.
Ponieważ istnieje wielu producentów dysków SSD, a każdy z nich nieustannie wprowadza na rynek nowe modele, nie ma czasu na dogłębne analizowanie algorytmów pracy każdego modelu. Dlatego czasem wykorzystuje się te, z komend technologicznych, które pozwalają na odczytywanie stron z układów pamięci. W ten sposób można odczytać całość zawartości dysku SSD przez jego interfejs, bez konieczności wylutowywania układów pamięci i używania programatora. W takim przypadku przeważnie nie są naruszane warunki gwarancji.
Często komendy technologiczne służące do odczytu zawartości pamięci realizowane są w ten sposób, że automatycznie korygują błędy odczytu, a niekiedy nawet pozwalają na odszyfrowanie danych. W takich przypadkach do odzyskania danych wystarczy odtworzenie mechanizmów translacji. Oczywiście, ze względu na znacznie większą liczbę układów, jest to o wiele trudniejsze, niż w przypadku pendrivów, czy kart pamięci, jednak znacznie prostsze od odzyskiwania danych z w ogóle nie obrobionych obrazów pamięci Flash.
W większości przypadków odtworzony w ten sposób obraz struktury logicznej jest na tyle poprawny, że bez większego trudu można odzyskać dostęp do danych użytkownika. Niestety nie w każdym przypadku możliwe jest uzyskanie dostępu do danych w ten sposób.
Logika metody odzyskiwania danych polegającej na rozlutowaniu dysku SSD i odczytaniu zawartości pamięci na programatorze nawiązuje do analogicznej metody stosowanej w przypadku odzyskiwania daych z pendrivów i kart pamięci. Różnica jednak polega nie tylko na znacznie większej liczbie układów, jakie są stosowane w dyskach SSD.
Jest to metoda pozwalająca na podjęcie próby odzyskania danych z dysku SSD, który jest niesprawny i nie można odczytać z niego danych w trybie technologicznym, ale same układy pamięci są sprawne. A w zdecydowanej większości przypadków układom pamięci nic złego się nie dzieje. W takiej sytuacji nie pozostaje nic innego, niż wylutować każdy układ pamięci, odczytać jego zawartość na programatorze i spróbować odtworzyć obraz struktury logicznej danych użytkownika. Trzeba jednak mieć na uwadze, że proces ten jest złożony, a niepowodzenie na którymkolwiek z etapów uniemożliwia odzyskanie danych. Pierwsze problemy można napotkać już na etapie wylutowania układów pamięci. Układy te są produkowane w różnych typach obudów, coraz częściej spotykane są pamięci Flash-NAND w obudowach BGA. Dodatkowych problemów przysparza fakt, że układy pamięci zwykle lutowane są po obu stronach PCB dysku SSD. Przy wylutowywaniu pamięci trzeba pamiętać o tym, że wysoka temperatura może uszkodzić fizyczną strukturę układów. Jednocześnie należy uważać, by nie uszkodzić wyprowadzeń, gdyż może to uniemożliwić odczytanie zawartości układu. Aby móc odzyskać dane, konieczne jest odczytanie zawartości wszystkich układów pamięci.
Kolejne przeszkody mogą pojawić się przy próbie odczytania zawartości pamięci Flash. Różnorodność typów obudów układów sprawia, że często do programatora nie ma gotowego odpowiedniego adaptera. W takich wypadkach konieczne jest przylutowanie odpowiednich wyprowadzeń za pomocą przewodów. Operację tę dodatkowo często komplikuje brak odpowiedniej dokumentacji do wielu układów. Oznacza to zwykle konieczność poświęcenia takiego samego sprawnego dysku w celu ustalenia, które wyprowadzenia odpowiadają za jakie sygnały. Biorąc pod uwagę, że w dyskach SSD może być ponad 20 układów scalonych, z których każdy może zawierać kilka pamięci, sam proces odczytania ich zawartości potrafi być czasochłonny i złożony. W ten oto sposób można otrzymać surowe obrazy zawartości układów pamięci. Wydawałoby się, że dane są już prawie odzyskane, ale tak naprawdę to nawet nie połowa drogi. Problem polega na tym, że kontrolery w celu przyśpieszenia transferów danych, a także zapewnienia w miarę równomiernego zużycia uładów pamięci, rozpraszają dane po wszystkich układach, a także dokonują rozmaitych przekształceń, przez które zawartość układów Flash-NAND bardziej przypomina losowy ciąg bitów, niż dane użytkownika.
Technologia pracy pamięci Flash-NAND powoduje, że nieuchronnie pojawiają się błędy. Poszczególne komórki pamięci zużywają się i zaczynają być nieprawidłowo odczytywane. Nie wpływa to na normalną pracę dysku SSD, dopóki błędy te mogą być na bieżąco korygowane przy pomocy odpowiednich wewnętrznych mechanizmów korekcji. Dla ochrony danych przed tego typu przekłamaniami stosuje się kody korekcji błędów ECC - Error Correction Code. Przy zapisie danych kontroler dzieli blok danych na kilka fragmentów i do każdego fragmentu dodaje informację nadmiarową pozwalającą na wykrycie i poprawienie możliwych błędów. Im mocniejszy kod ECC, tym więcej takich błędów może poprawić, a także może chronić więcej sektorów.
Zabezpieczanie kodami i weryfikacja poprawności danych przy normalnej pracy jest zadaniem kontrolera dysku, jednak w razie odzyskiwania danych z obrazów wylutowanych układów pamięci, a także w wielu przypadkach obrazów odczytanych w trybie technologicznym, konieczne jest ręczne przeprowadzenie tej procedury. W tym celu niezbędne jest ustalenie parametrów wykorzystywanych kodów.
Podstawową jednostką odczytywaną z pamięci typu Flash jest strona. Zwykle rozmiar strony odpowiada 4, 8, 16, a nawet 32 sektorom danych użytkownika i powiązanej z nimi informacji nadmiarowej. W tej informacji nadmiarowej przechowywane są kody korekcji ECC, markery bloków i inne informacje serwisowe. Zwykle każda strona jest podzielona na kilka zakresów zawierających zarówno dane użytkownika, jak i informację serwisową, zawierającą m. in. kody korekcji chroniące ten zakres danych.
Każda strona w obrębie jednego dysku ma taki sam format. Dla skutecznego odzyskania danych trzeba określić, które bajty w ramach strony zawierają dane użytkownika, a które informację serwisową.
Większość dysków SSD nie chroni danych użytkownika w otwartej formie. Dane zwykle są kodowane lub szyfrowane. Różnica pomiędzy kodowaniem, a szyfrowaniem jest dosyć płynna i polega na trudności w odwróceniu procesu.
Kodowanie jest procesem stosunkowo prosto odwracalnym, a jego zadaniem jest przekształcenie danych w podobny do losowego ciąg bitów. Nie ma on charakteru kryptograficznego - znajomość algorytmu pozwala na uzyskanie danych wejściowych bez szczególnego trudu. W dyskach SSD kodowanie odbywa się zwykle przez wykonywaną na danych użytkownika pobitową operację XOR (logiczna funkcja alternatywy rozłącznej) z wykorzystaniem wygenerowanego przez producenta wzorca.
W celu odzyskania danych konieczne jest odtworzenie użytego wzorca XOR, a następnie przeprowadzenie operacji XOR z wykorzystaniem tego wzroca na zawartości odczytanej z układów pamięci. W najprostszym przypadku dla wszystkich stron stosuje się ten sam wzorzec XOR, długości równej rozmiarowi strony. Czasami dysk generuje wzorzec o długości odpowiadającej rozmiarowi wielu stron. Przy wzorcu o długości n stron, każda z n początkowych stron składana jest z odpowiednim fragmentem wzorca, a następnie operacja ta jest powtarzana dla kolejnych grup złożonych z n stron. Ale bywają też bardziej złożone sytuacje, kiedy dla każdej strony generowany jest indywidualny wzorzec na podstawie jakiejś reguły. W takich wypadkach konieczne jest odgadnięcie tej reguły, a tego zadania w żaden sposób nie można nazwać prostym.
W przypadku szyfrowania znajomość samego algorytmu jeszcze niczego nie daje. Konieczna jest także znajomość klucza do rozszyfrowania. Dlatego w przypadku sprzętowego szyfrowania dysku, bez znajomości parametrów szyfrowania, danych odzyskać się nie da. Większość producentów dysków SSD stosuje sprzętowe szyfrowanie danych. Specjaliści od marketingu uczynili z szyfrowania najpierw przewagę konkurencyjną, a obecnie niemal obowiązkową funkcję dysków SSD. Brak szyfrowania jest w złym tonie, mimo że większość przypadków niemożliwości odzyskania danych po awarii dysku SSD wynika właśnie z szyfrowania.
Po wykonaniu wszystkich przekształceń, można przystąpić do ostatniego etapu odzyskiwania danych - odtworzenia obrazu struktury logicznej. Ponieważ ilość zapisów komórek pamięci jest ograniczona, kontroler musi stosować mechanizmy prowadzące do wyrównywania zużycia poszczególnych komórek, aby wydłużyć okres eksploatacji układów pamięci. Konsekwencją tego jest fragmentacja i rozproszenie danych wewnątrz wszyskich układów pamięci. Oczywiście dysk musi wiedzieć, gdzie znajdują się potrzebne dane. W tym celu wykorzystywane są specjalne tablice i listy, które także przechowywane są w układach pamięci. Struktury odpowiadające za tłumaczenie logicznych adresów (numery sektorów LBA) w fizyczne (strony układów pamięci) nazywane są translatorem. Żeby odtworzyć obraz struktury logicznej dysku SSD, konieczne jest rozpoznanie formatu i przeznaczenia wszystkich struktur translatora, a także trzeba umieć je odnaleźć i zidentyfikować. Niektóre z tych struktur są na tyle duże, że dysk nie przechowuje ich w jednym miejscu, lecz rozrzuca fragmentami po różnych stronach, podobnie jak dane użytkownika. W takich wypadkach istnieje struktura opisująca rozmieszczenie tej informacji - taki translator dla translatora. We współczesnych dyskach SSD zwykle na tym się kończy, ale w przyszłości można pójść dalej.
Po odczytaniu bloków we właściwej kolejności, pozostaje sprawdzić i ewentualnie poprawić odzyskaną strukturę logiczną. Jeśli udało się dotrzeć do tego etapu, nie powinno być z tym problemu. Ale ile pułapek trzeba było po drodze ominąć...może jednak lepiej zaraz zrobić kopię bezpieczeństwa...