19.01.20227 min

Paweł KaczmarzykPrezes / Specjalista odzyskiwania danychKaleron

Jak są adresowane dane na nośnikach komputerowych?

Poznaj historię zapisywania danych na nośnikach komputerowych oraz co się z nimi dzieje, gdy otworzysz plik.

Jak są adresowane dane na nośnikach komputerowych?

Z punktu widzenia użytkownika najbardziej oczywistym sposobem adresowania danych jest tworzenie spójnych całości informacji w postaci plików, które umieszczane są w strukturze logicznej katalogów, niekiedy zwanych folderami.

Wyszukując odpowiedniego zdjęcia, dokumentu lub innego pliku poruszamy się przy pomocy myszki, lub wpisując polecenia w konsoli po strukturze katalogów, przechodząc do podkatalogów, lub katalogów nadrzędnych, Kiedy odnajdziemy to, czego szukamy, wystarczy wybrać i uruchomić właściwy program, który ten plik nam otworzy. Ale jak to się dzieje, że komputer odczytuje odpowiedni strumień danych?


Kiedyś to było


W najdawniejszych czasach techniki komputerowej dane cyfrowe były przechowywane na kartach perforowanych. To bardzo proste nośniki przechowujące bity w wierszach i kolumnach. I możemy w nich rozróżnić dwa stany fizyczne – na każdym przecięciu wiersza i kolumny może być dziurka lub może jej nie być, czemu możemy przypisać dwa stany logiczne – zero lub jedynkę. Karty trzeba było wkładać w określonej kolejności, a ponieważ układy dziurek były trudne do zinterpretowania przez człowieka, dlatego zawartość kart zazwyczaj była dodatkowo opisywana ołówkiem.

Taki sposób przechowywania danych został przeniesiony w latach 50. na dyski i taśmy magnetyczne. Dane zapisywano w określonych sektorach adresacji fizycznej, do których należało się odwoływać przy odczycie. Było to dość kłopotliwe, bo wymagało kontrolowania, które sektory zawierają istotne dane, a które można było wykorzystać. Było to tym trudniejsze, że ówczesne komputery były wykorzystywane przez wielu użytkowników i chwila nieuwagi wystarczała, by przypadkowo nadpisać dane kolegi.

W reakcji na ten problem powstały systemy plików. Sektory zawierające spójne fragmenty danych stanowiących zorganizowaną całość zamknięto w plikach (jest to nazwa nawiązująca do plików kart perforowanych), których adresowanie powierzono odpowiednim strukturom logicznym. Struktury te, z racji tego, że stanowią informację o przechowywanej na dysku informacji, często nazywa się metadanymi. Zawierają one szereg informacji o plikach, takich, jak nazwy, atrybuty, parametry czasu, czy prawa dostępu. Szczegóły tych informacji różnią się w zależności od systemu plików, jednak to, co jest dla nas najważniejsze, czyli informacje pozwalające na umiejscowienie naszych plików tak w strukturze logicznej, jak w fizycznej lokalizacji dysku.


Systemy plików

Ponieważ sektory są małymi jednostkami – pierwotnie zawierały 512 B, dopiero stosunkowo niedawno zaczęto używać sektorów o rozmiarze 4 kB. – nie zawsze są optymalne w adresowaniu większych objętości danych. Dlatego systemy plików posługują się swoimi wewnętrznymi jednostkami alokacji – w zależności od nomenklatury przyjętej w danym systemie plików – klastrami lub blokami. Pojęcia „blok” używają systemy plików wywodzące się ze środowiska unixowego, jednak, ze względu na to, że słowo „blok” w technice komputerowej ma bardzo wiele różnych znaczeń, dalej na oznaczenie jednostek alokacji używanych przez systemy plików będziemy używać pojęcia klastra.

Oczywiście dysk, a także każdy inny fizyczny nośnik danych, może być partycjonowany w różny sposób, a każda z partycji może mieć inny system plików z inną wewnętrzną adresacją danych. Jak dysk ma się w tym wszystkim rozeznać? Na szczęście nie musi. To system plików odpowiada za przeliczenie adresacji klastrowej na adresację rozumianą przez dysk. System plików wie, gdzie dany plik leży na partycji, a także, w którym miejscu dysku zaczyna się ta partycja. A więc może zażądać od dysku odczytania określonego fizycznego sektora.


Adresacja CHS

I do pewnego momentu tak właśnie było. System plików wiedząc, gdzie dany plik się znajduje, przeliczał ten adres, ustalając właściwą głowicę (jednoznacznie przyporządkowaną do określonej powierzchni talerza), cylinder (jest to grupa ścieżek o tym samym promieniu) i sektor fizyczny. Adresacja ta nazywa się CHS – od angielskich słów Cylinder, Head i Sector. Jednak dyski mogą się dość istotnie różnić pomiędzy sobą liczbą talerzy i gęstością zapisu.

Liczba talerzy bezpośrednio przekłada się na liczbę głowic, a gęstość zapisu – na liczbę cylindrów i sektorów na ścieżkę. Takie obciążenie systemu plików przeliczaniem adresacji klastrowej na adresację fizyczną dysku mogło się sprawdzać jedynie w przypadku niewielkiej liczby ustandardyzowanych konfiguracji. Jednak na początku lat 80. zaczęło się pojawiać coraz więcej producentów produkujących coraz liczniejsze modele dysków. Rywalizacja pomiędzy nimi jasno pokazała, że sytuacja rychło stanie się trudna do opanowania i konieczne jest stworzenie standardów protokołów komunikacyjnych pozwalających na zachowanie kompatybilności pomiędzy urządzeniami i oprogramowaniem różnych producentów.


Współczesna adresacja LBA

W połowie lat 80. wprowadzono standardy ATA (z myślą o komputerach osobistych) i SCSI (dla zastosowań serwerowych). Od tego czasu wszystkie dyski powinny być zgodne z jednym z tych standardów. Jednocześnie stworzono nowy sposób adresacji w logicznych blokach – LBA. Adresacja LBA polega na nadawaniu kolejnym sektorom dysku numerów od 0 do N-1 dla N dostępnych dla użytkownika sektorów. Adresacją tą posługują się oba wspomniane wyżej protokoły komunikacyjne.

Oczywiście adresacja fizyczna w sektorach leżących na różnych ścieżkach różnych powierzchni talerzy nadal funkcjonuje, jednak ukrycie tej adresacji pozwala na większą swobodę w fizycznej organizacji danych i zarządzaniu defektami. M.in. pozwala zwiększyć gęstość zapisu, dzieląc powierzchnię talerzy na strefy o różnej liczbie sektorów na ścieżkę. Od czasu wprowadzenia standardów ATA i SCSI to nie system plików odpowiada za odnalezienie właściwej fizycznej lokalizacji, a zaszyty w oprogramowaniu układowym dysku podsystem translacji przelicza adresy LBA na adresy fizyczne.

Adresacja LBA pozwala na jeszcze jedną ważną rzecz – proste zastąpienie dysków twardych urządzeniami, które tak naprawdę dyskami nie są. Bez tego pośredniego poziomu adresacji zastąpienie dysków twardych półprzewodnikowymi byłoby znacznie trudniejsze. Przecież SSDki wykorzystujące układy NAND nie mają głowic, ani talerzy, na których powierzchni można by było wytyczyć ścieżki. Nie mają też sektorów. Ze względu na zupełnie inną fizykę zapisu, układy NANDowe adresują dane w stronach będących jednostkami zapisu (programowania) i odczytu oraz w liczących nawet setki stron blokach będących jednostkami kasowania.

Wprawdzie były podejmowane próby stworzenia systemów plików odwołujących się bezpośrednio do adresacji fizycznej układów NAND (np. JFFS, UBIFS, czy YAFFS), ale opierały się one na założeniu, że wewnętrzna adresacja różnych układów będzie bardzo podobna, a przede wszystkim twórcy tych systemów spodziewali się, że rozmiar strony przyjęty w pierwszych układach tego typu utrzyma się przez dziesięciolecia na wzór 512-bajtowych sektorów w dyskach twardych. Nadzieje te szybko zostały zawiedzione, gdyż producenci układów używają wielu różnych rozmiarów stron o różnej wewnętrznej organizacji i zapanowanie nad tą różnorodnością z poziomu systemu plików jest ogromnym wyzwaniem.

Nośniki flashowe mają jeszcze jedną ważną cechę odróżniającą je od nośników magnetycznych. W przypadku nośników magnetycznych starą zawartość można zastąpić nową, po prostu przemagnesowując powierzchnię. Pozwala to na względnie stałe przyporządkowanie adresów LBA do adresów fizycznych. Z kolei danych zapisanych w tranzystorach układów typu Flash nie można zmieniać – konieczne jest skasowanie istniejącej zawartości, aby w jej miejscu można było zapisać nową. W praktyce nowa zawartość jest zapisywana w fizycznie innym miejscu, a stara, zdezaktualizowana jest kasowana, gdy nośnik ma wolną chwilę. Oznacza to, że numery sektorów LBA dynamicznie rotują po adresacji fizycznej, co musi być rejestrowane w tablicach translacji oprogramowania układowego.


Przechowywanie danych

Nasze dane możemy przechowywać nie tylko na pojedynczych nośnikach, ale też na ich zespołach – macierzach RAID, które logicznie są widziane tak, jak pojedynczy nośnik. Konsekwencją tego, że wiele dysków w macierzy jest widzianych, jako jedna logiczna całość jest to, że macierz ma swoją własną adresację LBA niezależną od adresacji wchodzącej w jej skład dysków. Kiedy system odwołuje się do określonych adresów macierzy, jej kontroler ustala, na którym dysku się te adresy znajdują i przelicza je na adresację tego dysku.

Teraz kiedy już wiemy, w jaki sposób dane są adresowane na różnych poziomach, możemy prześledzić to, co się dzieje, kiedy otwieramy plik. Najpierw odnajdujemy plik w strukturze katalogów. Kiedy go wybierzemy i zażądamy jego odczytania, system plików w oparciu o swoje metadane ustali położenie tego pliku w adresacji klastrowej. Znając rozmiar klastra i początek klasteryzacji przeliczy adresy klastrowe na sektorowe. Następnie do ustalonych w ten sposób numerów sektorów wewnątrz partycji dodaje liczbę sektorów poprzedzających tę partycję uzyskując w rezultacie numery adresów LBA nośnika.

W przypadku, gdy naszym nośnikiem jest macierz RAID, polecenie obsługuje kontroler macierzy, Ustala on, na których dyskach znajdują się żądane adresy LBA i przelicza ich numery na numery adresów LBA poszczególnych dysków. Następnie przekazuje polecenie do wybranych dysków, gdzie przeliczeniem adresów LBA na właściwe adresy fizyczne zajmuje się oprogramowanie układowe urządzenia. W przypadku zapisu danych trafiają one do właściwych fizycznych jednostek alokacji, a w przypadku odczytu – są wystawiane na interfejs  zewnętrzny jako zawartość sektorów LBA.

Uszkodzenia podsystemu translacji są popularnymi przyczynami awarii nośników danych – tak dysków twardych, jak i nośników półprzewodnikowych. W takich przypadkach dyski mogą nie być w ogóle rozpoznawane, zawieszać system, przedstawiać się w nietypowy sposób (np. dyski SSD często w odpowiedzi na żądanie identyfikacji zamiast swojego modelu wystawiają model kontrolera), a także zgłaszać się z zerową lub bardzo małą pojemnością. Odzyskanie dostępu do danych w takich sytuacjach wymaga odtworzenia translatora tak, aby nośnik zwracał poprawnie dane w logicznej kolejności.

<p>Loading...</p>