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
Virtuálne súborové systémy fungujú ako druh magickej abstrakcie, ktorá umožňuje filozofii Linuxu povedať, že „všetko je súbor“.
Čo je súborový systém? Na základe slov prvého linuxového prispievateľa a autora
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
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
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. 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/
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.
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
/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?
To úložisko pozná každý / tmp
na fyzických nosičoch - šialené!
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 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 /tmp
Použí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/
.
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 /proc
a vlastne v súboroch /proc
nie je nič, keď sa tam nikto nepozerá. Ako som povedal
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
.
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 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
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
Zdroj: hab.com