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ů , 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 .
Virtuální souborové systémy fungují jako druh magické abstrakce, která umožňuje filozofii Linux říci, že „všechno je soubor“.

Co je to souborový systém? Podle jednoho z prvních přispěvatelů a autorů Linux "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 (). Co tedy přesně definuje něco jako „systém souborů“?
Základy souborového systému
Core Linux má určité požadavky, aby mohla být entita považována za souborový systém. Musí implementovat metody open(), read() и write() pro trvalé objekty, které mají jména. Z objektově orientovaného hlediska 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).

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 .
Systémy, které známe, jako je ext4, NFS a /proc, mají v datové struktuře C tři důležité funkce, tzv. Některé souborové systémy navíc rozšiřují a reimplementují funkcionalitu VFS známým objektově orientovaným způsobem. Jak poznamenává Robert Love, abstrakce VFS umožňuje uživatelům Linux Bezstarostně kopírujte soubory do a z operačních systémů třetích stran nebo abstraktních entit, jako jsou například roury, aniž byste se museli starat o jejich interní datový formát. Z uživatelské strany (uživatelského prostoru) může proces kopírovat ze souboru do datových struktur jádra pomocí systémového volání. 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 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ě připojených k systémům. LinuxKonstrukce, které nejsou zobrazeny pipes, dmesg и POSIX clocks, které také realizují strukturu file_operations, přístupný přes vrstvu VFS.

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 , 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?

To úložiště zná každý / tmp na fyzických nosičích - šílené! .
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 Linux Distribuce ve výchozím nastavení vytvářejí na úložném zařízení soubor /tmp. Nezoufejte, pokud se to stane i vašemu systému. Postupujte podle několika jednoduchých pokynů to 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ě /tmp, VFS (virtuální souborové systémy), které jsou uživatelům nejznámější Linux - je /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/.

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 , 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 ,,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.

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 jádro, které nikdo nikdy nemůže za žádných okolností, . 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 .

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 , který bude pořádat naše paní učitelka 9. dubna - .
Zdroj: www.habr.com
