Virtuální souborové systémy v Linuxu: k čemu slouží a jak fungují? Část 1

Ahoj všichni! Pokračujeme v zavádění nových kurzů, které jste si oblíbili, a nyní vám s radostí oznamujeme, že spouštíme nový cyklus kurzu „Linuxový administrátor“, který začne na konci dubna. K této příležitosti bude vydána nová publikace. S originálním materiálem se můžete seznámit zde.

Virtuální souborové systémy hrají roli jakési kouzelné abstrakce, která umožňuje filozofii Linuxu říkat, že "všechno je souborem".

Virtuální souborové systémy v Linuxu: k čemu slouží a jak fungují? Část 1

Co je to souborový systém? Opíraje se o slova jednoho z prvních přispěvatelů a autorů Linuxu Roberta Lava, "Souborový systém je hierarchické úložiště dat uspořádané podle určité struktury". Každopádně, toto definice je stejně dobře použitelná pro VFAT (Virtual File Allocation Table), Git a Cassandra (databázi NoSQL). Co tedy vlastně určuje pojem "souborový systém"?

Základy souborového systému

Jádro Linuxu má určité požadavky na entitu, která může být považována za souborový systém. Musí realizovat metody open(), read() a write() pro trvalé objekty, které mají názvy. Z pohledu objektově orientovaného programování, jádro definuje zobecněný souborový systém (generic filesystem) jako abstraktní rozhraní, a tyto tři hlavní funkce jsou považovány za "virtuální" a nemají konkrétní definici. Odpovídajícím způsobem se implementace souborového systému nazývá virtuální souborový systém (VFS).

Virtuální souborové systémy v Linuxu: k čemu slouží a jak fungují? Část 1

Pokud můžeme otevírat, číst a zapisovat do entity, pak je tato entita považována za soubor, jak vidíme v příkladu v konzoli výše.
Fenomen VFS jen zdůrazňuje pozorování, které je charakteristické pro systémy podobné Unixu, které říká, že "všechno je souborem". Zamyslete se, jak zvláštní je, že malý příklad výše s /dev/console ukazuje, jak vlastně konzole funguje. Na obrázku je zobrazená interaktivní Bash sezení. Odeslání řádku do konzole (virtual console device) zobrazuje jej na virtuálním obrazovce. VFS má další, ještě podivnější vlastnosti. Například, umožňuje provádět vyhledávání přes ně.

Naše známé systémy, jako ext4, NFS a /proc, mají tři důležité funkce ve struktuře dat v jazyce C, která se nazývá file_operations. Kromě toho určité souborové systémy rozšiřují a předefinují funkce VFS obvyklý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 cizích operačních systémů nebo abstraktních entit, jako jsou pipes, aniž by se zajímali o jejich vnitřní datový formát. Z pohledu uživatele (userspace) může proces pomocí systémového volání kopírovat z souboru do datových struktur jádra pomocí metody read() jednoho souborového systému, a poté použít metodu write () jiného souborového systému pro výstup dat.

Definice funkcí, které patří k základním typům VFS, se nacházejí v souborech fs/*.c zdrojového kódu jádra, zatímco podadresáře fs/ obsahují specifické souborové systémy. V jádře se také nacházejí entity, jako jsou cgroups, /dev a tmpfs, které jsou potřebné v procesu bootování, a proto jsou definovány v podadresáři jádra init/. Všimněte si, že cgroups, /dev a tmpfs nevyvolávají "velkou trojku" funkcí file_operations, ale přímo čtou a zapisují do paměti.
Na níže uvedeném diagramu je znázorněno, jak userspace přistupuje k různým typům souborových systémů, které se obvykle montují v systémech Linux. Nebyly zde uvedeny takové konstrukce jako pipes, dmesg a POSIX clocks, které také implementují strukturu file_operations, k nimž se přistupuje přes vrstvu VFS.

Virtuální souborové systémy v Linuxu: k čemu slouží a jak fungují? Část 1

VFS je "vrstva obálky" mezi systémovými voláními a implementacemi specifických file_operations, jako například ext4. a procfs. Funkce file_operations mohou interagovat buď s ovladači zařízení, nebo s zařízeními přístupu k paměti. tmpfs, devtmpfs a cgroups nepoužívají file_operations, ale přímo se obracejí na paměť.
Existence VFS zajišťuje možnost opětovného využití kódu, protože základní metody související se souborovými systémy nemusí být opětovně implementovány každým typem souborového systému. Opětovné využití kódu je široce aplikovanou praxí softwarových inženýrů! Nicméně pokud opakovaně použitý kód obsahuje závažné chyby, trpí nimi všechny implementace, které zdědí společné metody.

/tmp: Простая подсказка

Jednoduchý způsob, jak zjistit, že VFS jsou přítomny v systému, je zadat mount | grep -v sd | grep -v :/, což ukáže všechny připojené (mounted) souborové systémy, které nejsou residentní na disku a nejsou NFS, což platí na většině počítačů. Jedním z uvedených mountů (mounts) VFS bude nepochybně /tmp, že?

Virtuální souborové systémy v Linuxu: k čemu slouží a jak fungují? Část 1

Všichni vědí, že uchovávat / tmp na fyzickém médiu – je nesmysl! Zdroj.

Proč je nežádoucí uchovávat /tmp na fyzickém médiu? Protože soubory v /tmp jsou dočasné a zařízení pro ukládání jsou pomalejší než paměť, kde se vytváří tmpfs. Navíc fyzická média jsou 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 zánik po každém restartu je neodmyslitelnou funkcí.

Bohužel některé skripty pro instalaci distribucí Linuxu vytvářejí /tmp na úložném zařízení jako výchozí. Nenechte se odradit, pokud to nastalo i na vaší systému. Proveďte několik jednoduchých pokynů z Arch Wiki, abyste to opravili, a pamatujte, že paměť přidělená pro tmpfs se stává nedostupnou pro jiné účely. Jinými slovy, systém s obrovským tmpfs a velkými soubory v něm může vyčerpat celou paměť a spadnout. Další tip: při úpravě souboru /etc/fstab, pamatujte, že by měl končit novým řádkem, jinak se váš systém nepoběží.

/proc и /sys

Kromě /tmp, VFS (virtuální souborové systémy), které jsou uživatelům Linuxu nejznámější – se nachází v sdílené paměti a nemá /proc a /sys. (/dev ). Proč zrovna tyto dva komponenty? Pojďme se na tuto otázku podívat. file_operationsvytváří snímek okamžitého stavu jádra a procesů, které kontroluje pro

procfs userspace jádro poskytuje informace o tom, jaké prostředky má k dispozici, například přerušení, virtuální paměť a plánovač. Kromě toho,. V /proc – je to místo, kde jsou parametry nastavitelné pomocí příkazu /proc/sys , dostupné pro sysctl. Stav a statistiky jednotlivých procesů se zobrazují v adresářích jádro poskytuje informace o tom, jaké prostředky má k dispozici, například přerušení, virtuální paměť a plánovač. Kromě toho,— je to prázdný soubor, který však obsahuje cenné informace. /proc/.

Virtuální souborové systémy v Linuxu: k čemu slouží a jak fungují? Část 1

Zde /proc/meminfo Chování

souborů ukazuje, jak odlišné mohou být diskové souborové systémy VFS. Na jedné straně, /proc obsahují informace, které lze zobrazit pomocí příkazu /proc/meminfo . Na druhé straně, tam je prázdno! Jak je to možné? Situace připomíná slavný článek s názvem free„Existuje měsíc, když se na něj nikdo nedívá? Realita a kvantová teorie“ , napsaný profesorem fyziky na Cornellově univerzitě Davidem Merminsem v roce 1985. Skutečností je, že jádro shromažďuje statistiku paměti, když dojde k žádosti o, a ve skutečnosti jsou soubory /proc, и на самом деле в файлах /proc nic není, když se nikdo nedívá. Jak řekl Mermin, „Fundamentální kvantová doktrína říká, že měření obecně neodhaluje dříve existující hodnotu měřeného vlastnosti.“ (A zamyslete se nad otázkou ohledně měsíce jako domácí úkol!)
Zdánlivé prázdno procfs má smysl, protože informace v něm se dynamicky mění. O něco jiná situace je s sysfs. Pojďme porovnat, kolik souborů o velikosti alespoň jednoho bajtu existuje v /proc a v /sys.

Virtuální souborové systémy v Linuxu: k čemu slouží a jak fungují? Část 1

Procfs má jeden soubor, a to exportovanou konfiguraci jádra, což je výjimka, protože ji je třeba generovat pouze jednou za start. Na druhé straně v /sys leží řada objemnějších souborů, z nichž mnohé zabírají celou stránku paměti. Obvykle soubory sysfs obsahují přesně jedno číslo nebo řetězec, na rozdíl od tabulek informací, které se získávají při čtení takových souborů jako /proc/meminfo.

Cíl sysfs – poskytují vlastnosti, které jsou dostupné pro čtení a zápis toho, co jádro nazývá „kobjects“ v uživatelském prostoru. Jediným cílem kobjects je počítání odkazů: když je odstraněn poslední odkaz na kobject, systém uvolní s ním spojené zdroje. Přesto /sys tvoří většinu známého „stabilního ABI pro uživatelský prostor“ jádra, které nikdy nikdo, za žádných okolností nemůže „porušit“. To neznamená, že soubory v sysfs jsou statické, což by odporovalo počítání odkazů na nestabilní objekty.
Stabilní binární aplikační rozhraní jádra (kernel’s stable ABI) omezuje to, co může být v /sys, nikoli to, co skutečně existuje v tomto konkrétním okamžiku. Výpis oprávnění souborů v sysfs poskytuje pochopení toho, jak mohou být konfigurovatelné parametry zařízení, modulů, souborových systémů atd. nastaveny nebo přečteny. Logicky vyvozujeme, že procfs je také součástí stable ABI jádra, i když to není explicitně uvedeno v dokumentaci.

Virtuální souborové systémy v Linuxu: k čemu slouží a jak fungují? Část 1

Soubory v sysfs popisují jedno konkrétní vlastnost pro každou entitu a mohou být čitelné, přepisovatelné nebo obojí najednou. „0“ v souboru říká, že SSD nelze odstranit.

Druhou část překladu začneme tím, jak sledovat 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á se již 9. dubna uskuteční s naším lektorem — Vladimir Drozdetsky.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster