Systemy plików UNIX Krzysztof Ratkowski Mateusz Wosiński
Po co nam system plików? System plików umożliwia logiczny podział urządzeń służących do przechowywania danych. Pozwala to zbudować strukturę, przez którą użytkownik może odwołać się do określonego pliku w systemie.
Cechy charakterystyczne Hierarchiczna struktura Zgodne traktowanie plików danych Możliwość tworzenia i niszczenia plików Dynamiczne powiększanie plików Ochrona plików danych Traktowanie urządzeń zewnętrznych jak plików.
Wirtualny system plików UNIX potrafi obsługiwać wiele różnych formatów systemów plików. Wirtualny system plików przy dostępie do danych w różnych formatach używa zunifikowanego interfejsu, dzięki czemu z poziomu użytkownika dodanie obsługi nowego formatu danych jest stosunkowo proste. Taka koncepcja umożliwia implementowanie obsługi zarówno takich formatów danych, które są zapisane na fizycznym nośniku (jak etx2), takich, które są dostępne za pośrednictwem sieci (jak nfs), jak i takich, które są tworzone dynamicznie, na żądanie użytkownika (jak proc).
Struktura systemu plików
Procesy odwołują się do plików za pomocą zbioru funkcji systemowych. Zawiera on zarówno funkcje obsługujące istniejące pliki, a wśród nich open(), read(), write() i close(), jak i funkcje służące do tworzenia nowych plików, jak creat(). Obejmuje on również funkcje wykorzystywane przy implementacji potoków: pipe() i dup().
Struktury danych VFS VFS reprezentuje podejście obiektowe do systemu plików. Podstawowe obiekty, zapewniające jednolity interfejs do systemów plików o różnych formatach, to: Struktura files - przechowuje lokalne dla procesu informacje o deskryptorach otwartych plików i sposobie obsługi plików. Ten obiekt istnieje jedynie w pamięci operacyjnej. Struktura file - przechowuje informacje o związku procesu z otwartym plikiem. Ten obiekt istnieje jedynie w pamięci operacyjnej. Struktura dentry - przechowuje informacje o związku między pozycją w katalogu a plikiem. Każdy dyskowy system plików przechowuje tę informację na dysku we właściwy sobie sposób.
Struktury danych VFS I-węzeł to metryczka pliku zawierająca wszystkie podstawowe informacje o pliku. Dla dyskowych systemów plików obiekt ten ma swój odpowiednik w postaci bloku kontrolnego pliku, przechowywanego na dysku. Z każdym i-węzłem jest związany numer i-węzła, który jednoznacznie identyfikuje plik w systemie plików. Struktura address_space odwzorowuje wszystkie strony jednego pliku (czyli obraz przestrzeni adresowej tego pliku w pamięci operacyjnej) w bloki dyskowe (czyli obraz przestrzeni adresowej tego pliku na dysku). Superblok przechowuje informacje o zamontowanym systemie plików. Dla dyskowych systemów plików obiekt ten ma swój odpowiednik w postaci bloku kontrolnego systemu plików, przechowywanego na dysku.
Przykład
Schemat drzewa
Programy w systemie UNIX nie znają rzeczywistego formatu, w jakim jądro przechowuje pliki. Widoczne są one jako strumienie bajtów, a poszczególne programy same interpretują dany strumień. Pod tym względem, również katalogi niczym nie różnią się od zwykłych plików poza tym, że zawierają nazwy plików w nich zawartych, co pozwala programom takim jak ls dostać się do zapamiętanych plików
Prawa dostępu Pozwolenie na korzystanie z pliku określają prawa dostępu. Są one pogrupowane dla trzech rodzajów użytkowników: Właściciela Grupy Wszystkich użytkowników.
Prawa dostępu Są też trzy rodzaje praw dostępu: prawo odczytu prawo zapisu prawo wykonania. Użytkownik może tworzyć pliki w katalogu, do którego ma prawa do zapisu
I-węzły zapisywane są w pewnym wydzielonym obszarze dysku. W największym skrócie każdy plik reprezentowany jest przez tzw. i-węzeł (i-node). I-węzły zapisywane są w pewnym wydzielonym obszarze dysku. To właśnie w nich zapisane są takie informacje jak właściciel pliku, grupa, prawa dostępu, czas utworzenia pliku, ostatniej modyfikacji i ostatniego dostępu, tytułowy typ pliku, jego rozmiar no i oczywiście najważniejsze - numer i-węzła.
Dalej o i-węzłach W i-węźle nie jest zapisana nazwa pliku. Mogą się tu za to znaleźć informacje o blokach dyskowych, w których zapisano znajdujące się w pliku dane, ale nie jest to konieczne. Odnajdywanie plików po numerach i-węzłów byłoby co najmniej żmudne, dlatego utworzono dodatkowe struktury zwane katalogami (katalogi dyskowe).
Katalogi Katalog jest plikiem specjalnego typu, w którym umieszczono listę nazw plików wraz z numerami i-węzłów. Do jednego i-węzła mogą istnieć odwołania z różnych katalogów, dlatego zapisuje się w nim informację o liczbie takich dowiązań. Gdy liczba ta osiągnie zero, plik można bezpiecznie skasować. Oznacza to, że jeden plik może mieć kilka nazw w jednym lub w wielu katalogach. Jest to istotna różnica pomiędzy systemami plików klasy UNIX a PC. Informację o liczbie dowiązań pokazuje polecenie ls -l w drugiej kolumnie.
I-węzły – jak to działa? Kiedy użytkownik, lub proces systemowy zgłasza żądanie dostępu do pliku, dokonuje się kilka operacji: podsystem plików otrzymuje komendę otwarcia pliku, odczytu lub zapisu. Uzyskuje dostęp do deskryptora plików w celu uzyskania informacji potrzebnych do dostępu do tablicy plików
I-węzły – jak to działa? Tablica plików wskazuje na odpowiedni i-węzeł Gdy podsystem plików ma informacje i-węzła, może już zająć się zapytaniem użytkownika lub procesu i udzielić dostępu do określonego pliku.
Trzy tablice Jądro systemu UNIX oprócz tablicy i-węzłów utrzymuje jeszcze dwie dodatkowe tablice: Tablicę deskryptorów plików użytkownika oraz tablicę plików. Tablica plików jest globalną strukturą jądra, natomiast tablica deskryptorów jest przydzielana każdemu procesowi niezależnie. Gdy proces otwiera lub tworzy nowy plik, jądro przydziela w każdej tablicy miejsce odpowiadające i-węzłowi.
Informacje pamiętane w tych trzech tablicach określają stan pliku i dostęp do niego. deskryptory pliki i-węzły
Budowa systemu plików System plików składa się z ciągu bloków logicznych, zawierających 512, 1024, 2048, ... bajtów. Rozmiar bloku logicznego jest ten sam wewnątrz danego systemu plików, ale może różnić się w ramach danej konfiguracji systemu.
Struktura systemu plików Blok systemowy (boot block) zajmuje początek systemu plików i może zawierać program bootujący czytany do pamięci komputera w celu zainicjowania systemu operacyjnego. Choć do załadowania systemu wystarczy jeden taki blok, to jednak każdy system plików ma taki blok zarezerwowany (może on być pusty).
Struktura systemu plików Blok identyfikacyjny (super block) – opisuje stan systemu plików. Zawiera następujące informacje: - nazwę systemu plików - rozmiar systemu plików - adres pierwszego bloku danych - licznik i-węzłów
Super block - cd - listę i-węzłów - licznik wolnych bloków danych - datę ostatniej aktualizacji bloku. Dla każdego zamontowanego systemu plików blok ten przechowywany jest w pamięci operacyjnej, co pozwala znacznie przyśpieszyć dostęp. Z drugiej strony prowadzi to do pewnej niekonsekwencji pomiędzy zawartością tego bloku i danymi w systemie plików.
Super block - cd Ta niespójność spowodowała powstanie komendy systemowej sync, która wymusza zapis bloków identyfikacyjnych z pamięci do odpowiednich systemów plików na dyskach. Na wielu systemach, proces systemowy cron automatycznie uruchamia tę komendę w celu zminimalizowania szkód powstałych w wyniku przypadkowego zamknięcia systemu (np. awarii zasilania)
Struktura systemu plików Lista i-węzłów – zawiera i-węzły umieszczone w systemie plików za blokiem identyfikacyjnym. Administrator określa rozmiar tej tablicy podczas konfiguracji systemu. Jeden z i-węzłów reprezentuje korzeń systemu plików i udostępnia strukturę podczas wykonywania funkcji systemowej mount.
Struktura systemu plików Bloki danych zaczynają się od końca listy i-węzłów i zawierają dane z plików oraz dane administracyjne. Przydzielony blok danych może należeć do tylko jednego pliku w systemie plików.
Kronikowanie Technika polegająca na zapisywaniu dokonywanych w systemie plików zmian zamiast uaktualniania konkretnych danych. Zabezpiecza system plików przed utratą spójności w wyniku awarii zasilania. Przy użyciu kronikowania zmiany dokonywane w systemie plików są najpierw zapisywane w tzw. kronice lub dzienniku (ang. journal), a dopiero później na dysku.
Kronikowanie Jeśli awaria zasilania nastąpiła w trakcie ostatecznego zapisu na dysk, to zostanie on dokończony po ponownym starcie systemu. Jeśli prądu zabraknie w czasie edycji dziennika, to system plików nie zostanie w ogóle naruszony.
Kronikowanie Systemy z kronikowaniem są powszechnie używane przez różne serwerowe systemy operacyjne - od "poważnych" UNIX-ów, takich jak Solaris (system plików Veritas) czy SGI IRIX (XFS), poprzez Linuksa (ext3, JFS IBM-a, XFS i RaiserFS), BSD (LFS), OS/2 (JFS) czy BeOS-a (BeFS), aż po Windows 2000/XP (NTFS 5.0).
To już koniec…