Pamięć flash NAND jest jednym z najważniejszych elementów współczesnych urządzeń pamięci masowej, takich jak dyski SSD. Wyróżnia się ona unikalnym sposobem zarządzania danymi, który różni się od innych typów pamięci, takich jak dyski twarde czy pamięć flash NOR. Kluczową cechą NAND jest brak stałego mapowania adresów logicznych na fizyczne, co wymaga zaawansowanego zarządzania przez oprogramowanie sprzętowe.
Budowa i zasada działania pamięci flash NAND
Pamięć flash NAND składa się z wielu bloków, a każdy blok dzieli się na tak zwane strony. Blok jest najmniejszą jednostką, którą można wymazać w jednej operacji, podczas gdy strona to najmniejsza jednostka, którą można zaprogramować. Ta hierarchia sprawia, że wymazywanie przestarzałych stron w blokach, które zawierają jeszcze ważne dane, staje się wyzwaniem.
Podczas zapisu danych strony w wolnych blokach są wypełniane sekwencyjnie, niezależnie od logicznego adresu blokowego (LBA). Relacja między adresami logicznymi a fizycznymi jest zapisywana w tabelach mapowania, które również przechowywane są w pamięci flash. Dzięki temu możliwe jest dynamiczne przypisywanie przestrzeni pamięci w zależności od potrzeb.
Problem przestarzałych danych i proces zbierania śmieci
Przestarzałe dane, czyli strony zastąpione nowszymi wersjami, stanowią istotny problem w pamięci NAND. Ze względu na to, że można wymazywać tylko całe bloki, strony zawierające przestarzałe dane blokują przestrzeń pamięci. Aby rozwiązać ten problem, stosuje się proces zwany zbieraniem śmieci (ang. garbage collection).
Kiedy nośnik pamięci osiąga krytyczny poziom wolnych bloków, funkcja zbierania śmieci aktywuje się. Proces ten polega na skopiowaniu ważnych danych z bloków zawierających przestarzałe strony do wolnych bloków. Następnie bloki źródłowe są wymazywane, co przywraca ich zdolność do zapisu nowych informacji.
Efektywność zbierania śmieci
Efektywność procesu zbierania śmieci określana jest wskaźnikiem EE, który opisuje stosunek liczby przestarzałych stron do ogólnej liczby stron w bloku. Gdy E=1E = 1, cały blok można wymazać bez kopiowania danych, co jest najbardziej efektywne. W przeciwnym razie konieczne jest przeniesienie ważnych danych, co zwiększa zużycie pamięci flash.
Zbieranie śmieci działa zwykle w tle, aktywując się w momentach niskiej aktywności nośnika. Jeśli jednak nośnik jest stale obciążony, proces ten może wpływać na wydajność.
Nadmierne alokowanie jako rozwiązanie problemów
Aby zminimalizować negatywne skutki zbierania śmieci, producenci stosują mechanizm nadmiernego alokowania. Polega on na rezerwacji części fizycznej pamięci, która nie jest dostępna dla użytkownika. Dzięki temu proces zbierania śmieci może działać bardziej efektywnie, co przekłada się na większą wydajność zapisu i mniejsze zużycie nośnika.
Nadmierne alokowanie jest szczególnie korzystne w przypadku aplikacji, które wykonują losowy dostęp do zapisu. Rezerwacja tej przestrzeni pozwala także na wymianę uszkodzonych bloków pamięci, wydłużając żywotność nośnika.
Podsumowanie
Pamięć flash NAND jest niezwykle wydajnym i elastycznym rozwiązaniem dla współczesnych systemów pamięci masowej. Kluczowym elementem jej działania jest zarządzanie danymi poprzez tabele mapowania oraz proces zbierania śmieci, który zapewnia optymalne wykorzystanie dostępnej przestrzeni. Mechanizm nadmiernego alokowania dodatkowo poprawia efektywność i niezawodność pamięci, czyniąc ją odpowiednią do szerokiego zakresu zastosowań.
Jak można wykorzystać śmieciowe informacje?
Załóżmy taką sytuacje. Zapisujemy na karcie pamięci, pendrive lub dysku SSD pliki. wypełniają one 10 pełnych bloków oraz dopisują się do 20 innych bloków które nie były do tej pory zajęte. Po jakimś czasie kasujemy te pliki.
Od strony systemu nie widzimy tych danych i nie mamy możliwości ich odzyskania, bo kontroler nośnika oznaczył już te miejsca jako puste i nie dostępne dla systemu. Kontroler skasował dane z 10 pełnych bloków, ale w pozostałych 20, które dopełnił informacjami oznaczył je tylko jako śmieciowe. Ściągając jednak surową zawartość z pamięci NAND i odnajdując te 20 bloków danych, które zostały dopisane do już istniejącej zawartości możemy wyciągną pozostawione tam informacje, pod warunkiem, że funkcja Garbage collection nie została uruchomiona i dane nie zostały przeniesione i trwale usunięte.
Nie da się w ten sposób odzyskać wszystkich informacji, ale wielokrotnie odzyskiwaliśmy w ten sposób dane ze sformatowanych kart pamięci lub pendrive, które były na tyle użyteczne oraz w takich ilościach, że klient był zadowolony z usługi.
W dyskach SSD te procesy działają nieco szybciej, a dodatkowo wykorzystanie komendy TRIM utrudnia sprawę odzysku plików, ale zawsze można spróbować odzyskać informacje w ten sposób.
Innym zastosowaniem tej metody odzyskiwania danych jest szukanie cyfrowych dowodów. O ile informacje zawarte w takich śmieciowych blokach nie zawsze mogą się przydać użytkownikowi, o tyle w procesie pozyskiwania dowodów cyfrowych nawet fragmenty zdjęć, dokumentów, emaili, czy danych z GPS mogą wiele zmienić.
Jeszcze inną sytuacją, w której można pozyskać dane z tak zwanych śmieciowych bloków może być np. problem z zapisem. W sytuacji błędów w komórkach NAND np. podczas szybkich serii zdjęć w nowoczesnych aparatach lub nagrywania materiału Video wysokiej rozdzielczości może dojść do sytuacji, w której kontroler przyjmuje dane z urządzenia i próbuje je wpisać do komórek NAND. ze względu na uszkodzenia nie może ukończyć procesu zapisu w danym bloku więc próbuje to zrobić w innym. Mija czas aparat przerywa proces zapisu, lub zawiesza się, a system plików nie rejestruje tej operacji, bo kontroler nie zwrócił odpowiednich informacji.
Mimo, iż dane nie są widoczne od strony systemu, mogą znajdować się w śmieciowych blokach.
Pozyskiwanie danych ze śmieciowych bloków nie jest komfortową sytuacją, bo często są to informacje we fragmentach i trudno z nich uzyskać użyteczne pliki, ale czasem jest to możliwe. Ze względu na ilość pracy i koszty usługa nie jest dla wszystkich.