Virtuálne súborové systémy v Linuxe: prečo sú potrebné a ako fungujú? Časť 1

Ahojte všetci! Pokračujeme v spúšťaní nových streamov na kurzoch, ktoré už máte radi, a teraz sa ponáhľame oznámiť, že spúšťame novú sadu kurzov "Správca Linuxu", ktorá odštartuje koncom apríla. Tejto udalosti bude venovaná nová publikácia. S originálnym materiálom môžete čítajte tu.

Virtuálne súborové systémy fungujú ako druh magickej abstrakcie, ktorá umožňuje filozofii Linuxu povedať, že „všetko je súbor“.

Virtuálne súborové systémy v Linuxe: prečo sú potrebné a ako fungujú? Časť 1

Čo je súborový systém? Na základe slov prvého linuxového prispievateľa a autora Robert Láska"Súborový systém je hierarchické úložisko údajov zostavených podľa špecifickej štruktúry." Táto definícia však platí rovnako dobre pre VFAT (Virtual File Allocation Table), Git a Cassandra (NoSQL databáza). Čo teda presne definuje niečo ako „systém súborov“?

Základy súborového systému

Linuxové jadro má určité požiadavky na entitu, ktorú možno považovať za súborový systém. Musí implementovať metódy open(), read() и write() pre trvalé objekty, ktoré majú názvy. Z objektovo orientovaného hľadiska programovaniekernel definuje generický súborový systém ako abstraktné rozhranie a tieto tri veľké funkcie sa považujú za „virtuálne“ a nemajú žiadnu špecifickú definíciu. V súlade s tým sa štandardná implementácia súborového systému nazýva virtuálny súborový systém (VFS).

Virtuálne súborové systémy v Linuxe: prečo sú potrebné a ako fungujú? Časť 1

Ak môžeme otvárať, čítať a zapisovať do entity, potom sa táto entita považuje za súbor, ako môžeme vidieť na príklade v konzole vyššie.
Fenomén VFS len zdôrazňuje pozorovanie spoločné pre systémy podobné Unixu, že „všetko je súbor“. Zamyslite sa nad tým, aké zvláštne je, že ten malý príklad vyššie s /dev/console ukazuje, ako konzola v skutočnosti funguje. Obrázok ukazuje interaktívnu reláciu Bash. Odoslanie reťazca do konzoly (virtuálne konzolové zariadenie) ho zobrazí na virtuálnej obrazovke. VFS má iné, ešte podivnejšie vlastnosti. Umožňuje vám napríklad vyhľadávať podľa to.

Systémy, ktoré poznáme, ako napríklad ext4, NFS a /proc, majú tri dôležité funkcie v dátovej štruktúre C, tzv. operácie so súbormi. Okrem toho niektoré súborové systémy rozširujú a prepisujú funkcie VFS známym objektovo orientovaným spôsobom. Ako poznamenáva Robert Love, abstrakcia VFS umožňuje používateľom Linuxu jednoducho kopírovať súbory do alebo z operačných systémov tretích strán alebo abstraktných entít, ako sú potrubia, bez toho, aby sa museli starať o svoj interný formát údajov. Na strane používateľa (používateľský priestor) môže proces pomocou systémového volania kopírovať zo súboru do dátových štruktúr jadra pomocou metódy read() jeden súborový systém a potom použite metódu write () iný súborový systém na výstup údajov.

Definície funkcií, ktoré patria k základným typom VFS, sa nachádzajú v súboroch fs/*.c zdrojový kód jadra, zatiaľ čo podadresáre fs/ obsahujú špecifické súborové systémy. Jadro obsahuje aj entity ako napr cgroups, /dev и tmpfs, ktoré sú potrebné počas procesu zavádzania, a preto sú definované v podadresári jadra init/. Vezmite prosím na vedomie, že cgroups, /dev и tmpfs nevolajte funkcie „veľkej trojky“. file_operations, ale priamo čítať a zapisovať do pamäte.
Nižšie uvedený diagram ukazuje, ako používateľský priestor pristupuje k rôznym typom súborových systémov bežne namontovaných na systémoch Linux. Stavby ako napr pipes, dmesg и POSIX clocks, ktoré štruktúru aj realizujú file_operations, prístupný cez vrstvu VFS.

Virtuálne súborové systémy v Linuxe: prečo sú potrebné a ako fungujú? Časť 1

VFS je „obalová vrstva“ medzi systémovými volaniami a implementáciami určitých file_operations, ako napr ext4 и procfs. Funkcie file_operations môže interagovať buď s ovládačmi zariadení, alebo so zariadeniami na prístup do pamäte. tmpfs, devtmpfs и cgroups nepoužívať file_operations, ale priamy prístup k pamäti.
Existencia VFS poskytuje možnosť opätovného použitia kódu, pretože základné metódy spojené so súborovými systémami nemusia byť opätovne implementované každým typom súborového systému. Opätovné použitie kódu je medzi softvérovými inžiniermi široko používaná prax! Ak však opakovane použiteľný kód obsahuje vážne chybytrpia nimi všetky implementácie, ktoré dedia bežné metódy.

/tmp: Jednoduchá nápoveda

Jednoduchý spôsob, ako zistiť prítomnosť VFS v systéme, je zadať mount | grep -v sd | grep -v :/, ktorý zobrazí všetky pripojené (mounted) súborové systémy, ktoré nie sú rezidentné na disku a nie NFS, čo platí pre väčšinu počítačov. Jeden z uvedených držiakov (mounts) VFS nepochybne bude /tmp, správny?

Virtuálne súborové systémy v Linuxe: prečo sú potrebné a ako fungujú? Časť 1

To úložisko pozná každý / tmp na fyzických nosičoch - šialené! Zdroj.

Prečo nie je vhodné skladovať /tmp na fyzickom médiu? Pretože súbory v /tmp sú dočasné a úložné zariadenia sú pomalšie ako pamäť, kde sa vytvára tmpfs. Navyše fyzické médiá sú pri prepisovaní náchylnejšie na opotrebovanie ako pamäť. Napokon, súbory v /tmp môžu obsahovať citlivé informácie, takže ich zmiznutie pri každom reštarte je neoddeliteľnou súčasťou.

Bohužiaľ, niektoré inštalačné skripty distribúcie Linuxu štandardne vytvárajú /tmp na úložnom zariadení. Ak sa to stane aj vášmu systému, nezúfajte. Postupujte podľa niekoľkých jednoduchých pokynov s Arch Wikiaby ste to napravili, a nezabudnite, že pamäť pridelená pre tmpfs sa stane neprístupným pre iné účely. Inými slovami, systém s obrovským súborom tmpfs a veľkými súbormi môže spotrebovať všetku pamäť a spadnúť. Ďalšia rada: pri úprave súboru /etc/fstab, nezabudnite, že musí končiť novým riadkom, inak sa váš systém nespustí.

/proc a /sys

Okrem /tmpPoužívatelia Linuxu najviac poznajú VFS (virtuálne súborové systémy). /proc и /sys, (/dev sa nachádza v zdieľanej pamäti a nemá file_operations). Prečo práve tieto dve zložky? Pozrime sa na túto problematiku.

procfs vytvorí snímku stavu jadra a procesov, ktoré riadi userspace. V /proc Jadro vydáva informácie o tom, aké zariadenia má, ako sú prerušenia, virtuálna pamäť a plánovač. okrem toho /proc/sys – tu sú parametre nakonfigurované pomocou príkazu sysctl, dostupný pre userspace. Stav a štatistiky jednotlivých procesov sa zobrazujú v adresároch /proc/.

Virtuálne súborové systémy v Linuxe: prečo sú potrebné a ako fungujú? Časť 1

Tu /proc/meminfo je prázdny súbor, ktorý napriek tomu obsahuje cenné informácie.

správanie /proc files ukazuje, aké rôzne môžu byť systémy súborov VFS na disku. Na jednej strane /proc/meminfo obsahujú informácie, ktoré je možné zobraziť pomocou príkazu free. Na druhej strane je prázdny! Ako sa to stane? Situácia pripomína známy článok s názvom „Existuje mesiac, keď sa naň nikto nepozerá? Realita a kvantová teória", ktorú napísal profesor fyziky na Cornell University David Mermin v roku 1985. Faktom je, že jadro zhromažďuje štatistiky pamäte, keď o to požiada /proca vlastne v súboroch /proc nie je nič, keď sa tam nikto nepozerá. Ako som povedal Mermin,,Základná kvantová doktrína tvrdí, že meranie vo všeobecnosti neodhaľuje už existujúcu hodnotu meranej vlastnosti. (A premýšľajte o otázke o mesiaci ako o domácej úlohe!)
Zdanlivá prázdnota procfs dáva zmysel, pretože informácie sú dynamické. Trochu iná situácia s sysfs. Porovnajme, koľko je v súboroch aspoň jeden bajt /proc a /sys.

Virtuálne súborové systémy v Linuxe: prečo sú potrebné a ako fungujú? Časť 1

Procfs má jeden súbor, a to exportovanú konfiguráciu jadra, čo je výnimka, pretože ho stačí vygenerovať iba raz pri spustení. Na druhej strane v /sys existuje mnoho väčších súborov, z ktorých mnohé zaberajú celú stránku pamäte. Zvyčajne súbory sysfs obsahujú práve jedno číslo alebo reťazec, na rozdiel od tabuliek informácií získaných čítaním súborov ako napr /proc/meminfo.

Cieľ sysfs – poskytujú čitateľné a zapisovateľné vlastnosti toho, čo jadro volá «kobjects» v užívateľskom priestore. Jediný cieľ kobjects je počítanie referencií: keď sa vymaže posledná referencia na kobject, systém obnoví zdroje, ktoré sú s ním spojené. napriek tomu /sys tvorí väčšinu známych "stabilné ABI pre užívateľský priestor" jadro, ktoré nikto nikdy nemôže za žiadnych okolností, "prestávka". To neznamená, že súbory v sysfs sú statické, čo by bolo v rozpore s referenčným počítaním nestabilných objektov.
Stabilné ABI jadra obmedzuje to, čo sa môže objaviť /sys, a nie to, čo je skutočne prítomné v tom konkrétnom okamihu. Výpis povolení súborov v sysfs poskytuje prehľad o tom, ako konfigurovateľné parametre zariadení, modulov, súborových systémov atď. možno konfigurovať alebo čítať. Urobili sme logický záver, že procfs je tiež súčasťou stabilného ABI jadra, hoci to nie je výslovne uvedené v dokumentáciu.

Virtuálne súborové systémy v Linuxe: prečo sú potrebné a ako fungujú? Časť 1

Súbory v sysfs opisujú jednu špecifickú vlastnosť pre každú entitu a môžu byť čitateľné, zapisovateľné alebo oboje. "0" v súbore znamená, že SSD nemožno vybrať.

Druhú časť prekladu začneme tým, ako sledovať VFS pomocou nástrojov eBPF a bcc a teraz čakáme na vaše pripomienky a už tradične vás pozývame na otvorený webinár, ktorý bude mať naša pani učiteľka 9. apríla - Vladimír Drozdeckij.

Zdroj: hab.com

Pridať komentár