SYSTEMY PLIKÓW
System plików - metoda przechowywania plików, zarządzania plikami, informacjami o tych plikach, tak by dostęp do plików i danych w nich zgromadzonych był łatwy dla użytkownika systemu. Systemy plików stosuje się dla różnych nośników danych, takich jak dyski, dyskietki, a także w strumieniach danych, sieciach komputerowych, pamięciach. We współczesnych systemach operacyjnych bezpośrednie operowanie na danych w plikach zarezerwowane jest tylko dla systemu operacyjnego, aplikacje mają dostęp tylko do operacji na plikach i mają zabroniony bezpośredni dostęp do nośnika danych.
Z formalnego punktu widzenia system plików to reguły umieszczania na nośniku danych abstrakcyjnych, danych oraz informacji umożliwiających przechowywanie tych danych, łatwy i szybki dostęp do informacji o danych oraz do tych danych, manipulowania nimi, a także sposobach usuwania ich.
Większość systemów operacyjnych posiada własny (macierzysty) system plików, rozwijany równolegle z nim (np. FAT w DOS-ie, NTFS w Microsoft Windows NT lub ext/ext2/ext3 i ReiserFS/Reiser4 w Linuksie).
ze względu na pewne specyficzne właściwości nadawane plikom (np. atrybut wykonywalności pliku lub atrybut "tylko do odczytu" jak w niektórych systemach plików używanych na nośnikach danych np. ISO 9660 na CD-ROM i UDF na DVD), sam system plików jest niezależny od nich.
Same systemy operacyjne (w szczególności Unix i jego pochodne) potrafią obsługiwać wiele systemów plików.
ORGANIZACJA DANYCH
Nośniki danych, takie jak dyski twarde, dyskietki posiadają blokową strukturę danych, znaczy to, że dane są w nich przechowywane w postaci bloków, a blok musi być w całości zapisywany i odczytywany, bloki te nazywane są sektorami. W przypadku dysków i dyskietek mają taką samą wielkość (przeważnie 512 bajtów).
Sektor - najmniejsza adresowalna jednostka zapisu danych na dyskach twardych, dyskietkach i innych nośnikach danych. Wielkość sektora jest potęgą liczby 2 i z reguły wynosi 512 bajtów.
Sektor jest częścią ścieżki (track) dysku.
Klaster dyskowy - (ang. cluster, allocation unit) - jeden lub więcej sektorów na wymiennym lub stałym nośniku danych komputerowych, zarezerwowany dla danego systemu operacyjnego jako podstawowa jednostka przechowywania plików. W obszarze jednego klastra można zapisać tylko jeden plik, nawet jeśli będzie on wypełniał klaster tylko w niewielkim procencie. Większe pliki zajmują oczywiście większą liczbę klastrów.
Klastry wymyślono, aby zmniejszyć wielkość przestrzeni adresowej dla systemu plików, a przez to zmniejszyć na nią zapotrzebowanie pamięci komputera i przyśpieszyć jego działanie (liczba klastrów jest wielokrotnie mniejsza od liczby sektorów). W nowoczesnych systemach operacyjnych istnieje możliwość definiowania klastrów o zróżnicowanej wielkości, przewidując procentowy udział plików małych i dużych. Takie rozwiązanie umożliwia większą efektywność wykorzystania powierzchni nośnika.
Bloki tworzą strukturę liniową:
Blok 0 |
Blok 1 |
Blok 2 |
Blok 3 |
… |
Blok n |
Systemy operacyjne łączą bloki w klastry. Klaster składa się z kilku bloków (w nowszych systemach może to być 8 lub więcej bloków).
Dyskowy system plików część pamięci wykorzystuje na tzw. sektor rozruchowy (boot sector), który nie stanowi zasadniczej części systemu plików i jest używany do rozruchu systemu. Ponadto systemy plików przechowują listy wszystkich klastrów (oraz informacje do których plików one należą) w tzw. tablicach alokacji.
Przykład alokacji w linuksowym systemie plików ext2:
Blok rozr. |
grupa bloków 0 |
grupa bloków 1 |
grupa bloków 2 |
grupa bloków 3 |
… |
grupa bloków n |
Struktura grupy bloków (n - liczba bloków):
... |
grupa bloków 1 |
Superblok (1) |
Deskryptory grupy (n) |
Mapa bitowa bloków z danymi (1) |
Mapa bitowa i-węzłów (1) |
Tablica i-węzłów (n) |
Bloki z danymi (n) |
grupa bloków 3 |
... |
PODSTAWOWE OPERACJE
Jeżeli program chce wykonać jakąś operację na pliku robi to poprzez system plików. W systemie Unix oraz jego pochodnych takie operacje realizowane są za pomocą wywołań systemowych. Wywołania te są przychwytywane przez wirtualny system plików (VFS), odpowiednio przetwarzane i kierowane do zasadniczego systemu plików. Zastosowanie wirtualnego systemu plików powoduje, że program stosuje te same wywołania systemowe niezależnie od systemu plików.
Do najbardziej podstawowych wywołań systemowych należą:
otwieranie pliku (open);
zamykanie pliku (close);
tworzenie pliku (create);
usuwanie pliku (unlink);
tworzenie katalogu (mkdir);
usuwanie katalogu (rmdir);
czytanie z pliku (read);
pisanie do pliku (write)
Plik (ang. file), jest to nazwany ciąg danych (inaczej zbiór danych), o skończonej długości, posiadający szereg atrybutów i stanowiący dla systemu operacyjnego całość.
Atrybuty plików
Atrybutami mogą być:
rozmiar,
nazwa,
data utworzenia, modyfikacji, ostatniego dostępu, usunięcia itp.
właściciel i grupa pliku,
prawa (zapisu, odczytu itd. - mogą być odmienne dla różnych grup użytkowników),
położenie, czyli wskaźnik do miejsca na urządzeniu, na którym plik został zapisany (często tablica wskaźników),
czy jest to katalog, plik wykonywalny.
Atrybuty zależą od systemu operacyjnego, a dokładniej od jego systemu plików.
Typy plików.
Pliki dzielimy na kilka typów:
katalogi (stosuje się też nazwy foldery lub kartoteki) - (ang. directory), pliki zawierające spis odwołań do innych plików (w tym także do katalogów),
dowiązania symboliczne - (ang. symbolic link) odwołanie do innego pliku; większość operacji na tego typu plikach będzie w rzeczywistości wywoływane na plikach, na które one wskazują
kolejki FIFO (ang. First In, First Out, w skrócie FIFO), gniazda (ang. sockets), strumienie danych itd. - realizujące bardziej złożone zadania, występują nie w każdym systemie
pliki wykonywalne (ang. executable files), skrypty (ang. scripts), pliki wsadowe (ang. batch files) - zawierające program do wykonania lub polecenia dla interpretera (często powłoki)
Ponadto system DOS rozróżnia pliki binarne i tekstowe (ASCII). W systemach uniksowych pliki binarne i tekstowe są tożsame.
HIERARCHIA SYSTEMU PLIKÓW
Prymitywne systemy plikowe posiadały jedną listę plików wchodzących w skład sytemu plików. W miarę postępu systemy plików zostały unowocześnione i współczesne systemy plików oprócz głównej listy (katalogu głównego) zawierają także podlisty (podkatalogi) które również mogą zawierać dalsze podlisty (podkatalogi). W ten sposób rozwinęło się pojęcie katalogów nadrzędnych oraz katalogów podrzędnych.
Katalog, w którym znajduje się plik jest nadrzędny (bezpośrednio) względem tego pliku. Katalog jest podrzędny (bezpośrednio) względem innego katalogu w którym się znajduje.
W ten sposób powstało pojęcie drzewiastej hierarchii systemu plików, w której każdy katalog może zawierać podkatalogi, które mogą zawierać dalsze podkatalogi. Powstaje w ten sposób struktura, która wygląda jak "odwrócone drzewo".
Systemy, które mają taką strukturę nazywają się hierarchicznymi systemami plików. W takich systemach plik identyfikowany jest nie tylko na postawie unikalnej nazwy ale również ścieżki dostępu:
Windows 2000/XP: Unix / Linux:
[Dysk C:] [Katalog główny]
+- boot.ini +- [boot]
| +- [etc]
+- [Documents and Settings] +- [home]
| +- [ciapek] | +- [ciapek]
| +- [moje dokumenty] | +- [filmy]
| +- [filmy] | | +- twierdza.avi
| | +- twierdza.avi | |
| | | +- [dokumenty]
| +- [teksty] | +- Dokument1.txt
| +- Dokument1.txt | +- Dokument2.txt
| +- Dokument2.txt |
| +- [usr]
| +- [var]
+- [Programy]
Format podanej ścieżki zależy od systemu operacyjnego. W większości systemów (Unix, Linux, Mac OS) katalog jest reprezentowany przez ukośnik (ang. slash "/"), pełna ścieżka do pliku twierdza.avi (przykład powyżej) wygląda następująco:
/home/ciapek/filmy/twierdza.avi
W przypadku systemów Windows oraz DOS katalog jest reprezentowany przez lewy ukośnik (ang. backslash "\"), a pełna ścieżka do pliku twierdza.avi w tym systemie wygląda następująco:
C:\Documents and Settings\ciapek\moje dokumenty\filmy\twierdza.avi
Dla systemu GNU/Linux powstały dwa formalne standardy określające układ katalogów w głównym systemie plików: FSSTND i FHS.
RODZAJE SYSTEMÓW PLIKÓW
Dyskowy system plików - "normalny" system plików pozwalający na zarządzanie danymi na stacjonarnych nośnikach danych, takich jak twarde dyski. Każdy system posiada swój własny system plików (np. Linux - ext2, Windows NT - NTFS itd.).
Sieciowy system plików - w zasadzie jest to protokół umożliwiający przesyłanie poleceń do serwera przez sieć oraz wykonywanie operacji na odległość. Informacje są z powrotem przekazywane z serwera do klienta. Dzięki takiemu rozwiązaniu użytkownik nie widzi żadnej różnicy między pracą na sieciowym systemie plików a pracą na lokalnym systemie plików. Najbardziej znane to NFS, Coda, AFS (System plików Andrew'sa), SMB oraz NCP (Novell'a).
Specjalne systemy plików (Witrualne systemy plików) - nie umożliwiają zarządzania danymi, np. system /proc (w Linuksie) dostarcza interfejsu, który umożliwia dostęp do niektórych struktur jądra.
Systemy oparte na bazie danych - systemy plików, w których pliki są identyfikowane na podstawie swojej charakterystyki (np. autora, typu czy tematu, którego dotyczą) - jak w bazach danych.
POPULARNE SYSTEMY PLIKÓW
Unix/Linux
minix (system prof. Andrew S. Tanenbauma)
ext (pochodna miniksa)
ext2 (second extended file system, ulepszony ext)
ext3 (bazujący na ext2, z księgowaniem)
FFS Poprzednik UFS
ReiserFS (Linuksowy system plików z księgowaniem autorstwa Hansa Reisera)
Reiser4
JFS (system plików IBM'a)
UFS (uniksowy system plików pod Solarisa i BSD)
XFS
xFS (sieciowy system plików)
NFS (sieciowy system plików firmy Sun)
SYSV (system plików z Unix-V, firmy AT&T)
ADFS (Acorn StrongARM)
GNOME Storage (linuksowy system oparty na bazie danych)
Xia (pochodna minixa)
AndrewFS (AFS) (sieciowy system plików pod Uniksa)
smbfs (LAN Manager)
ncpfs (sieciowy system plików Novella)
cramfs
filecore FS (pod BSD)
DOS
FAT (FAT12) (Tablica alokacji plików, dyskietkowy)
FAT16
FAT32
Windows
VFAT (Virtual FAT)
NTFS (system plików z księgowaniem pod Windows NT i nowsze)
WinFS (system plików oparty na bazie danych)
Amiga
OFS (Amiga Old File System)
FFS (Amiga Fast File System)
Apple/Macintosh
Apple DOS
Apple SOS
Apple ProDOS
MFS (Macintosh File System)
HFS (Hierarchical File System)
HFS+
HFSX
OS/2
HPFS (High Performance File System)
JFS (Journaled File System)
BeOS
BeFS (Be file system)
OpenBFS
CD-ROM/DVD
ISO9660
Joliet (system firmy Microsoft)
Rockridge (odpowiednik ISO9660 dla Unix)
UDF (Universal Disk Format)
Inne
AtheOS FS (AFS) (system plików systemu operacyjnego AtheOS, pochodna BFS)
SIECIOWE SYSTEMY PLIKÓW
Sieciowy system plików (w przeciwieństwie do "normalnego" systemu plików) nie sankcjonuje i nie determinuje fizycznego zapisu danych na dysku, lecz umożliwia współdzielenie danych przez sieć. Właściwie należałoby nazywać go protokołem, a nie systemem plików.
Sieciowe systemy plików:
Andrew FS,
Coda,
NFS,
SMB.
Andrew File System - rozproszony sieciowy system plików, stworzony w Carnegie Mellon University jako część projektu Andrew. Nazwa pochodzi od Andrew Carnegie'go i Andrew Mellona.
AFS ma przewagę nad tradycyjnymi sieciowymi systemami plików, głównie w kwestiach bezpieczeństwa i skalowalności. Produkcyjne instalacje AFS nierzadko przekraczają 50000 klientów. AFS stosuje uwierzytelnianie protokółem Kerberos i listy kontroli dostępu na katalogach dla użytkowników i grup. Buforowanie po stronie klienta zwiększa wydajność systemu i pozwala na ograniczony dostęp w przypadku awarii serwera lub sieci.
Znaczącą cechą AFS jest wolumin, czyli drzewo plików i podkatalogów. Woluminy tworzone są przez administratorów i podłączane do poszczególnych ścieżek w komórce AFS. W stworzonym woluminie użytkownicy systemu plików mogą tworzyć katalogi i pliki w zwykły sposób, nie zajmując się jego fizyczną lokalizacją. W razie potrzeby administrator może przenieść wolumin na inny serwer lub dysk bez potrzeby informowania o tym użytkowników: operacja może przebiegać w czasie, kiedy wolumin jest używany.
Woluminy mogą być też zreplikowane do jedenastu kopii do odczytu. Kiedy aplikacja kliencka korzysta z plików tylko do odczytu, dane pobiera się z jednej z tych kopii. Jeśli w jakimś momencie przestanie być dostępna, aplikacja poszuka innej. Analogicznie, użytkownicy tych danych nie muszą się zajmować fizyczną lokalizacją tych kopii, a administratorzy mogą je tworzyć i przemieszczać w razie potrzeby. Zestaw poleceń AFS gwarantuje, że woluminy do odczytu zawierają dokładną kopię oryginalnego woluminu typu odczyt-zapis.
Przestrzeń nazw na stacji roboczej używającej AFS jest podzielona na wspólną (ang. shared) i lokalną (ang. local). Wspólna przestrzeń nazw jest identyczna na wszystkich stacjach, zaś lokalne są różne i zawierają pliki tymczasowe potrzebne podczas uruchamiania. Obie przestrzenie nazw mają strukturę hierachiczną. Każde poddrzewo w przestrzeni wspólnej jest przypisane do jednego serwera zwanego nadzorcą. Pliki z przestrzeni wspólnej są na żądanie buforowane na stacji lokalnej. Polecenia odczytu i zapisu pliki są wykonywane na lokalnej kopii. Jeśli buforowany plik został zmodyfikowany, jest kopiowany do nadzorcy po zamknięciu. Spójność bufora jest utrzymywana przez mechanizm odwołań (ang. callback). Kiedy plik jest buforowany nadzorca odnotowuje to i informuje klienta, kiedy jest on modyfikowany przez kogoś innego.
Andrew File System miał duży wpływ na wersję 4 popularnego systemu NFS. Trzy główne implementacje AFS to: Transarc(IBM), OpenAFS i Arla. Jest on również poprzednikiem systemu plików Coda.
Coda to rozproszony, sieciowy system plików, wywodzący się z AFS2 (Andrew FS). Testowy serwer Cody ma adres testserver.coda.cs.cmu.edu. Na jej bazie powstał między innymi eksperymentalny system uruchamiania oprogramowania dla Linuksa, Konvalo, którego serwer znajduje się pod adresem konvalo.org.
Network File System (NFS) to oparty o UDP (ang. User Datagram Protocol - Datagramowy Protokół Użytkownika to jeden z podstawowych protokołów internetowych. Umieszcza się go w warstwie czwartej (transportu) modelu OSI.) protokół zdalnego udostępniania systemu plików. NFS jest de facto standardowym sieciowym systemem plików na Uniksach. Inne protokoły udostępniające taką usługę, jak np. Coda, nie zyskały dużej popularności. NFS został opracowany przez Sun Microsystems. Z NFS wiąże się wiele problemów - przede wszystkim bardzo trudno zapewnić, że dana operacja została wykonana. Scenariusz prawidłowego działania to:
żądanie zostaje wysłane przez klienta,
żądanie zostaje odebrane przez serwer,
operacja zostaje wykonana,
potwierdzenie zostaje wysłane przez serwer,
potwierdzenie zostaje odebrane przez klienta.
Niestety jeśli nastąpi krach po odebraniu żądania, a przed wysłaniem potwierdzenia to klient nie może się w żaden sposób dowiedzieć czy operacja została wykonana. Istnieją serwery NFS zarówno w przestrzeni użytkownika jak i w przestrzeni jądra (np. w nowych Linuksach).
Server Message Block (SMB) to protokół służący udostępnianiu zasobów komputerowych, m.in. drukarek czy plików. SMB jest protokołem typu klient-serwer, a więc opiera się na systemie zapytań generowanych przez klienta i odpowiedzi od serwera. Wyjątkiem od tej zasady jest mechanizm tzw. oplocków (opportunistic lock), w którym to serwer może wygenerować "nieproszony" przez klienta sygnał informujący o zerwaniu wcześniej założonego oplocka (blokady). Niemniej jednak, chociaż sam protokół ma charakter klient-serwer, to z racji tego, że najczęściej maszyny klienckie dysponują także funkcjami serwerowymi (udostępnianie plików) to sieci SMB nabierają charakteru sieci peer-to-peer.
Początki protokołu sięgają połowy lat 80., kiedy to w firmie IBM opracowano jego wczesną wersję (IBM PC Network SMB Protocol). W kolejnych latach protokół był nadal rozwijany, głównie przez firmę Microsoft. W późniejszych latach SMB stał się podstawą Otoczenia sieciowego w systemach Windows.
Protokół SMB wykorzystuje do działania dwa protokoły niższych rzędów - protokół warstwy sesji NetBIOS (który sam wykorzystuje jako warstwę transportu TCP/IP albo DECnet albo IPX/SPX) lub protokół nierutowalny NetBEUI będący protokołem warstw sieci, transportu i sesji. Systemy Microsoft Windows potrafią korzystać z SMB, a co za tym idzie NetBIOS, zarówno poprzez TCP/IP (obecnie najpopularniejsza metoda) jak i poprzez IPX/SPX) NetBEUI (stosowany tylko w małych sieciach). Samba instalowana na systemach Unix, korzysta tylko z SMB poprzez TCP/IP.
Identyfikacja komputerów w sieciach SMB odbywa się za pomocą ich nazw NetBIOS (nazwą jest ciąg znaków, nie dłuższy niż 15 znaków) lub za pomocą mechanizmów protokołów "podległych" SMB, np. poprzez adres IP czy nazw DNS, gdy SMB wykorzystuje protokół TCP do transportu danych.
Pierwotna wersja protokołu - Core Protocol - użyta w pierwszej implementacji PC NETWORK PROGRAM 1.0 umożliwiała podstawowe operacje takie jak:
otwieranie i zamykanie plików
otwieranie i zamykanie drukarek
odczyt i zapis z/do plików
tworzenie i kasowanie plików/katalogów
przeszukiwanie katalogów
ustawianie i odczytywanie atrybutów plików
blokowanie i udostępnianie wybranych fragmentów plików
Z czasem powstawały kolejne: Core Plus Protocol, Lan Manager 1.0 (LANMAN 1.0), LANMAN 2.0, LANMAN 2.1 (Windows for Workgroups), CIFS 1.0/ NT Lan Manager 1.0.
Najczęściej z implementacją protokołu SMB spotykamy się przy okazji styczności z systemem Microsoft Windows. Każda wersja począwszy od Windows 3.11 for Workgroups zawiera implementację SMB. Jednak nie są to jedyne implementacje. Wśród innych należy wymienić: Samba (dla systemów Unix, open source) oraz produkty komercyjne dla systemów SCO UNIXware, SCO OpenServer, Solaris, HP-UX, OS/2 i innych.
SMB oferuje dwa modele bezpieczeństwa:
share level - polegający na zabezpieczeniu zasobu i znajdujących się w nim plików hasłem. Znajomość samego hasła wystarcza do uzyskania dostępu. Jedyny model np. w Windows for Workgroups, Windows 95/98/Me oraz jako jedna z możliwości w Sambie.
user level - oparty na zabezpieczaniu konkretnych plików poprzez prawa dostępu przyporządkowane konkretnym użytkownikom. Znajomość użytkownika i hasła jest warunkiem do uzyskania dostępu do zasobu. Model ten pojawił się w LANMAN-ie 1.0. Jedyny model np. w Windows z linii NT czyli Windows NT 3.51/4.0/2000/XP/2003 oraz jako jedna z możliwości w Sambie.
Inną kwestią dotyczącą bezpieczeństwa jest podział na grupy robocze oraz domeny.
Grupa robocza to zespół komputerów, w którym każdy komputer trzyma "u siebie" swoje poufne dane, zaś proces logowania, autoryzacji i uwierzytelnienia przebiega lokalnie. Rozwiązanie preferowane w sieciach domowych i w małych firmowych.
Domena natomiast prezentuje podejście scentralizowane do kwestii przechowywania poufnych danych - w każdej domenie funkcjonuje kontroler domeny (jeden główny oraz ewentualnie kilka zapasowych), który je przechowuje. Procesy autoryzacji, autentykacji przeprowadzane są więc centralnie. Rozwiązanie preferowane w większych sieciach firmowych i korporacyjnych
Księgowanie lub kronikowanie (ang. journalling) to w informatyce termin związany z konstrukcją baz danych oraz systemów plików. Przy użyciu księgowania dane nie są od razu zapisywane na dysk, tylko zapisywane w swoistym dzienniku/kronice (ang. journal). Dzięki takiemu mechanizmowi działania zmniejsza się prawdopodobieństwo utraty danych: jeśli utrata zasilania nastąpiła w trakcie zapisu - zapis zostanie dokończony po przywróceniu zasilania, jeśli przed - stracimy tylko ostatnio naniesione poprawki, a oryginalny plik pozostanie nietknięty.
Systemami plików z księgowaniem są:
BeFS - system plików systemu BeOS
ext3 - dodający mechanizmy księgowania do popularnego linuksowego ext2
JFS - zaprojektowany przez firmę IBM, przeniesiony do Linuksa
NTFS - system plików systemów Microsoft Windows NT/XP/2000/2003
ReiserFS - system plików stworzony przez Hansa Reisera z Namesys
XFS - system zaprojektowany przez firmę SGI dla swego systemu IRIX, ostatnio przeniesiony do Linuksa