Virtuální souborové systémy v Linuxu: proč jsou potřebné a jak fungují? Část 1

Ahoj všichni! Pokračujeme ve spouštění nových streamů na kurzech, které již máte rádi, a nyní ve spěchu oznamujeme, že spouštíme novou sadu kurzů "Správce Linuxu", která bude spuštěna na konci dubna. Této události bude věnována nová publikace. S originálním materiálem můžete čtěte zde.

Virtuální souborové systémy fungují jako druh magické abstrakce, která umožňuje filozofii Linuxu říkat, že „všechno je soubor“.

Virtuální souborové systémy v Linuxu: proč jsou potřebné a jak fungují? Část 1

Co je souborový systém? Na základě slov prvního linuxového přispěvatele a autora Robert Láska"Souborový systém je hierarchické úložiště dat sestavené podle specifické struktury." Tato definice však platí stejně dobře pro VFAT (Virtual File Allocation Table), Git a Cassandra (NoSQL databáze). Co tedy přesně definuje něco jako „systém souborů“?

Základy souborového systému

Linuxové jádro má určité požadavky na entitu, kterou lze považovat za souborový systém. Musí implementovat metody open(), read() и write() pro trvalé objekty, které mají jména. Z objektově orientovaného hlediska programováníkernel definuje generický souborový systém jako abstraktní rozhraní a tyto tři velké funkce jsou považovány za „virtuální“ a nemají žádnou konkrétní definici. V souladu s tím se výchozí implementace systému souborů nazývá virtuální systém souborů (VFS).

Virtuální souborové systémy v Linuxu: proč jsou potřebné a jak fungují? Část 1

Pokud můžeme otevřít, číst a zapisovat do entity, pak je tato entita považována za soubor, jak můžeme vidět z příkladu v konzole výše.
Fenomén VFS jen zdůrazňuje pozorování společné pro unixové systémy, že „všechno je soubor“. Přemýšlejte o tom, jak je divné, že tento malý příklad výše s /dev/console ukazuje, jak konzola skutečně funguje. Obrázek ukazuje interaktivní Bash session. Odeslání řetězce do konzole (virtuální konzolové zařízení) jej zobrazí na virtuální obrazovce. VFS má jiné, ještě podivnější vlastnosti. Umožňuje například vyhledávat podle to.

Systémy, které známe, jako je ext4, NFS a /proc, mají v datové struktuře C tři důležité funkce, tzv. operace se soubory. Některé systémy souborů navíc rozšiřují a potlačují funkčnost VFS známým objektově orientovaným způsobem. Jak poznamenává Robert Love, abstrakce VFS umožňuje uživatelům Linuxu bezstarostně kopírovat soubory do nebo z operačních systémů třetích stran nebo abstraktních entit, jako jsou roury, bez obav o svůj interní formát dat. Na straně uživatele (uživatelský prostor) může proces pomocí systémového volání kopírovat ze souboru do datových struktur jádra pomocí metody read() jeden souborový systém a poté použijte metodu write () jiný souborový systém pro výstup dat.

Definice funkcí, které patří k základním typům VFS, se nacházejí v souborech fs/*.c zdrojový kód jádra, zatímco podadresáře fs/ obsahují specifické systémy souborů. Jádro dále obsahuje entity jako např cgroups, /dev и tmpfs, které jsou vyžadovány během zaváděcího procesu a jsou proto definovány v podadresáři jádra init/. Vezměte prosím na vědomí, že cgroups, /dev и tmpfs nevolejte funkce "velké trojky". file_operations, ale přímo číst a zapisovat do paměti.
Níže uvedený diagram ukazuje, jak uživatelský prostor přistupuje k různým typům souborových systémů běžně nainstalovaných v systémech Linux. Stavby jako např pipes, dmesg и POSIX clocks, které také realizují strukturu file_operations, přístupný přes vrstvu VFS.

Virtuální souborové systémy v Linuxu: proč jsou potřebné a jak fungují? Část 1

VFS je "obalová vrstva" mezi systémovými voláními a implementacemi určitých file_operationsJako je ext4 и procfs. Funkce file_operations může komunikovat buď s ovladači zařízení, nebo se zařízeními pro přístup do paměti. tmpfs, devtmpfs и cgroups nepoužívat file_operations, ale přímý přístup k paměti.
Existence VFS poskytuje možnost opětovného použití kódu, protože základní metody spojené se souborovými systémy nemusí být znovu implementovány každým typem souborového systému. Opětovné použití kódu je mezi softwarovými inženýry široce používaná praxe! Pokud však opakovaně použitelný kód obsahuje závažné chyby, trpí jimi všechny implementace, které zdědí běžné metody.

/tmp: Jednoduchá nápověda

Jednoduchým způsobem, jak zjistit přítomnost VFS v systému, je zadat mount | grep -v sd | grep -v :/, který zobrazí všechny připojené (mounted) souborové systémy, které nejsou rezidentní na disku a ne NFS, což platí na většině počítačů. Jeden z uvedených držáků (mounts) VFS nepochybně bude /tmp, že jo?

Virtuální souborové systémy v Linuxu: proč jsou potřebné a jak fungují? Část 1

To úložiště zná každý / tmp na fyzických nosičích - šílené! Zdroj.

Proč není vhodné skladovat /tmp na fyzickém médiu? Protože soubory v /tmp jsou dočasné a úložná zařízení jsou pomalejší než paměť, kde se vytváří tmpfs. Fyzická média jsou navíc při přepisování náchylnější k opotřebení než paměť. A konečně, soubory v /tmp mohou obsahovat citlivé informace, takže jejich zmizení při každém restartu je integrální funkcí.

Bohužel některé instalační skripty distribuce Linuxu ve výchozím nastavení vytvářejí /tmp na úložném zařízení. Pokud se to stane i vašemu systému, nezoufejte. Postupujte podle několika jednoduchých pokynů s Arch Wikito opravit a pamatujte, že paměť přidělená pro tmpfs stane nepřístupným pro jiné účely. Jinými slovy, systém s obřím tmpfs a velkými soubory v něm může spotřebovat veškerou paměť a spadnout. Další tip: při úpravě souboru /etc/fstab, nezapomeňte, že musí končit novým řádkem, jinak se váš systém nespustí.

/proc a /sys

kromě /tmpVFS (virtuální souborové systémy), které jsou uživatelům Linuxu nejznámější /proc и /sys, (/dev je umístěn ve sdílené paměti a nemá file_operations). Proč tyto dvě složky? Podívejme se na tento problém.

procfs vytvoří snímek stavu jádra a procesů, které řídí userspace. V /proc Jádro vydává informace o tom, jaké funkce má, jako jsou přerušení, virtuální paměť a plánovač. Kromě, /proc/sys – zde se konfigurují parametry pomocí příkazu sysctl, dostupné pro userspace. Stav a statistiky jednotlivých procesů se zobrazují v adresářích /proc/.

Virtuální souborové systémy v Linuxu: proč jsou potřebné a jak fungují? Část 1

Zde /proc/meminfo je prázdný soubor, který přesto obsahuje cenné informace.

Chování /proc files ukazuje, jak různé mohou být diskové souborové systémy VFS. Na jedné straně /proc/meminfo obsahují informace, které lze zobrazit pomocí příkazu free. Na druhou stranu je to prázdné! Jak se to stane? Situace připomíná slavný článek s názvem „Existuje měsíc, když se na něj nikdo nedívá? Realita a kvantová teorie", kterou napsal profesor fyziky Cornell University David Mermin v roce 1985. Faktem je, že jádro shromažďuje statistiky paměti, když o to požádá /proca vlastně v souborech /proc není nic, když se tam nikdo nedívá. Jak jsem řekl Mermin,,Základní kvantová doktrína říká, že měření obecně neodhaluje již existující hodnotu měřené vlastnosti. (A přemýšlejte o otázce o Měsíci jako o domácím úkolu!)
Zdánlivá prázdnota procfs dává smysl, protože informace jsou dynamické. Trochu jiná situace s sysfs. Porovnejme, kolik souborů alespoň jednoho bajtu obsahuje /proc a /sys.

Virtuální souborové systémy v Linuxu: proč jsou potřebné a jak fungují? Část 1

Procfs má jeden soubor, konkrétně exportovanou konfiguraci jádra, což je výjimka, protože ji stačí vygenerovat pouze jednou za boot. Na druhou stranu v /sys existuje mnoho větších souborů, z nichž mnohé zabírají celou stránku paměti. Obvykle soubory sysfs obsahují právě jedno číslo nebo řetězec, na rozdíl od tabulek informací získaných čtením souborů jako např /proc/meminfo.

terč sysfs – poskytovat čitelné a zapisovatelné vlastnosti toho, co jádro volá «kobjects» v uživatelském prostoru. Jediný cíl kobjects je počítání referencí: když je vymazán poslední odkaz na kobject, systém obnoví zdroje s ním spojené. Nicméně, /sys tvoří většinu slavných "stabilní ABI pro uživatelský prostor" jádro, které nikdo nikdy nemůže za žádných okolností, "přestávka". To neznamená, že soubory v sysfs jsou statické, což by odporovalo referenčnímu počítání nestabilních objektů.
Stabilní ABI jádra omezuje to, co se může objevit /sys, spíše než to, co je v daném okamžiku skutečně přítomno. Výpis oprávnění k souborům v sysfs poskytuje přehled o tom, jak lze konfigurovat parametry zařízení, modulů, systémů souborů atd. lze konfigurovat nebo číst. Děláme logický závěr, že procfs je také součástí stabilního ABI jádra, i když to není výslovně uvedeno v dokumentace.

Virtuální souborové systémy v Linuxu: proč jsou potřebné a jak fungují? Část 1

Soubory v sysfs popisují jednu konkrétní vlastnost pro každou entitu a mohou být čitelné, zapisovatelné nebo obojí. "0" v souboru znamená, že SSD nelze vyjmout.

Druhou část překladu začneme tím, jak monitorovat VFS pomocí nástrojů eBPF a bcc a nyní čekáme na vaše komentáře a tradičně vás zveme na otevřený webinář, který bude pořádat naše paní učitelka 9. dubna - Vladimír Drozdecký.

Zdroj: www.habr.com

Přidat komentář