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
Virtualni datotečni sistemi služijo kot nekakšna magična abstrakcija, ki omogoča filozofiji Linuxa, da pravi, da je "vse datoteka".
Kaj je datotečni sistem? Na podlagi besed enega prvih sodelavcev in avtorjev Linuxa
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
Č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 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/
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.
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
/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.
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 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/
.
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 /proc
, in dejansko v datotekah /proc
ni ničesar, ko nihče ne gleda. Kot rečeno
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
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
Vir: www.habr.com