System 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; także: wolumin.

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 nośnika pamięci 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 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 Windows NT, APFS w macOS lub ext/ext2/ext3/ext4 i ReiserFS/Reiser4 w Linuksie), ze względu na pewne specyficzne właściwości nadawane plikom (np. atrybut wykonywalności pliku), podobnie jak niektóre nośniki danych (np. ISO 9660 i UDF na CD-ROM/DVD), jednak 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. W przypadku dysków wielkość pojedynczego bloku danych jest wielokrotnością rozmiaru pojedynczego sektora (najczęściej 512 bajtów).

Bloki tworzą strukturę liniową:

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:

Struktura grupy bloków (n – liczba bloków):

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ą przechwytywane 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)

Hierarchia systemu plików 

Prymitywne systemy plikowe posiadały jedną listę plików wchodzących w skład systemu 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 podstawie unikalnej nazwy, ale również ścieżki dostępu:

 Windows 2000/XP: Unix / Linux:

 [C:] [/]
  +- boot.ini +- [boot]
  |                                           +- [etc]
  +- [Documents and Settings] +- [home]
  |   +- [pimpek]                             |   +- [pimpek]
  |       +- [moje dokumenty]                 |       +- [filmy]
  |           +- [filmy]                      |       |   +- twierdza.avi
  |           |   +- twierdza.avi             |       |
  |           |                               |       +- [dokumenty]
  |           +- [teksty]                     |           +- Dokument1.txt
  |               +- Dokument1.txt            |           +- Dokument2.txt
  |               +- Dokument2.txt            |
  |                                           +- [usr]
  |                                           +- [var]
  +- [Program Files]

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/pimpek/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\pimpek\moje dokumenty\filmy\twierdza.avi

Patrz też: ścieżka dostępu, katalog główny.

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, XP, Vista, Seven – NTFS; Windows 95,98,ME – FAT, FAT32 itd.).
 Systemy dziennikujące (lub księgujące, ang. journaling) – systemy z mechanizmem księgującym, zwiększającym bezpieczeństwo danych i umożliwiającym szybkie przywrócenie sprawności systemu po awarii. Mechanizm taki posiadają nowsze systemy plików (np. NTFS, HFS+ lub ext3).
 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 Andrewsa), SMB oraz NCP (Novella).
 Specjalne systemy plików (Wirtualne systemy plików) – nie umożliwiają zarządzania danymi, np. system /proc (w Linuksie) dostarcza interfejs, 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 
Poniższa lista jest podzielona ze względu na oryginalny system, dla którego były zaprojektowane. W chwili obecnej wiele systemów
plików można obsługiwać w więcej niż jednym systemie operacyjnym (np. FAT, ISO 9660, NTFS, ext2, ZFS, SMB, NFS, JFS, XFS, UFS,...)

Unix/Linux 
 SYSV (system plików z Unix-V, firmy AT&T)
 Berkeley Fast File System (FFS) Poprzednik UFS
 UFS (uniksowy system plików pod Solarisa i BSD)
 minix (system prof. Andrew S. Tanenbauma)
 ext (pochodna miniksa)
 ext2 (second extended file system, ulepszony ext)
 ext3 (bazujący na ext2, z księgowaniem oraz szybszymi operacjami na katalogach)
 ext4 (bazujący na ext3, z lepszą alokacją miejsca na dysku, zwiększonymi limitami, czy możliwością defragmentacji online)
 btrfs (nowoczesny system plików z księgowaniem, migawkami, klonowaniem, zarządzaniem wolumenami wzorowany na ZFS)
 ReiserFS (Linuksowy system plików z księgowaniem z firmy Namesys)
 Reiser4 (system plików trzymający wszystkie dane w zmodyfikowanych B-drzewach)
 JFS (system plików IBM-a)
 XFS (system plików SGI)
 ADFS (Acorn StrongARM)
 Xia (pochodna miniksa)
 cramfs
 filecore FS (pod BSD)
 GNOME Storage (linuksowy system oparty na bazie danych)
 LogFS, UBIFS, NILFS – systemy plików dla pamięci flash

Sieciowe systemy plików (protokoły) 
 NFS (sieciowy system plików firmy Sun)
 AndrewFS (AFS) (sieciowy system plików pod Uniksa)
 xFS (sieciowy system plików)
 SMB (LAN Manager, smbfs, cifs – sieciowy system plików pod Windowsa)
 NCP (sieciowy system plików Novella)
 WebDAV (oparty na HTTP)

Sun Solaris 
 UFS – Unix File System – podstawowy system plików Solarisa
 ZFS system plików opracowany przez firmę Sun dla systemu Solaris (dostępny również w systemie FreeBSD)
 VxFS komercyjny system plików opracowany przez firmę Veritas Software, dostępny również pod Linux

DOS 
 FAT (FAT12) (Tablica alokacji plików, dyskietkowy)
 FAT16

Windows 
 FAT32
 exFAT (Extended File Allocation Table)
 NTFS (system plików z księgowaniem pod Windows NT i nowsze)
 WinFS (system plików oparty na bazie danych i systemie plików NTFS)
 ReFS

Amiga 
 OFS (Amiga Old File System)
 Amiga Fast File System (FFS)
 Professional File System (PFS)
 Smart File System (SFS)

Apple/Macintosh 
 Apple DOS
 Apple SOS
 Apple ProDOS
 MFS (Macintosh File System)
 HFS (Hierarchical File System)
 HFS+
 HFSX
 APFS

OS/2 
 HPFS (High Performance File System) (dostępny również w systemach Windows NT do wersji 3.51)
 JFS (Journaled File System)

BeOS 
 BeFS (Be File System)
 OpenBFS

CD-ROM/DVD 
 ISO9660
 Rockridge (rozszerzenie ISO9660 dla Unix)
 Joliet (rozszerzenie standardu ISO9660 firmy Microsoft)
 UDF (Universal Disk Format)

Inne 
 AtheOS File System (AFS) (system plików systemu operacyjnego AtheOS, pochodna Be File System)

Zobacz też 

 księgowanie
 proc
 FHS – standard rozmieszczenia plików i katalogów w GNU/Linuksie
 adres bezwzględny

Linki zewnętrzne 
 Porównanie uniksowych systemów plików – praca w ramach Systemów Operacyjnych na Uniwersytecie Warszawskim
 Filesystems HOWTO – dokument z roku 2000 opisujący różne systemy plików (raczej z uniksowego punktu widzenia)