Virtuaalsed failisüsteemid Linuxis: miks need on vajalikud ja kuidas need töötavad? Osa 1

Tere kõigile! Me jätkame uute voogude käivitamist juba teie poolt armastatud kursustel ning me kiirustame teatama, et algab uus grupp kursusel „Linuxi administraator“, mis käivitub aprilli lõpus. Selle sündmuse puhul avaldame ka uue artikli. Originaaliga saab tutvuda siin.

Virtuaalsed failisüsteemid toimivad mingi maagilise abstraktsioonina, mis võimaldab Linuxi filosoofial öelda, et "kõik on fail".

Virtuaalsed failisüsteemid Linuxis: miks need on vajalikud ja kuidas need töötavad? Osa 1

Mis on failisüsteem? Tuginedes ühe esimesest Linuxi kaastöötajast ja autorist Robert Laval, "Failisüsteem on hierarhiline andmete salvestamise struktuur, mis on üles ehitatud kindla struktuuri järgi." Kuidas iganes, see määratlus sobib sama hästi VFAT-i (Virtuaalne Faili Jagamise Tabel), Git-i ja Cassandra (NoSQL andmebaasi). Mis siis täpselt määratleb kontseptsiooni "failisüsteem"?

Failisüsteemi alused

Linuxi tuumal on teatud nõuded sellele, mis võib lugeda failisüsteemiks. See peab rakendama meetodeid open(), read() ja write() püsivatele objektidele, millel on nimed. Objektorienteeritud programmeerimise seisukohalt, tuum määrab üldise failisüsteemi (generic filesystem) kui abstraktse liidese, samas kui need kolm suurt funktsiooni peetakse "virtuaalseteks" ning neil ei ole kindlat määratlust. Vastavalt sellele nimetatakse vaikefailisüsteemi virtuaalseks failisüsteemiks (VFS).

Virtuaalsed failisüsteemid Linuxis: miks need on vajalikud ja kuidas need töötavad? Osa 1

Kui me saame avada, lugeda ja kirjutada üksusesse, siis seda üksust peetakse failiks, nagu näeme eespool konsolideeritud näitest.
VFS fenomen ainult rõhutab tähelepanekut, mis on iseloomulik Unix-i sarnastele süsteemidele ning ütleb, et "kõik on fail". Mõelge, kui kummaline on, et eespool toodud väike näide /dev/console näitab, kuidas tõeliselt konsol töötab. Pildil on kujutatud interaktiivne Bash seanss. Rea saatmine konsooli (virtuaalne konsooli seade) kuvab selle virtuaalsel ekraanil. VFS-l on muidki veel kummalisemaid omadusi. Näiteks võimaldab see otsida neid.

Meile tuttavad süsteemid, nagu ext4, NFS ja /proc, omavad kolme olulist funktsiooni andmestruktuuris C, mida nimetatakse file_operations. Lisaks laiendavad ja ületavad teatud failisüsteemid VFS-i funktsioone tuttaval objekt-orienteeritud viisil. Nagu märgib Robert Love, võimaldab VFS-i abstraktsioon Linuxi kasutajatel väliste operatsioon süsteemide või abstraktsete entiteetide, nagu torud, mugavalt faile kopeerida, muretsemata nende sisemise andmeformaadi üle. Kasutajapoolsetelt (userspace) süsteemi kõne abil võib protsess kopeerida failist andmestruktuuridesse tuuma, kasutades meetodit read() ühe failisüsteemi, ja seejärel kasutada meetodit write () teise failisüsteemi andmete väljastamiseks.

VFS-i põhivormidega seotud funktsioonide määratlemised asuvad failides fs/*.c tuuma allikakoodis, samas kui alamkaustad fs/ sisaldavad teatud failisüsteeme. Tuumas on ka sellised üksused nagu cgroups, /dev ja tmpfs, mis on vajalikud käivitamisprotsessis ja seetõttu määratletud tuuma alamkaustas init/. Pange tähele, et cgroups, /dev ja tmpfs ei kutsu esile „suurt kolme” funktsiooni file_operations, vaid loevad ja kirjutavad otse mällu.
Allpoololeval diagrammil on näidatud, kuidas userspace suunab erinevatele failisüsteemide tüüpidele, mida tavaliselt mount’itakse Linuxi süsteemides. Selliseid konstruktsioone nagu torud, dmesg ja POSIX kellad, mis samuti rakendavad struktuuri file_operations, mille juurde pääseb läbi VFS kihi.

Virtuaalsed failisüsteemid Linuxis: miks need on vajalikud ja kuidas need töötavad? Osa 1

VFS on süsteemi kõnede ja teatud file_operations, nagu ext4 ja procfsrakenduste vahel asuv "kestakiht". Funktsioonid file_operations nõuavad suhtlemist kas seadme draiverite või mälupääsu seadmetega. tmpfs, devtmpfs ja cgroups ei kasuta file_operations, ja pöörduvad otse mälu poole.
VFS olemasolu võimaldab koodi taaskasutamist, kuna failisüsteemide põhimeetodeid ei pea iga failisüsteemi tüüp uuesti rakendama. Koodi taaskasutamine on tarkvaraarendajate seas laialdaselt kasutatav praktika! Kuid kui taaskasutatav kood sisaldab tõsiseid vigu, siis kannatavad kõik rakendused, mis pärivad ühised meetodid.

/tmp: Простая подсказка

Lihtne viis VFS-i süsteemis tuvastamiseks on sisestada mount | grep -v sd | grep -v :/, mis kuvab kõik mountitud (mountitud) failussüsteemid, mis ei ole diskil residentide ega NFS, mis kehtib enamiku arvutite kohta. Üks loetletud mountidestmounts) VFS, on kindlasti /tmp, eks?

Virtuaalsed failisüsteemid Linuxis: miks need on vajalikud ja kuidas need töötavad? Osa 1

Kõik teavad, et salvestamine / tmp füüsilisel mediaal on hullus! Allikas.

Miks ei ole soovitatav salvestada /tmp füüsilisel mediaal? Sest failid /tmp on ajutised ja salvestusseadmed on aeglasemad kui mälu, kus tmpfs luuakse. Veelgi enam, füüsilised mediaalid on kirjutamise ajal kulumise suhtes tundlikumad kui mälu. Lõpuks võivad failid "/tmp" sisaldada konfidentsiaalset teavet, seega on nende kadumine igal taaskäivitamisel hädavajalik funktsioon.

Kahjuks loovad mõned Linuxi distributiivide installimise skriptid "/tmp" salvestusseadmel vaikimisi. Ära muretse, kui see juhtus ka sinu süsteemiga. Järgige mõnda lihtsat juhist Arch Wiki, et seda parandada, ja pidage meeles, et mälu, mis on eraldatud tmpfs saab olema teisteks eesmärkideks nüüd kättesaamatuks. Teisisõnu, süsteem, millel on hiiglaslik tmpfs ja suured failid, võib tarbida kogu mälu ja kukkuda. Veel üks vihje: faili redigeerimise ajal /etc/fstab, pidage meeles, et see peab lõppema uue reaga, vastasel juhul teie süsteem ei käivitu.

/proc и /sys

Lisaks /tmp, VFS (virtuaalsed failisüsteemid), millega on kõige tuttavamad Linuxi kasutajad – need on /proc ja /sys. (/dev asub ühisess mälu ja ei ole file_operations). Miks just need kaks komponenti? Vaatame seda küsimust lähemalt.

procfs loomiseks hetkeseisu tuuma ja protsesside kohta, mida see jälgib kasutajaruumi. Dokumendihalduses /proc tuum väljastab teavet selle kohta, millised vahendid tal on, näiteks katked, virtuaalne mälu ja ajakava. Lisaks sellele /proc/sys – see on koht, kus parameetrid, mida saab seadistada käsuga sysctl, on kergesti kättesaadavad kasutajaruumi. Üksikute protsesside olek ja statistika väljastatakse kataloogides /proc/.

Virtuaalsed failisüsteemid Linuxis: miks need on vajalikud ja kuidas need töötavad? Osa 1

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

Käitumine /proc failide näitab, kui erinevad võivad olla VFS diskifailisüsteemid. Ühelt poolt, /proc/meminfo sisaldavad teavet, mida saab vaadata käsuga free. Teiselt poolt on seal tühi! Kuidas see võimalik on? See olukord meenutab kuulsat artiklit nimega «Kas kuu eksisteerib, kui keegi seda ei vaata? Reaalsus ja kvantteooria», mille on kirjutanud teiste seas füüsika professor Cornell'i ülikoolis David Mermin 1985. aastal. Asi on selles, et tuuma kogub mälu statistikat, kui toimub päring /proc, ja tegelikult ei ole failides /proc midagi, kui keegi sinna ei vaata. Just nagu ütles Mermin, „Fundamentalne kvantdoktriin ütleb, et mõõtmine enamasti ei paljasta enne olemas olnud mõõdetava omaduse väärtust.” (Ja mõelge kuu küsimusele kodutööna!)
Paistmatu tühjus procfs on mõistetav, kuna sealne informatsioon on dünaamiline. Veidi teistsugune on olukord sysfs. Vaatame, kui palju faile, mille suurus on vähemalt üks bait, on /proc ja /sys.

Virtuaalsed failisüsteemid Linuxis: miks need on vajalikud ja kuidas need töötavad? Osa 1

Procfs on üks fail, nimelt eksportitud tuuma konfiguratsioon, mis on erand, kuna seda tuleb genereerida ainult üks kord iga käivituse ajal. Teiselt poolt, on /sys on palju mahukamaid faile, millest paljud hõivavad terve mälu. Tüüpiliselt sisaldavad failid sysfs täpselt ühte numbrit või rida, erinevalt teabe tabelitest, mis saadakse selliste failide lugemisega, nagu /proc/meminfo.

Eesmärk sysfs – pakkuda omadusi, mis on loetavad ja kirjutatavad, mida tuum nimetab «kobjektideks» kasutajaruumi. Ainus eesmärk kobjektide on viidete arvestamine: kui viimane viide kobjektile eemaldatakse, taastab süsteem sellega seotud ressursid. Sellegipoolest /sys moodustab suure osa tuntud «stabiilsest ABI-st kasutajaruumi» tuumas, mida ei saa kunagi, mitte mingil juhul «purustada». See ei tähenda, et failid sysfs-is on staatilised, mis oleks vastuolus ebastabiilsete objektide viidete arvestamisega.
Tuuma stabiilne binaarliides (kernel’s stable ABI) piirab seda, mis võib ilmuda /sys, mitte see, mis tegelikult antud hetkel olemas on. Sysfs'i faili õiguste loetelu aitab mõista, kuidas seadmete, moodulite, failisüsteemide jne konfigureeritavad parameetrid saavad olla seadistatud või loetud. Jõuame loogilise järelduseni, et procfs on samuti osa stabiilsest ABI tuumast, kuigi see ei ole otseselt märgitud dokumentatsioonis.

Virtuaalsed failisüsteemid Linuxis: miks need on vajalikud ja kuidas need töötavad? Osa 1

Failid sysfs kirjeldavad iga üksuse konkreetset omadust ja need võivad olla loetavad, kirjutatavad või mõlemad. Failis olev "0" viitab sellele, et SSD-d ei saa eemaldada.

Teise osa tõlget alustame sellega, kuidas jälgida VFS'i eBPF ja bcc tööriistade abil, ning praegu ootame teie kommentaare ja traditsiooniliselt kutsume teid avatud veebinarile, mida juba 9. aprillil läbi viib meie õpetaja — Vladimir Drozdetski.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster