Virtualni datotečni sistemi v Linuxu: zakaj so potrebni in kako delujejo? 1. del

Pozdravljeni vsi skupaj! Nadaljujemo z uvedbo novih tokov za tečaje, v katere ste se že zaljubili, zdaj pa hitimo sporočiti, da začenjamo nov nabor tečajev "Linux Administrator"ki se bo začela konec aprila. Ob tem dogodku bo objavljena nova publikacija. Z izvirnim materialom lahko preberite tukaj.

Virtualni datotečni sistemi služijo kot nekakšna magična abstrakcija, ki omogoča filozofiji Linuxa, da pravi, da je "vse datoteka".

Virtualni datotečni sistemi v Linuxu: zakaj so potrebni in kako delujejo? 1. del

Kaj je datotečni sistem? Na podlagi besed enega prvih sodelavcev in avtorjev Linuxa Roberta Lava, "Datotečni sistem je hierarhična shramba podatkov, sestavljenih v skladu z določeno strukturo." Kakor koli že, ta definicija je enako primerna za VFAT (Virtual File Allocation Table), Git in Cassandra (Baza podatkov NoSQL). Torej, kaj natančno opredeljuje tako stvar kot "datotečni sistem"?

Osnove datotečnega sistema

Jedro Linuxa ima določene zahteve za entiteto, ki jo lahko štejemo za datotečni sistem. Izvajati mora metode open(), read() и write() za obstojne objekte, ki imajo imena. Z objektno usmerjenega vidika programiranje, jedro definira generični datotečni sistem kot abstrakten vmesnik, te tri velike funkcije pa veljajo za "virtualne" in nimajo konkretne definicije. V skladu s tem se privzeta implementacija datotečnega sistema imenuje navidezni datotečni sistem (VFS).

Virtualni datotečni sistemi v Linuxu: zakaj so potrebni in kako delujejo? 1. del

Če lahko entiteto odpremo, beremo in vanjo pišemo, se ta entiteta šteje za datoteko, kot lahko vidimo iz primera v zgornji konzoli.
Fenomen VFS samo poudarja Unixu podobno opažanje, da je "vse datoteka". Pomislite, kako nenavadno je, da zgornji primer /dev/console prikazuje, kako konzola dejansko deluje. Slika prikazuje interaktivno sejo Bash. Pošiljanje niza na konzolo (naprava virtualne konzole) ga prikaže na virtualnem zaslonu. VFS ima druge, še bolj čudne lastnosti. Omogoča vam na primer iskanje po je.

Znani sistemi, kot so ext4, NFS in /proc, imajo v podatkovni strukturi C tri pomembne funkcije, imenovane datoteke_operacije. Poleg tega nekateri datotečni sistemi razširijo in na novo definirajo funkcionalnost VFS na znani objektno usmerjen način. Kot poudarja Robert Love, abstrakcija VFS omogoča uporabnikom Linuxa, da brezskrbno kopirajo datoteke v ali iz operacijskih sistemov tretjih oseb ali abstraktnih entitet, kot so cevi, ne da bi skrbeli za njihov notranji format podatkov. Na strani uporabnika (uporabniški prostor) lahko proces z uporabo sistemskega klica kopira iz datoteke v podatkovne strukture jedra z uporabo metode read() en datotečni sistem in nato uporabite metodo write () drug datotečni sistem za izpis podatkov.

Definicije funkcij, ki pripadajo osnovnim vrstam VFS, so v datotekah fs/*.c izvorna koda jedra, medtem ko podimeniki fs/ vsebujejo določene datotečne sisteme. Jedro vsebuje tudi entitete kot npr cgroups, /dev и tmpfs, ki so potrebni med postopkom zagona in so zato definirani v podimeniku jedra init/. Upoštevajte to cgroups, /dev и tmpfs ne kličite funkcij "velikih treh". file_operations, temveč neposredno branje in pisanje v pomnilnik.
Spodnji diagram prikazuje, kako uporabniški prostor dostopa do različnih vrst datotečnih sistemov, ki so običajno nameščeni v sistemih Linux. Strukture niso prikazane pipes, dmesg и POSIX clocks, ki tudi izvajajo strukturo file_operations, dostopen prek plasti VFS.

Virtualni datotečni sistemi v Linuxu: zakaj so potrebni in kako delujejo? 1. del

VFS je "ovojna plast" med sistemskimi klici in implementacijami določenih file_operations, kot so ext4 и procfs. Funkcije file_operations lahko komunicira z gonilniki naprav ali napravami za dostop do pomnilnika. tmpfs, devtmpfs и cgroups Ne uporabljajte file_operations, vendar neposredno dostopate do pomnilnika.
Obstoj VFS ponuja možnost ponovne uporabe kode, saj osnovnih metod, povezanih z datotečnimi sistemi, ni treba znova implementirati za vsako vrsto datotečnega sistema. Ponovna uporaba kode je pogosta praksa med inženirji programske opreme! Če pa koda za večkratno uporabo vsebuje resne napake, vse izvedbe, ki podedujejo običajne metode, trpijo zaradi njih.

/tmp: Preprost namig

Enostaven način za odkrivanje, ali so v sistemu prisotni VFS, je tipkanje mount | grep -v sd | grep -v :/, ki bo prikazal vse nameščene (mounted) datotečni sistemi, ki niso rezidenčni na disku in niso NFS, kar velja za večino računalnikov. Eden od navedenih nosilcev (mounts) VFS nedvomno bo /tmp, prav?

Virtualni datotečni sistemi v Linuxu: zakaj so potrebni in kako delujejo? 1. del

Vsi poznajo to shranjevanje / tmp na fizičnem mediju - norost! Vir.

Zakaj je nezaželeno shraniti /tmp na fizičnem mediju? Ker datoteke v /tmp so začasni in pomnilniške naprave so počasnejše od pomnilnika, kjer je ustvarjen tmpfs. Poleg tega je fizični medij ob prepisovanju bolj dovzeten za obrabo kot pomnilnik. Nazadnje, datoteke v /tmp lahko vsebujejo občutljive informacije, zato je njihovo izginotje ob vsakem ponovnem zagonu bistvena funkcija.

Na žalost nekateri namestitveni skripti distribucije Linuxa privzeto ustvarijo /tmp na napravi za shranjevanje. Ne obupajte, če se je to zgodilo tudi vašemu sistemu. Sledite nekaj preprostim navodilom z Arch Wikida to popravite, in se zavedajte, da je pomnilnik, dodeljen za tmpfs postane nedosegljiv za druge namene. Z drugimi besedami, sistemu z velikanskim tmpfs in velikimi datotekami lahko zmanjka pomnilnika in se zruši. Še namig: med urejanjem datoteke /etc/fstab, ne pozabite, da se mora končati z novo vrstico, sicer se sistem ne bo zagnal.

/proc in /sys

Poleg tega /tmp, VFS (navidezni datotečni sistemi), ki so najbolj znani uporabnikom Linuxa /proc и /sys. (/dev se nahaja v skupnem pomnilniku in ga nima file_operations). Zakaj ti dve komponenti? Poglejmo to vprašanje.

procfs ustvari posnetek jedra in procesov, ki jih spremlja userspace. V /proc jedro natisne informacije o tem, kaj ima na voljo, kot so prekinitve, navidezni pomnilnik in razporejevalnik. Poleg tega /proc/sys je mesto, kjer so parametri, konfigurirani z ukazom sysctl, na voljo za userspace. Status in statistika posameznih procesov je prikazana v imenikih /proc/.

Virtualni datotečni sistemi v Linuxu: zakaj so potrebni in kako delujejo? 1. del

Tukaj /proc/meminfo je prazna datoteka, ki kljub temu vsebuje dragocene informacije.

Vedenje /proc prikazuje, kako različni so lahko datotečni sistemi diskov VFS. Na eni strani, /proc/meminfo vsebujejo informacije, ki si jih lahko ogledate z ukazom free. Po drugi strani pa je prazna! Kako deluje? Situacija spominja na slavni članek z naslovom Ali luna obstaja, ko je nihče ne gleda? Realnost in kvantna teorija"napisal profesor fizike z univerze Cornell David Mermin leta 1985. Dejstvo je, da jedro zbira statistiko pomnilnika, ko je podana zahteva /proc, in dejansko v datotekah /proc ni ničesar, ko nihče ne gleda. Kot rečeno Mermin, "Temeljna kvantna doktrina pravi, da meritev na splošno ne razkrije obstoječe vrednosti lastnosti, ki se meri." (In upoštevajte vprašanje o luni kot domačo nalogo!)
Navidezna praznina procfs je smiselno, ker so tam informacije dinamične. Nekoliko drugačna situacija z sysfs. Primerjajmo, koliko datotek, ki so velike vsaj en bajt, je v /proc in /sys.

Virtualni datotečni sistemi v Linuxu: zakaj so potrebni in kako delujejo? 1. del

Procfs ima eno datoteko, in sicer izvoženo konfiguracijo jedra, kar je izjema, ker jo je treba ustvariti samo enkrat na zagon. Po drugi strani pa v /sys obstaja veliko večjih datotek, od katerih mnoge zavzamejo celo stran pomnilnika. Običajno datoteke sysfs vsebujejo točno eno številko ali vrstico, za razliko od tabel informacij, pridobljenih z branjem datotek, kot npr /proc/meminfo.

Cilj sysfs - zagotoviti lastnosti branja/pisanja tega, kar kliče jedro «kobjects» v uporabniškem prostoru. Edini cilj kobjects je štetje povezav: ko je odstranjena zadnja povezava do kobjecta, bo sistem obnovil vire, povezane z njim. Kljub temu, /sys sestavlja večino slavnih "stabilen ABI za uporabniški prostor" jedro, ki ga nihče ne more nikoli in pod nobenimi pogoji "zlom". To ne pomeni, da so datoteke v sysfs statične, kar bi bilo v neskladju s štetjem sklicev nestabilnih objektov.
Stabilni ABI jedra omejuje, kaj se lahko pojavi v /sys, ne tisto, kar je dejansko prisotno v tistem trenutku. Navajanje dovoljenj za datoteke v sysfs nudi vpogled v to, kako nastavljive nastavitve za naprave, module, datotečne sisteme itd. lahko konfigurirate ali berete. Logičen sklep je, da je procfs tudi del stabilnega ABI jedra, čeprav to ni izrecno navedeno v dokumentacijo.

Virtualni datotečni sistemi v Linuxu: zakaj so potrebni in kako delujejo? 1. del

Datoteke v sysfs opisujejo eno posebno lastnost za vsako entiteto in so lahko berljive, zapisljive ali oboje. »0« v datoteki pomeni, da SSD-ja ni mogoče odstraniti.

Začnimo drugi del prevoda s tem, kako spremljati VFS z orodji eBPF in bcc, zdaj pa čakamo na vaše komentarje in vas tradicionalno vabimo na odprt webinar, ki ga bo vodila naša učiteljica 9. aprila - Vladimir Drozdetski.

Vir: www.habr.com

Dodaj komentar