Virtuaalsed failisüsteemid Linuxis: miks neid vaja on ja kuidas need töötavad? 1. osa

Tere kõigile! Jätkame uute voogude käivitamist kursustele, millesse olete juba armunud ja nüüd kiirustame teatama, et alustame uue kursuste komplektiga "Linuxi administraator"mis käivitatakse aprilli lõpus. Selle sündmuse kohta avaldatakse uus väljaanne. Algmaterjaliga saate loe siit.

Virtuaalsed failisüsteemid toimivad omamoodi maagilise abstraktsioonina, mis lubab Linuxi filosoofias öelda, et "kõik on fail".

Virtuaalsed failisüsteemid Linuxis: miks neid vaja on ja kuidas need töötavad? 1. osa

Mis on failisüsteem? Põhineb ühe Linuxi esimese kaastöölise ja autori sõnadel Roberta Lava, "Failisüsteem on kindla struktuuri järgi kokku pandud andmete hierarhiline salvestusruum." Olgu kuidas on, see definitsioon sobib võrdselt hästi VFAT-i (Virtual File Allocation Table), Giti ja Cassandra (NoSQL andmebaas). Mis siis täpselt määratleb sellist asja kui "failisüsteem"?

Failisüsteemi põhitõed

Linuxi tuumal on teatud nõuded olemile, mida võib pidada failisüsteemiks. See peab meetodeid rakendama open(), read() и write() püsivate objektide jaoks, millel on nimed. Objektorienteeritud vaatepunktist programmeerimine, defineerib kernel üldise failisüsteemi abstraktse liidesena ja neid kolme suurt funktsiooni peetakse "virtuaalseteks" ja neil puudub konkreetne definitsioon. Sellest lähtuvalt nimetatakse failisüsteemi vaikerakendust virtuaalseks failisüsteemiks (VFS).

Virtuaalsed failisüsteemid Linuxis: miks neid vaja on ja kuidas need töötavad? 1. osa

Kui suudame olemit avada, lugeda ja sellele kirjutada, loetakse seda olemit failiks, nagu näeme ülaltoodud konsooli näitest.
VFS-nähtus rõhutab ainult Unixi-laadset tähelepanekut, et "kõik on fail". Mõelge, kui imelik, et ülaltoodud väike /dev/console näide näitab, kuidas konsool tegelikult töötab. Pildil on interaktiivne Bashi seanss. Stringi saatmisel konsooli (virtuaalkonsooli seadmesse) kuvatakse see virtuaalsel ekraanil. VFS-il on muid, veelgi kummalisemaid omadusi. Näiteks võimaldab see otsida järgi see.

Tuntud süsteemidel, nagu ext4, NFS ja /proc, on C-andmestruktuuris kolm olulist funktsiooni. faili_operatsioonid. Lisaks laiendavad ja määratlevad teatud failisüsteemid VFS-i funktsionaalsust tuttaval objektorienteeritud viisil. Nagu Robert Love märgib, võimaldab VFS-i abstraktsioon Linuxi kasutajatel kopeerida faile kolmanda osapoole operatsioonisüsteemidesse või abstraktsetest üksustest, näiteks torudest, ilma nende sisemise andmevormingu pärast muretsemata. Kasutaja poolel (kasutajaruumis) saab protsess süsteemikutset kasutades kopeerida failist kerneli andmestruktuuridesse, kasutades meetodit read() ühte failisüsteemi ja seejärel kasutage meetodit write () teine ​​failisüsteem andmete väljastamiseks.

Funktsioonide definitsioonid, mis kuuluvad VFS-i põhitüüpidesse, on failides fs/*.c kerneli lähtekood, samas kui alamkataloogid fs/ sisaldavad teatud failisüsteeme. Tuum sisaldab ka selliseid üksusi nagu cgroups, /dev и tmpfs, mis on alglaadimise käigus vajalikud ja on seetõttu määratletud kerneli alamkataloogis init/. Märka seda cgroups, /dev и tmpfs ära kutsu "kolme suure" funktsioone file_operations, vaid lugeda ja kirjutada otse mällu.
Allolev diagramm näitab, kuidas kasutajaruum pääseb ligi erinevat tüüpi failisüsteemidele, mida tavaliselt Linuxi süsteemidesse paigaldatakse. Struktuure pole näidatud pipes, dmesg и POSIX clocks, mis rakendavad ka struktuuri file_operations, millele pääseb juurde VFS-kihi kaudu.

Virtuaalsed failisüsteemid Linuxis: miks neid vaja on ja kuidas need töötavad? 1. osa

VFS on "ümbriskiht" süsteemikutsete ja teatud rakenduste vahel file_operationsNagu ext4 и procfs. Funktsioonid file_operations saab suhelda kas seadme draiverite või mälu juurdepääsu seadmetega. tmpfs, devtmpfs и cgroups ära kasuta file_operations, kuid pääseb otse mälule juurde.
VFS-i olemasolu annab võimaluse koodi taaskasutada, kuna failisüsteemidega seotud põhimeetodeid ei pea iga failisüsteemi tüüp uuesti juurutama. Koodi taaskasutamine on tarkvarainseneride seas levinud praktika! Kui aga korduvkasutatav kood sisaldab tõsiseid vigu, kannatavad nende all kõik rakendused, mis pärivad levinud meetodeid.

/tmp: lihtne vihje

Lihtne viis VFS-i tuvastamiseks süsteemis on tippimine mount | grep -v sd | grep -v :/, mis näitab kõiki ühendatud (mounted) failisüsteemid, mis ei ole kettaresidendid ja mitte-NFS, mis kehtib enamiku arvutite puhul. Üks loetletud kinnitustest (mounts) VFS kahtlemata /tmp, eks?

Virtuaalsed failisüsteemid Linuxis: miks neid vaja on ja kuidas need töötavad? 1. osa

Kõik teavad seda ladustamist / tmp füüsilisel kandjal - hullus! Allikas.

Miks on ebasoovitav säilitada /tmp füüsilisel andmekandjal? Kuna failid sisse /tmp on ajutised ja salvestusseadmed on aeglasemad kui mälu, kus tmpfs luuakse. Veelgi enam, füüsiline kandja on ülekirjutamisel vastuvõtlikum kulumisele kui mälu. Lõpuks võivad /tmp-s olevad failid sisaldada tundlikku teavet, nii et nende kadumine igal taaskäivitamisel on oluline funktsioon.

Kahjuks loovad mõned Linuxi levitamise installiskriptid vaikimisi salvestusseadmesse faili /tmp. Ärge heitke meelt, kui see juhtus ka teie süsteemiga. Järgige mõnda lihtsat juhist Arch Wikiselle parandamiseks ja pidage meeles, et mälu jaoks on eraldatud tmpfs muutub muudel eesmärkidel kättesaamatuks. Teisisõnu, süsteemil, millel on hiiglaslik tmpfs ja suured failid, võib mälu tühjaks saada ja see jookseb kokku. Veel üks vihje: faili redigeerimise ajal /etc/fstab, pidage meeles, et see peab lõppema reavahetusega, vastasel juhul teie süsteem ei käivitu.

/proc ja /sys

peale /tmp, VFS (virtuaalsed failisüsteemid), mis on Linuxi kasutajatele kõige tuttavamad /proc и /sys. (/dev asub ühismälus ja seda ei ole file_operations). Miks need kaks komponenti? Uurime seda küsimust.

procfs loob hetktõmmise kernelist ja protsessidest, mida see jälgib userspace. Sisse /proc kernel prindib teavet selle kohta, mis tal on saadaval, näiteks katkestused, virtuaalmälu ja ajakava. Pealegi, /proc/sys on koht, kus käsuga konfigureeritud parameetrid sysctl, saadaval userspace. Üksikute protsesside olek ja statistika kuvatakse kataloogides /proc/.

Virtuaalsed failisüsteemid Linuxis: miks neid vaja on ja kuidas need töötavad? 1. osa

see on /proc/meminfo on tühi fail, mis sisaldab siiski väärtuslikku teavet.

Käitumine /proc failid näitavad, kui erinevad võivad olla VFS-ketta failisüsteemid. Ühelt poolt /proc/meminfo sisaldavad teavet, mida saab käsuga vaadata free. Teisest küljest on see tühi! Kuidas see töötab? Olukord meenutab kuulsat artiklit pealkirjaga Kas kuu on olemas, kui keegi seda ei vaata? Reaalsus ja kvantteooria"kirjutas Cornelli ülikooli füüsikaprofessor David Mermin 1985. aastal. Fakt on see, et kernel kogub päringu esitamisel mälustatistikat /proc, ja tegelikult failides /proc pole midagi, kui keegi ei vaata. Nagu öeldud Mermin, "Fundamentaalne kvantdoktriin ütleb, et mõõtmine ei näita üldiselt mõõdetava omaduse olemasolevat väärtust." (Ja pidage küsimust Kuu kohta kodutööks!)
Näiline tühjus procfs on mõistlik, sest sealne teave on dünaamiline. Veidi teistsugune olukord koos sysfs. Võrdleme, kui paljudes failides on vähemalt üks bait /proc ja /sys.

Virtuaalsed failisüsteemid Linuxis: miks neid vaja on ja kuidas need töötavad? 1. osa

Procfs sellel on üks fail, nimelt eksporditud kerneli konfiguratsioon, mis on erand, kuna see tuleb alglaadimise kohta genereerida ainult üks kord. Teisest küljest sisse /sys on palju suuremaid faile, millest paljud võtavad terve lehekülje mälu. Tavaliselt failid sysfs sisaldavad täpselt ühte numbrit või rida, erinevalt selliste failide lugemisest saadud teabe tabelitest nagu /proc/meminfo.

Eesmärk sysfs - pakkuda lugemis-/kirjutusomadusi, mida kernel kutsub «kobjects» kasutajaruumis. Ainus eesmärk kobjects on linkide loendamine: kui viimane link kobjectile eemaldatakse, taastab süsteem sellega seotud ressursid. Sellegipoolest /sys moodustab suurema osa kuulsatest "stabiilne ABI kasutajaruumi jaoks" tuum, mida keegi kunagi, mitte mingil juhul ei saa "katkema". See ei tähenda, et failid sysf-is oleksid staatilised, mis oleks vastuolus ebastabiilsete objektide viiteloendusega.
Kerneli stabiilne ABI piirab seda, milles võib ilmuda /sys, mitte see, mis sellel konkreetsel hetkel tegelikult olemas on. Failide õiguste loetlemine sysf-is annab ülevaate seadmete, moodulite, failisüsteemide jne seadistatavatest sätetest. saab seadistada või lugeda. Loogiline järeldus on, et procfs on samuti osa kerneli stabiilsest ABI-st, kuigi seda pole sõnaselgelt öeldud dokumentatsioon.

Virtuaalsed failisüsteemid Linuxis: miks neid vaja on ja kuidas need töötavad? 1. osa

Failid sisse sysfs kirjeldavad iga olemi jaoks ühte kindlat omadust ja võivad olla loetavad, kirjutatavad või mõlemad. "0" failis tähendab, et SSD-d ei saa eemaldada.

Alustame tõlke teist osa sellest, kuidas jälgida VFS-i eBPF ja bcc tööriistade abil ning nüüd ootame teie kommentaare ja kutsume teid traditsiooniliselt avatud veebiseminar, mis toimub meie õpetaja poolt 9. aprillil - Vladimir Drozdetski.

Allikas: www.habr.com

Lisa kommentaar