Popularne systemów plików

Garść informacji dotyczących systemów plików podaliśmy w jednym z poprzednich wpisów. Teraz kolej na przegląd kilku podstawowych metod zarządzania plikami jakie powstawały na przestrzeni lat.

FAT (File Allocation Table)

System projektowany był z myślą głównie o dyskietkach i niewielkich dyskach twardych jakie funkcjonowały na początku lat 80. Jego premiera miała miejsce w roku 1980 wraz z pierwszą wersją systemu operacyjnego QDOS, poprzednika PC-DOS i MS-DOS.

Na architekturę systemu FAT składają się cztery podstawowe elementy:

  • tablica alokacji plików – zawiera informacje o fizycznym położeniu pliku na dysku. Każdy rekord opisuje położenie jednego klastra, w przypadku gdy plik nie mieści się w jednym klastrze, w tablicy zapisana jest informacja o położeniu kolejnego klastra z danym plikiem.
  • boot sector – pierwszy sektor wykorzystywany do uruchomienia systemu operacyjnego.
  • katalog główny – przechowuje dane o zbiorach, informacje o nazwie pliku, rozmiarze, adresie pierwszego klastra, atrybutach, dacie modyfikacji.
  • region danych – obszar zajmowany przez pliki i podkatalogi, podzielony na logiczne bloki (klastry). 

Najważniejszym elementem systemu była tablica alokacji plików (File Allocation Table), od której system zaczerpnął swoją nazwę. Podstawowymi wersjami systemu rozwijanymi w kolejnych latach były: FAT 12, FAT 16 i FAT 32.

FAT 12

FAT 12 był pierwszą szeroko zastosowana wersja systemu plików. Zastosowano w nim 12. bitowe pole adresowe dla jednostek alokacji co pozwalało na zaadresowanie 4078 jednostek. Wielkość klastrów mieściła się w przedziale od 512 bajtów do 4kB, co pozawalało na utworzenie partycji w rozmiarze około 16 MB (w późniejszych wersjach wprowadzano zmiany rozszerzające rozmiar obsługiwanej partycji). W przypadku dyskietek jednostka alokacji miała na ogół wielkość jednego sektora, co ograniczało rozmiar partycji do około 2 MB. System ten został całkowicie wyparty przez jego następców i nie jest obecnie stosowany.

FAT 16

FAT 16 opracowany został w 1983 roku i posługiwał się 16 bitowym polem adresowym przy dostępie do plików co oznaczało, że mógł zarządzać klastrami w liczbie 65 536. Klastry równe były wielkością sektorom (512 bajtów), co ograniczało obsługiwaną pojemność do 32 MB (większy dysk należało podzielić na partycje). Ze względu na ograniczoną liczbę partycji zwiększeniu uległy jednostki alokacji – przy stosunkowo niewielkich plikach w tamtych czasach było to spore marnotrawstwo przestrzeni dyskowej (w jednym klastrze nie może znajdować się więcej niż jeden plik). Inną wada tego systemu było ograniczenie wielkości pliku do 2. GB.

FAT 32

Aby sprostać rosnącym wymaganiom dotyczącym wielkości i ilości zapisywanych na dysku plików opracowano nowy system FAT 32, po raz pierwszy zastosowany w Windows 95. Wielkość partycji w tym systemie została rozszerzona do blisko 127. GB, a to za sprawą bloków długości 32. bitów zastosowanych do przechowywania rekordów i numerów sektorów. Dzięki standardowi Unicode system ten pozwala także na zastosowanie długich nazw plików oraz wykorzystanie w ich nazwach znaków diakrytycznych. System ten obsługuje pliki w maksymalnym rozmiarze 4 GB, a ponieważ rozmiar współczesnych plików wideo często przekracza tę wielkość, ma on ograniczone zastosowanie (obecnie głównie w pamięciach USB). Oprócz systemów Windowsowych FAT 32 obsługiwany jest także przez inne systemy operacyjne, jak np. Mac OS firmy Apple.

exFAT (Extended File Allocation Table)

Opracowany został na potrzeby kart pamięci w celu umożliwienia tym nośnikom obsługi większych plików. System ten współpracuje jednak tylko z Windows XP (z zainstalowanym dodatkiem Service Pack 2), Windows Vista (wraz z dodatkiem Service Pack 1) lub Windows 7. Jego zastosowanie jest jednak niewielkie ze względu na niemożność odczytania przez inny system operacyjny danych zapisanych w tym systemie plików.

HPFS (High Performance File System)

Stworzony został na potrzeby systemu operacyjnego OS/2 – wspólnego projektu IBM i Microsoft. Wykorzystany po raz pierwszy w 1989 roku. Od początku system ten projektowany był z myślą wykorzystania w dyskach HDD. Nie posiadał mechanizmu księgowania, obsługiwał długie nazwy plików (256 znaków) przy maksymalnym ich rozmiarze wynoszącym 2 GB (rozmiar partycji wynosił do 2. TB). System ten stanowił podstawę dla zaprojektowanego później NTFS.

NTFS (New Technology File System)

Jest to obecnie obowiązujący standard w systemach Windows. Zarządza plikami wielkości 16 TB, obsługując nośniki w rozmiarze 256 TB – w przypadku konieczności użycia jeszcze większych plików i dysków NTFS może zostać rozszerzony. Wielkość klastrów w tym systemie mieści się w przedziale 512 bajtów – 64 kB. Większy rozmiar klastra oznacza zwiększoną szybkość dostępu do plików – mniejsze pliki zajmują jedną alokację i odnalezienie pliku zabiera mniej czasu. Liczba klastrów, które mogą być obsługiwane tym systemem przekracza 4 miliardy (ponad 18 bilionów przy wersji systemu obsługującej 64. bitowe pole adresowe). Zaletą tego systemu jest zastosowanie tzw. mechanizmu księgującego (journaling). Polega on na zapisywaniu wszelkich zmian na plikach najpierw w zarezerwowanym specjalnym obszarze pamięci. W przypadku wystąpienia błędów zapisu (np. podczas awarii zasilania) możliwe jest w ten sposób łatwe odzyskanie danych (więcej o mechanizmie księgującym w poprzednim wpisie.

HSF/HSF+ (Hierarchical File System)

To obecny standard współpracujący z systemami operacyjnymi Mac OS. Jednak po zainstalowaniu dodatkowego oprogramowania (np. MacDrive) można korzystać z dysku z tym systemem plików pod Windowsem. Jest odpowiednikiem NTFS – podobnie obsługuje duże pliki i podobnie wykorzystuje mechanizm księgujący. Jego poprzednik, HSF, zaprezentowany został po raz pierwszy w 1985 roku. Jako podstawowy system obsługi danych używany był przez systemy komputerów Mac aż do 1998 roku, kiedy to wraz z systemem operacyjnym OS 8.1 pojawił się HSF+. HSF+ jako doskonalsze wcielenie HSF obsługuje znacznie większe pliki (zamiast 16. bitowych 32. bitowe) oraz wykorzystuje Unicode przy zapisywaniu nazw plików i folderów (nazwy mogą mieć maksymalnie 255 znaków – jego poprzednik obsługiwał 31 znaków)

UFS (Unix File System)

System plików zaprojektowany do wykorzystania przez systemy Uniksowe. Jego pierwsza wersja pojawiła się w roku 1986 i od tego czasu jest ona cały czas rozwijana. Najważniejsze jego współczesne implementacje odnaleźć można w systemach operacyjnych: FreeBSD, UFS1, UFS2, Solaris, OS X, NeXTStep.

Minix

Zastosowany w systemie operacyjnym Minix (będącym źródłem inspiracji dla Linusa Torvaldsa, twórcy Linuksa) oraz wczesnych wersjach Linuksa. Po wprowadzeniu systemu ext jego zastosowanie zostało ograniczone do dyskietek.

ext (Extended File System)

System ten jest pierwszą wersją linuksowego systemu plików. Zastąpił on wykorzystywany na początku system Minix, mający poważne mankamenty w postaci ograniczonych i niewielkich maksymalnych rozmiarów plików i partycji. Ext zaimplementowany został po raz pierwszy w roku 1992 – obsługiwał partycje do 2. GB raz pliki maksymalnej wielkości 64 MB. Nie był jednak wolny od niedoskonałości – jego działanie prowadziło do sporej fragmentacji plików i szybko zastąpiony został przez ext2.

ext2 (Second Extended File System)

Drugi rozszerzony system plików przeznaczony dla Linuksa, niwelujący niedoskonałości swojego poprzednika (ext) – wyposażony w mechanizmy zapobiegające zbyt dużej fragmentacji plików. Ext2 obsługiwał partycje o wielkości maksymalnej 4 TB oraz pliki do 2. GB. Nazwy plików mogły składać się z maksymalnie 255 znaków. System posiadał mechanizm rozpoznawania uszkodzonych plików, np. w wyniku awarii systemu i niewłaściwego zamknięcia – przy ponownym starcie systemu następuje rozpoznanie szkód i ich naprawa za pomocą osobnego oprogramowania.

ext3 (Third Extended File System)

Trzeci rozszerzony system plików oparty został na ext2. Jest to system plików implementowany przez wiele dystrybucji Linuksa opartych na jądrze 2.4 – 2.6. Od swojego poprzednika różni się mechanizmem księgowania – efektywniejszą i szybszą możliwością przywrócenia spójności systemu plików po awarii. Ext3 oferuje trzy tryby księgowania:

  • tryb, w którym księgowane są zarówno metadane jak i dane (najbezpieczniejszy).
  • tryb księgowania jedynie metadanych.
  • tryb księgowania metadanych wraz z możliwością modyfikowania danych połączonych z metadanymi (tzw. transakcjami) w celu zwiększenia wydajności procesu.

Dużą zaletą ext2 i ext3 jest ich wzajemna konwertowalność. Przejście pomiędzy systemami polega na dodaniu bądź odjęciu pliku dziennika. Nie jest konieczne tworzenie kopii zapasowych konwertowanych partycji. Mocną stroną ext3 jest niewielka fragmentacja plików i znikome obciążenie procesora. Podstawową wadą tego systemy (jak i innych obsługujących mechanizm księgowania) jest mniejsza wydajność (pliki zapisywane są dwukrotnie). Jednak praktyka pokazuje, że w typowych zastosowaniach nie ma to wielkiego znaczenia i wpływu na sprawność systemu.

ext4 (Fourth Extended File System)

To czwarta wersja rozszerzonego systemu plików, obecnie najpowszechniej wykorzystywana przez Linuksa – dostępna od wersji jądra 2.6.19, zaś od wersji 2.6.28 uznawana za stabilną.

Ekstenty

W stosunku do swojego poprzednika zmianie uległa idea organizacji bloków, w których zapisywane są pliki. Wykorzystany został mechanizm tzw. ekstentów, zastępujący adresowanie pośrednie bloków. Ext4 mapuje możliwie największą porcję danych na ciągły obszar bloków zamiast pojedynczego ich adresowania. Ekstentem nazywana jest struktura przechowująca wartości potrzebne do takiego mapowania. Zaletą tego rozwiązania jest zwiększenie maksymalnego rozmiaru pliku (16 TB dla pojedynczego pliku w stosunku do 2. GB dla ext2) i rozmiaru partycji (1 EB w stosunku do 16. TB). Redukując zaś rozmiary metadanych idea ekstentów sprawia, że działania na dużych plikach stają się o wiele szybsze.

Prelokacja

Kolejną nowością związana z włączoną obsługą ekstentów jest mechanizm prelokacji – zarezerwowania określonego obszaru na plik, który początkowo nie wykorzystuje predefiniowanej przestrzeni. Jest on szczególnie przydatny podczas pracy na plikach wolnorosnących, których zapis nie odbywa się sekwencyjnie. Chroni także przed brakiem miejsca na rozszerzenie pliku.

Alokacja wieloblokowa

W poprzednich wersjach systemu każdy blok pliku musiał być odrębnie zaalokowany, co skutkowało zwiększoną liczba wywołań funkcji alokującej w przypadku dużych plików (obniżona wydajność) oraz podatnością na fragmentację plików. W przypadku ext4 zastosowano mechanizm wieloblokowej alokacji, przy czym alokator może używać różnych strategii – małe pliki umieszcza blisko siebie (przyspiesza ich odczyt), duże pliki umieszczane są w jak najbardziej ciągłym obszarze pamięci, co pozwala na rozwiązanie problemów wydajności i fragmentacji pojawiające się w poprzednich wersjach systemu.

Alokacja opóźniona

System pozwala także na alokację opóźnioną pozwalającą na zaalokowanie plików dopiero podczas zapisu całego pliku – dane przetrzymywane są dłużej w pamięci podręcznej. Zwiększa to wydajność (dane mogą być alokowane blisko siebie), zmniejsza fragmentację, eliminuje konieczność zapisu takich plików tymczasowych, które okazują się nie być w ogóle potrzebne.

Zwiększona liczba podfolderów

W przypadku ext4 zniesione zostało także ograniczenie liczby obsługiwanych podkatalogów jakie występowało w poprzedniej wersji systemu (w ext3 katalog mógł posiadać maksymalnie 31 998 podfolderów).

Pavel Kroupka

Galeria