TakéFilesystem, FS, Systém souborůPokročilý
Definice
Souborový systém je způsob organizace dat na úložišti, který převádí očíslované bloky disku na pojmenované soubory a adresáře. Určuje, jak se ukládá obsah, metadata (velikost, práva, časy) i volné místo, a jak se stav udrží konzistentní při výpadku napájení. Příkladem jsou ext4, NTFS, APFS, XFS nebo ZFS.
Než se na to spolehnete: Wikidata Q174989 pro „file system“ jsem uvedl z paměti, doporučuji ověřit; ostatní odkazy jsou kanonické kořeny dokumentace.
Příklady z praxe
Disk je plný, i když místo zbývá
Server s cache tisíců drobných souborů začne hlásit „No space left on device“, přestože df ukazuje volných 40 GB. Příčinou je vyčerpání inode: každý soubor spotřebuje jeden bez ohledu na velikost. Počet inode se u ext4 určuje při formátování a později se nedá zvětšit, řešením je smazání drobných souborů nebo nové formátování s hustším poměrem.
$ df -h /var Filesystem Size Used Avail Use% Mounted on /dev/sda2 100G 58G 40G 60% /var $ df -i /var Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda2 6553600 6553600 0 100% /varRozdílná citlivost na velikost písmen mezi macOS a CI
Vývojář na macOS s APFS importuje komponentu jako './components/Button', ačkoli soubor se jmenuje button.tsx. Lokálně build projde, protože výchozí svazek nerozlišuje velikost písmen. Na Linuxovém běhounu v CI, kde je ext4, stejný build spadne s chybou „Module not found“. Kontrola jmen souborů v lintu takové chyby odhalí dřív než pipeline.
Časté omyly
- MýtusSmazaný soubor je pryč, přepsat disk už netřeba.
- Ve skutečnostiSmazání typicky odstraní jen odkaz v adresáři a označí bloky jako volné, obsah zůstává na médiu, dokud ho něco nepřepíše. Pro skutečné odstranění dat slouží šifrování celého svazku nebo hardwarové vymazání (secure erase) u SSD.
- MýtusFormátování a rozdělení disku na oddíly je totéž.
- Ve skutečnostiRozdělení na oddíly jen rozkrájí médium na části a zapíše tabulku oddílů (MBR nebo GPT). Souborový systém vzniká až formátováním konkrétního oddílu, takže na jednom disku může být několik oddílů s různými souborovými systémy.
- MýtusŽurnál zaručí, že po pádu neztratím žádná data.
- Ve skutečnostiŽurnál ve výchozím režimu chrání hlavně konzistenci metadat, aby po restartu nebyl svazek poškozený. Data zapsaná do cache stránek, která ještě nedosedla na disk, se ztratit mohou, pokud si aplikace nevyžádá fsync.
Časté dotazy
- Jaký souborový systém zvolit pro Linuxový server?
- Souborový systém pro běžný Linuxový server bývá ext4: je léta odladěný, žurnálovaný a nepřekvapí. XFS dává smysl tam, kde jde o velké soubory a hodně souběžných zápisů, proto ho volí některé serverové distribuce jako výchozí. ZFS nebo Btrfs zvažte, když potřebujete kontrolní součty dat, snímky a správu diskových polí v jedné vrstvě, počítejte ale s vyšší spotřebou paměti a složitější správou. Pro přenosný disk sdílený mezi Windows a macOS zůstává praktickou volbou exFAT.
- Co je to připojení (mount) souborového systému?
- Připojení souborového systému znamená napojení konkrétního svazku do stromu adresářů operačního systému, například oddílu /dev/sdb1 do adresáře /mnt/data. Unixové systémy nemají písmena disků: všechny svazky tvoří jediný strom začínající kořenem. Při připojení se volí i parametry, jako je jen pro čtení, chování časových razítek nebo režim žurnálu. Trvalá připojení se na Linuxu popisují v souboru /etc/fstab, moderní systémy je často identifikují přes UUID svazku, protože pořadí zařízení se mezi starty může měnit.
- Jak souvisí souborový systém s výkonem databáze?
- Souborový systém ovlivňuje výkon databáze hlavně tím, jak zachází s vyrovnávací pamětí zápisů a s fragmentací. Databáze si trvanlivost vynucují voláním fsync po zápisu transakčního logu, a rychlost této operace závisí na souborovém systému, nastavení žurnálu a na tom, zda má řadič zálohovanou cache. Copy-on-write systémy jako ZFS nebo Btrfs mohou u datových souborů způsobovat fragmentaci, proto se pro ně často vypíná copy-on-write nad adresářem databáze. Doporučení konkrétního vydání databáze má vždy přednost před obecným pravidlem.
- Proč se liší velikost souboru a místo, které zabírá na disku?
- Souborový systém alokuje místo po blocích, obvykle po 4 kB. Soubor o velikosti 200 bajtů proto reálně zabere celý blok a zbytek se nevyužije, čemuž se říká vnitřní fragmentace. Naopak takzvané řídké soubory (sparse files) mohou hlásit velikost větší, než kolik skutečně zabírají, protože nulové úseky nemají přidělené žádné bloky. Rozdíl ukáže příkaz du oproti ls: du počítá přidělené bloky, ls hlásí logickou velikost obsahu.
Zdroje
- Filesystems in the Linux kernel(otevře se v novém okně)
- File system(otevře se v novém okně)
- How To Corrupt An SQLite Database File(otevře se v novém okně)