Vysokoúrovňové pojednání o koncepcích souborového systému Linux

Tento článek je zamýšlen jako velmi vysokoúrovňové pojednání o koncepcích souborového systému Linux. Není zamýšlen jako nízkoúrovňový popis fungování konkrétního typu souborového systému, například EXT4, ani jako výukový program příkazů souborového systému.

Každý počítač pro všeobecné použití potřebuje ukládat data různých typů na pevný disk (HDD) nebo nějaký ekvivalent, například paměťovou kartu USB. Existuje pro to několik důvodů. Za prvé, paměť RAM ztrácí svůj obsah, když je počítač vypnut. Existují nevolatilní typy paměti RAM, které mohou zachovat data v ní uložená i po odpojení napájení (například paměť flash RAM, která se používá v paměťových kartách USB a polovodičových discích), ale paměť flash RAM je mnohem dražší než standardní, volatilní paměť RAM, jako je DDR3 a další podobné typy.

Druhým důvodem, proč je třeba data ukládat na pevné disky, je to, že i standardní paměť RAM je stále dražší než místo na disku. Náklady na paměť RAM i na disky rychle klesají, ale paměť RAM stále vede, pokud jde o náklady na jeden bajt. Rychlý výpočet nákladů na jeden bajt na základě nákladů na 16 GB paměti RAM oproti 2TB pevnému disku ukazuje, že paměť RAM je v přepočtu na jednotku asi 71krát dražší než pevný disk. Typické náklady na operační paměť RAM se dnes pohybují kolem 0,0000000043743750 USD za bajt.

Pro krátkou historickou poznámku, která uvede současné náklady na operační paměť v perspektivě, v úplných počátcích výpočetní techniky byl jeden typ paměti založen na bodech na obrazovce CRT. Ta byla velmi drahá a stála přibližně 1,00 USD za bit!

Definice

O souborových systémech můžete slyšet mluvit různými a matoucími způsoby. Samotné slovo může mít více významů a vy možná budete muset správný význam rozeznat z kontextu diskuse nebo dokumentu.

Pokusím se definovat různé významy slova „souborový systém“ na základě toho, jak jsem vypozoroval jeho používání za různých okolností. Všimněte si, že i když se snažím dodržet standardní „oficiální“ významy, mým záměrem je definovat tento pojem na základě jeho různých použití. Tyto významy budou podrobněji rozebrány v následujících částech tohoto článku.

  1. Celá adresářová struktura systému Linux začínající v horním (/) kořenovém adresáři.
  2. Konkrétní typ formátu pro ukládání dat, například EXT3, EXT4, BTRFS, XFS atd. Linux podporuje téměř 100 typů souborových systémů, včetně některých velmi starých i nejnovějších. Každý z těchto typů souborových systémů používá vlastní struktury metadat, které definují způsob ukládání dat a přístupu k nim.
  3. Odddíl nebo logický svazek naformátovaný určitým typem souborového systému, který lze připojit k určenému přípojnému bodu souborového systému Linux.

Základní funkce souborového systému

Uložení dat na disku je nutnost, která s sebou přináší některé zajímavé a nevyhnutelné detaily. Je zřejmé, že souborový systém je navržen tak, aby poskytoval prostor pro nevolatilní ukládání dat; to je jeho hlavní funkce. Z tohoto požadavku však vyplývá mnoho dalších důležitých funkcí.

Všechny souborové systémy musí poskytovat jmenný prostor – tedy metodiku pojmenování a organizace. Ta definuje, jak lze soubor pojmenovat, konkrétně délku názvu souboru a podmnožinu znaků, které lze pro názvy souborů použít z celkové množiny dostupných znaků. Definuje také logickou strukturu dat na disku, například použití adresářů pro organizaci souborů namísto jejich shlukování do jediného obrovského konglomerátu souborů.

Jakmile je definován jmenný prostor, je nutné vytvořit strukturu metadat, která poskytne logický základ pro tento jmenný prostor. Ta zahrnuje datové struktury potřebné pro podporu hierarchické adresářové struktury; struktury pro určení, které bloky prostoru na disku jsou využity a které jsou k dispozici; struktury umožňující udržovat názvy souborů a adresářů; informace o souborech, jako je jejich velikost a čas jejich vytvoření, změny nebo posledního přístupu; a umístění nebo umístění dat náležejících k souboru na disku. Další metadata slouží k ukládání informací na vysoké úrovni o dílčích částech disku, jako jsou logické svazky a oddíly. Tato metadata vyšší úrovně a struktury, které reprezentují, obsahují informace popisující souborový systém uložený na disku nebo oddílu, ale jsou oddělená a nezávislá na metadatech souborového systému.

Souborové systémy také vyžadují rozhraní API (Application Programming Interface), které poskytuje přístup k voláním systémových funkcí, které manipulují s objekty souborového systému, jako jsou soubory a adresáře. Rozhraní API zajišťuje úlohy, jako je vytváření, přesouvání a mazání souborů. Poskytuje také algoritmy, které určují například to, kde je soubor v souborovém systému umístěn. Tyto algoritmy mohou zohledňovat cíle, jako je rychlost nebo minimalizace fragmentace disku.

Moderní souborové systémy také poskytují model zabezpečení, což je schéma pro definování přístupových práv k souborům a adresářům. Bezpečnostní model souborového systému Linux pomáhá zajistit, aby uživatelé měli přístup pouze ke svým vlastním souborům, nikoli k souborům ostatních uživatelů nebo k samotnému operačnímu systému.

Posledním stavebním prvkem je software potřebný k implementaci všech těchto funkcí. Linux používá dvoudílnou softwarovou implementaci jako způsob, jak zvýšit efektivitu systému i programátorů.


Obrázek 1: Dvoudílná softwarová implementace souborového systému Linux.

První částí této dvoudílné implementace je virtuální souborový systém Linux. Tento virtuální souborový systém poskytuje jádru a vývojářům jedinou sadu příkazů pro přístup ke všem typům souborových systémů. Software virtuálního souborového systému volá specifický ovladač zařízení potřebný pro rozhraní s různými typy souborových systémů. Ovladače zařízení specifické pro daný souborový systém jsou druhou částí implementace. Ovladač zařízení interpretuje standardní sadu příkazů souborového systému na příkazy specifické pro typ souborového systému na oddílu nebo logickém svazku.

Struktura adresáře

Jako obvykle velmi organizovaná Panna mám rád věci uložené v menších uspořádaných skupinách, nikoli v jednom velkém kbelíku. Použití adresářů mi pomáhá, abych mohl ukládat a následně vyhledávat požadované soubory, když je hledám. Adresářům se také říká složky, protože si je lze představit jako složky, ve kterých jsou uloženy soubory v jakési fyzické analogii pracovní plochy.

V systému Linux a mnoha dalších operačních systémech mohou být adresáře strukturovány do stromové hierarchie. Struktura adresářů v Linuxu je dobře definována a zdokumentována v dokumentu Linux Filesystem Hierarchy Standard (FHS). Odkazování na tyto adresáře při přístupu k nim se provádí pomocí postupně hlubších názvů adresářů spojených lomítkem vpřed (/), například /var/log a /var/spool/mail. Těmto adresářům se říká cesty.

Následující tabulka obsahuje velmi stručný seznam standardních, známých a definovaných adresářů nejvyšší úrovně systému Linux a jejich účel.

Adresář Popis
/ (kořenový souborový systém) Kořenový souborový systém je adresář nejvyšší úrovně souborového systému. Musí obsahovat všechny soubory potřebné ke spuštění systému Linux před připojením ostatních souborových systémů. Musí obsahovat všechny požadované spustitelné soubory a knihovny potřebné ke spuštění ostatních souborových systémů. Po zavedení systému se všechny ostatní souborové systémy připojí na standardní, přesně definované přípojné body jako podadresáře kořenového souborového systému.
/bin Adresář /bin obsahuje uživatelské spustitelné soubory.
/boot Obsahuje statický zavaděč a spustitelné a konfigurační soubory jádra potřebné pro spuštění počítače se systémem Linux.
/dev Tento adresář obsahuje soubory zařízení pro každé hardwarové zařízení připojené k systému. Nejedná se o ovladače zařízení, spíše o soubory, které reprezentují jednotlivá zařízení v počítači a usnadňují přístup k těmto zařízením.
/etc Obsahuje místní konfigurační soubory systému pro hostitelský počítač.
/home Domácí adresář pro ukládání uživatelských souborů. Každý uživatel má v adresáři /home svůj podadresář.
/lib Obsahuje soubory sdílených knihoven, které jsou nutné pro spuštění systému.
/media Místo pro připojení externích vyměnitelných médií, jako jsou například flash disky USB, které mohou být připojeny k hostiteli.
/mnt Dočasný přípojný bod pro běžné souborové systémy (jakože ne vyměnitelná média), který lze použít, když správce opravuje souborový systém nebo na něm pracuje.
/opt Měly by zde být umístěny volitelné soubory, například aplikační programy dodávané dodavatelem.
/root Nejedná se o kořenový souborový systém (/). Je to domovský adresář uživatele root.
/sbin Systémové binární soubory. Jedná se o spustitelné soubory používané pro správu systému.
/tmp Dočasný adresář. Používá se operačním systémem a mnoha programy k ukládání dočasných souborů. Dočasně sem mohou ukládat soubory také uživatelé. Upozorňujeme, že zde uložené soubory mohou být kdykoli smazány bez předchozího upozornění.
/usr Jsou zde uloženy soubory, které lze sdílet a které jsou určeny pouze pro čtení, včetně spustitelných binárních souborů a knihoven, souborů man a dalších typů dokumentace.
/var Jsou zde uloženy soubory s proměnnými daty. Mohou sem patřit například soubory protokolů, MySQL a další databázové soubory, datové soubory webového serveru, e-mailové schránky a mnoho dalšího.

Tabulka 1: Nejvyšší úroveň hierarchie souborového systému Linux.

Soubory a jejich podadresáře uvedené v tabulce 1 spolu s jejich podadresáři, které mají čajové pozadí, jsou považovány za nedílnou součást kořenového souborového systému. To znamená, že nemohou být vytvořeny jako samostatný souborový systém a připojeny při spuštění. Je to proto, že (konkrétně jejich obsah) musí být přítomny při spuštění, aby se systém správně spustil.

Adresáře /media a /mnt jsou součástí kořenového souborového systému, ale nikdy by neměly obsahovat žádná data. Jsou to spíše jen dočasné přípojné body.

Zbylé adresáře, ty, které nemají v tabulce 1 barvu pozadí, nemusí být přítomny během zaváděcí sekvence, ale budou připojeny později, během spouštěcí sekvence, která připravuje hostitele na užitečnou práci.

Podrobnosti o každém z těchto adresářů a jejich mnoha podadresářích najdete na oficiální webové stránce Linux Filesystem Hierarchy Standard (FHS). Dobrý popis FHS najdete také na Wikipedii. Tento standard by měl být co nejpřesněji dodržován, aby byla zajištěna provozní a funkční konzistence. Bez ohledu na typy souborových systémů používaných na hostiteli je tato hierarchická adresářová struktura stejná.

Jednotná adresářová struktura systému Linux

V některých nelinuxových operačních systémech PC, pokud existuje více fyzických pevných disků nebo více oddílů, je každému disku nebo oddílu přiřazeno písmeno jednotky. Je nutné vědět, na kterém pevném disku se soubor nebo program nachází, například C: nebo D:. Pak zadáte písmeno jednotky jako příkaz, například D:, abyste se přepnuli na jednotku D:, a pak pomocí příkazu cd přejdete do správného adresáře, kde najdete požadovaný soubor. Každý pevný disk má svůj vlastní samostatný a úplný adresářový strom.

Systém souborů Linux sjednocuje všechny fyzické pevné disky a diskové oddíly do jediné adresářové struktury. Vše začíná nahoře – v kořenovém adresáři (/). Všechny ostatní adresáře a jejich podadresáře jsou umístěny pod jediným kořenovým adresářem systému Linux. To znamená, že existuje pouze jeden jediný adresářový strom, ve kterém lze vyhledávat soubory a programy.

Toto může fungovat pouze proto, že souborový systém, například /home, /tmp, /var, /opt nebo /usr, lze vytvořit na samostatných fyzických pevných discích, na jiném oddílu nebo na jiném logickém svazku než souborový systém / (root) a poté jej připojit na přípojný bod (adresář) jako součást stromu kořenového souborového systému. Dokonce i vyměnitelné disky, jako je flash disk USB nebo externí pevný disk USB nebo ESATA, budou připojeny na kořenový souborový systém a stanou se nedílnou součástí tohoto adresářového stromu.

Jeden z dobrých důvodů, proč to udělat, je patrný při přechodu z jedné verze distribuce Linuxu na jinou nebo při přechodu z jedné distribuce na jinou. Obecně, a kromě všech aktualizačních nástrojů, jako je dnf-upgrade ve Fedoře, je moudré během upgradu občas přeformátovat pevný disk (disky) obsahující operační systém, aby se pozitivně odstranily všechny nečistoty, které se časem nahromadily. Pokud je /home součástí kořenového souborového systému, bude také přeformátován a bude nutné jej obnovit ze zálohy. Pokud je /home samostatným souborovým systémem, instalační program jej pozná jako samostatný souborový systém a jeho formátování může být přeskočeno. To může platit i pro /var, kde jsou uloženy databáze, e-mailové schránky, webové stránky a další proměnná uživatelská a systémová data.

Existují i další důvody pro zachování určitých částí adresářového stromu Linuxu jako samostatných souborových systémů. Například kdysi dávno, když jsem si ještě nebyl vědom potenciálních problémů spojených s tím, že všechny potřebné adresáře Linuxu jsou součástí souborového systému / (root), se mi podařilo zaplnit svůj domovský adresář velkým množstvím velmi velkých souborů. Protože adresář /home ani adresář /tmp nebyly samostatné souborové systémy, ale pouze podadresáře kořenového souborového systému, zaplnil se celý kořenový souborový systém. Operačnímu systému nezbylo místo na vytváření dočasných souborů ani na rozšiřování stávajících datových souborů. Aplikační programy si nejprve začaly stěžovat, že není místo pro ukládání souborů, a pak se začal velmi podivně chovat i samotný operační systém. Zavedení systému do jednouživatelského režimu a vymazání inkriminovaných souborů v domovském adresáři mi umožnilo znovu začít pracovat. Poté jsem Linux přeinstaloval pomocí zcela standardního nastavení více souborových systémů a podařilo se mi zabránit opětovnému úplnému zhroucení systému.

Jednou se mi stalo, že linuxový hostitel běžel dál, ale bránil uživateli v přihlášení pomocí grafického rozhraní na ploše. Podařilo se mi přihlásit pomocí rozhraní příkazového řádku (CLI) lokálně pomocí jedné z virtuálních konzolí a vzdáleně pomocí SSH. Problém spočíval v tom, že se zaplnil souborový systém /tmp a v době přihlášení nebylo možné vytvořit některé dočasné soubory vyžadované grafickým uživatelským rozhraním. Protože přihlášení pomocí CLI nevyžadovalo vytvoření souborů v /tmp, nedostatek místa v tomto prostoru mi nebránil v přihlášení pomocí CLI. V tomto případě byl adresář /tmp samostatným souborovým systémem a ve skupině svazků, jejíž součástí byl logický svazek /tmp, byl k dispozici dostatek místa. Jednoduše jsem rozšířil logický svazek /tmp na velikost, která odpovídala mé nové představě o množství potřebného prostoru pro dočasné soubory na tomto hostiteli, a problém byl vyřešen. Všimněte si, že toto řešení nevyžadovalo restart a jakmile byl systém souborů /tmp zvětšen, uživatel se mohl přihlásit na plochu.

Další situace nastala, když jsem pracoval jako správce laboratoře v jedné velké technologické společnosti. Jeden z našich vývojářů nainstaloval aplikaci do nesprávného umístění (/var). Aplikace padala, protože souborový systém /var byl plný a soubory protokolu, které jsou v tomto souborovém systému uloženy v /var/log, nemohly být kvůli nedostatku místa doplněny o nové zprávy. Systém však zůstal v provozu, protože kritické souborové systémy / (root) a /tmp se nezaplnily. Odstranění chybné aplikace a její opětovná instalace do souborového systému /opt tento problém vyřešila.

Typy souborových systémů

Linux podporuje čtení asi 100 typů oddílů; vytvářet a zapisovat umí jen do několika z nich. Je však možné – a velmi časté – připojit souborové systémy různých typů na stejný kořenový souborový systém. V této souvislosti hovoříme o souborových systémech ve smyslu struktur a metadat potřebných k ukládání a správě uživatelských dat na oddílu pevného disku nebo logickém svazku. Úplný seznam typů oddílů souborového systému rozpoznávaných příkazem fdisk systému Linux je uveden zde, abyste si mohli udělat představu o vysokém stupni kompatibility systému Linux s velmi mnoha typy systémů.

 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT

Hlavním účelem podpory schopnosti číst tolik typů oddílů je umožnit kompatibilitu a alespoň určitou interoperabilitu se souborovými systémy jiných počítačových systémů. Možnosti, které jsou k dispozici při vytváření nového souborového systému v systému Fedora, jsou uvedeny v následujícím seznamu.

  • btrfs
  • cramfs
  • ext2
  • ext3
  • ext4
  • fat
  • gfs2
  • hfsplus
  • minix
  • .

  • msdos
  • ntfs
  • reiserfs
  • vfat
  • xfs

Ostatní distribuce podporují vytváření různých typů souborových systémů. Například CentOS 6 podporuje vytváření pouze těch souborových systémů, které jsou ve výše uvedeném seznamu zvýrazněny tučně.

Mountování

Termín „připojit“ souborový systém v Linuxu odkazuje na počátky výpočetní techniky, kdy bylo třeba fyzicky připojit pásku nebo balíček výměnných disků na příslušné diskové zařízení. Po fyzickém umístění na jednotku by byl souborový systém na balíčku disků logicky připojen operačním systémem, aby byl jeho obsah k dispozici pro přístup operačního systému, aplikačních programů a uživatelů.

Přípojný bod je jednoduše adresář, jako každý jiný, který je vytvořen jako součást kořenového souborového systému. Takže například domovský souborový systém je připojen do adresáře /home. Souborové systémy mohou být připojeny v přípojných bodech jiných nekořenových souborových systémů, ale to je méně obvyklé.

Kořenový souborový systém Linuxu je připojen do kořenového adresáře (/) velmi brzy v zaváděcí sekvenci. Ostatní souborové systémy jsou připojeny později, a to spouštěcími programy Linuxu, buď rc pod SystemV, nebo systemd v novějších verzích Linuxu. Připojení souborových systémů během spouštěcího procesu je řízeno konfiguračním souborem /etc/fstab. Snadno si to zapamatujete tak, že fstab je zkratka pro „tabulku souborových systémů“ a je to seznam souborových systémů, které mají být připojeny, jejich určených přípojných bodů a všech voleb, které mohou být pro konkrétní souborové systémy potřebné.

Souborové systémy se připojují do existujícího adresáře/přípojného bodu pomocí příkazu mount. Obecně platí, že každý adresář, který se používá jako přípojný bod, by měl být prázdný a neměl by obsahovat žádné další soubory. Linux nebude bránit uživatelům připojit jeden souborový systém přes již existující nebo na adresář, který obsahuje soubory. Pokud připojíte souborový systém na již existující adresář nebo souborový systém, původní obsah bude skryt a viditelný bude pouze obsah nově připojeného souborového systému.

Závěr

Doufám, že tímto článkem byly vyjasněny některé možné nejasnosti kolem pojmu souborový systém. Trvalo mi dlouhou dobu a velmi užitečného mentora, než jsem skutečně pochopil a ocenil složitost, eleganci a funkčnost linuxového souborového systému ve všech jeho významech.

Pokud máte dotazy, přidejte je prosím do komentářů níže a já se je pokusím zodpovědět.

Příští měsíc

Dalším důležitým pojmem je, že pro Linux je vše soubor. Tento koncept má několik zajímavých a důležitých praktických aplikací pro uživatele a správce systému. Zmiňuji se o tom proto, že si možná budete chtít přečíst můj článek „Všechno je soubor“ před článkem o adresáři /dev, který chystám na příští měsíc.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.