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 ki se bo začela konec aprila. Ob tem dogodku bo objavljena nova publikacija. Z izvirnim materialom lahko .
Virtualni datotečni sistemi delujejo kot nekakšna magična abstrakcija, ki omogoča filozofijo Linux reči, da je "vse datoteka".

Kaj je datotečni sistem? Po mnenju enega prvih sodelavcev in avtorjev Linux , "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 (). Torej, kaj natančno opredeljuje tako stvar kot "datotečni sistem"?
Osnove datotečnega sistema
Core Linux ima določene zahteve, da se entiteta šteje za datotečni sistem. Implementirati mora metode open(), read() и write() za obstojne objekte, ki imajo imena. Z objektno usmerjenega vidika , 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).

Č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 .
Znani sistemi, kot so ext4, NFS in /proc, imajo v podatkovni strukturi C tri pomembne funkcije, imenovane Poleg tega nekateri datotečni sistemi razširjajo in ponovno implementirajo funkcionalnost VFS na znan objektno usmerjen način. Kot ugotavlja Robert Love, abstrakcija VFS uporabnikom omogoča Linux Brezskrbno kopirajte datoteke v in iz operacijskih sistemov tretjih oseb ali abstraktnih entitet, kot so cevi, ne da bi vas skrbela njihova notranja oblika podatkov. Z uporabniške strani (uporabniškega prostora) lahko proces kopira iz datoteke v podatkovne strukture jedra z uporabo sistemskega klica. 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 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 na sistemih. LinuxKonstrukcije, ki niso prikazane pipes, dmesg и POSIX clocks, ki tudi izvajajo strukturo file_operations, dostopen prek plasti VFS.

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

Vsi poznajo to shranjevanje / tmp na fizičnem mediju - norost! .
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.
Žal nekatere namestitvene skripte Linux Distribucije privzeto ustvarijo /tmp na napravi za shranjevanje. Ne obupajte, če se to zgodi vašemu sistemu. Sledite nekaj preprostim navodilom z da 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 (virtualni datotečni sistemi), ki so uporabnikom najbolj znani Linux - Je /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/.

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

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 jedro, ki ga nihče ne more nikoli in pod nobenimi pogoji . 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 .

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 , ki ga bo vodila naša učiteljica 9. aprila - .
Vir: www.habr.com
