Tere kõik! Jätkame uute voogude käivitamist juba armastatud kursustel ja nüüd kiirustame teavitama, et meil algab uus vabastamine kursusele , mis algab aprilli lõpus. Sellele sündmusele on pühendatud uus avaldus. Originaalmaterjaliga saab .
Virtuaalsed failisüsteemid täidavad teatud maagilise abstraktsiooni rolli, mis võimaldab Linuxi filosoofial öelda, et "kõik on fail".

Mis on failisüsteem? Tuginedes ühe varasema Linuxi kaastöötaja ja autori , "Failisüsteem on hierarhiline andmete hoidla, mis on kogutud vastavalt määratud struktuurile." Kuidas iganes see ka ei oleks, sobib see määratlus võrdselt hästi VFAT-i (Virtuaalne Faili Jagamise Tabel), Giti ja (). Nii et mis määratleb sellise mõiste nagu "failisüsteem"?
Failisüsteemi alused
Linuxi tuumal on teatud nõuded sellele, mis võib olla failisüsteem. See peab rakendama meetodeid open(), read() ja write() püsivatele objektidele, millel on nimed. Olles objektorienteeritud , määratleb tuum üldistatud failisüsteemi (generic filesystem) abstraktse liidese kujul, ning need kolm suurt funktsiooni peetakse "virtuaalseteks" ja neil pole konkreetset määratlust. Vastavalt sellele nimetatakse vaikimisi rakendust failisüsteemiks virtuaalseks failisüsteemiks (VFS).

Kui me saame avada, lugeda ja kirjutada subjekti, siis peetakse seda objekti failiks, nagu näeme eespool toodud näitest.
VFS fenomen rõhutab tähelepanekut, mis on iseloomulik Unix-laadsetele süsteemidele, mis ütleb, et "kõik on fail." Mõelge, kui kummaline on, et see väike näide ülalpool /dev/console näitab, kuidas tegelikult konsool töötab. Pildil on kujutatud interaktiivne Bash sessioon. Rida konsooli (virtuaalne konsooli seade) kuvab selle virtuaalsel ekraanil. VFS-l on veelgi kummalisemaid omadusi. Näiteks võimaldab see otsingut läbi .
Meile teadaolevad süsteemid, nagu ext4, NFS ja /proc, omavad kolme olulist funktsiooni C-ande struktuuris, mida nimetatakse . Lisaks laiendavad teatud failisüsteemid VFS funktsioone objektorienteeritud viisil. Nagu Robert Love märkis, võimaldab VFS abstraktsioon Linuxi kasutajatel muretu failide kopeerimist sisse või välja välisest operatsioonisüsteemist või abstraktsetest üksustest, nagu torud, muretsemata nende sisedatade formaadi pärast. Kasutaja (userspace) tasandil saab protsess süsteemi kutse abil kopeerida faili kernel'i andmestruktuuridesse meetodi read() ühest failisüsteemist, ja seejärel kasutada meetodit write () teise failisüsteemi jaoks andmete väljundiks.
VFS põhiliikmete funktsioonide määratlemised asuvad tuumakoodi failides , samas kui alakaustad fs/ sisaldavad konkreetseid failisüsteeme. Tuumas on ka sellised üksused nagu cgroups, /dev ja tmpfs, mis on vajalikud käivitusprotsessis ja seetõttu määratletakse tuuma alakaustas init/. Pange tähele, et cgroups, /dev ja tmpfs ei kutsu välja 'suurt kolmikku' funktsioone file_operations, vaid loevad ja kirjutavad mälu otse.
Alloleval joonisel on näidatud, kuidas userspace pääseb ligi erinevatele failisüsteemidele, mis on tavaliselt mountitud Linuxi süsteemides. Ei ole näidatud konstruktsioone nagu torud, dmesg ja POSIX kellad, mis rakendavad samuti struktuuri file_operations, millele pääseb ligi VFS kihi kaudu.

VFS on 'kest' süsteemi kutsude ja teatud rakenduste määratlemise vahel file_operations, nagu ext4 ja procfs. Funktsioonid file_operations võivad suhelda kas seadme draiveritega või mälu pääseseadmetega. tmpfs, devtmpfs ja cgroups seda tehnoloogiat, kuid teenivad 15% rohkem raha. file_operations, ning pöörduvad mällu otse.
VFS olemasolu tagab koodi taaskasutamise võimaluse, kuna faili süsteemidega seotud põhimeetodeid ei pea iga failisüsteemi poolt uuesti rakendama. Koodi taaskasutamine on laialdaselt rakendatav praktika tarkvarainsenerite seas! Siiski, kui taaskasutatav kood sisaldab , kannatavad kõik rakendused, mis pärivad ühiseid meetodeid.
/tmp: Простая подсказка
Lihtne viis VFS-i süsteemis kinnitamiseks on sisestada mount | grep -v sd | grep -v :/, mis näitab kõiki monteeritud (mounted) failisüsteeme, mis ei ole residentid kettal ega NFS, mis kehtib enamikul arvutitel. Üks loetletud mountidest (mounts) VFS-is on kindlasti /tmp, eks ole?

Kõik teavad, et andmete salvestamine / tmp füüsilisel kandjal on meeletus! .
Miks ei soovitata andmeid salvestada /tmp füüsilisel kandjal? Sest failid kaustas /tmp on ajutised ja salvestusseadmed on aeglasemad kui mälu, kus luuakse tmpfs. Veelgi enam, füüsilised kandjad on jälle kordamisel rohkem kulumise all. Lõpuks sisaldavad kaustas /tmp olevad failid konfidentsiaalset teavet, seetõttu on nende kadumine iga kord, kui süsteemi taaskäivitada, hädavajalik funktsioon.
Kahjuks loovad mõned Linuxi distributsioonide installatsiooniskripti seadistused kaustas /tmp vaikimisi. Ärge muretsege, kui see juhtus ka teie süsteemiga. Järgige mõningaid lihtsaid juhiseid aadressilt , et see parandada ja pidage meeles, et mälu, mis on jagatud kaustale, tmpfs muutub teiste eesmärkide jaoks kättesaamatuks. Teisisõnu, süsteem, millel on tohutu tmpfs ja suured failid, võib ära kulutada kogu mälu ja kukkuda. Teine 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 Linuxi kasutajad on kõige paremini tuttavad, asuvad /proc ja /sys. (/dev ühisuses mälu ja ei oma file_operations). Miks just need kaks komponenti? Vaatame seda küsimust lähemalt.
procfs teeb töötava tuuma ja protsesside, mida see jälgib, pilti kõigest, mis tal juhtimise all on userspace. Failis /proc tuum esitab teavet selle kohta, millised ressursid tal on, näiteks katkestused, virtuaalmälu ja ajakava. Lisaks sellele, /proc/sys on koht, kus parameetrid, mille konfiguratsiooni määravad kommandod sysctl, on kergesti ligipääsetavad userspace. Üksikute protsesside olek ja statistika väljastatakse kataloogides /proc/.

Siin /proc/meminfo — see on tühi fail, mis sisaldab ometi väärtuslikku teavet.
Käitumine /proc failide osas näitab, kui erinevad võivad olla VFS diskifailisüsteemid. Ühest küljest, /proc/meminfo sisaldavad teavet, mida saab vaadata käsuga free. Teiselt poolt, seal on tühjus! Kuidas see on võimalik? See olukord meenutab kuulsat artiklit pealkirjaga , mille kirjutas 1985. aastal Cornelli Ülikooli füüsika professor David Mermin. Asi on selles, et tuum kogub mälu statistikat, kui tehakse päring kausta /proc, ja tegelikult failides. /proc ei ole midagi, kui keegi sinna ei vaata. Nagu ütles , "Fundamentaalne kvantdoktriin ütleb, et mõõtmine ei avalda tavaliselt enne eksisteerinud mõõdetava omaduse väärtust." (Ja mõelge kuule kui kodutöö küsimusele!)
Tunduv tühjus procfs on mõistetav, kuna sealne informatsioon on dünaamiline. Pisut teine olukord on sysfs. Võrrelgem, kui palju vähemalt ühe baitiga faile on /proc ja /sys.

Procfs sisaldab üht faili, nimelt eksporditud tuuma konfiguratsiooni, mis on erand, kuna seda tuleb genereerida ainult ühel korral iga käivitamise ajal. Teiselt poolt on /sys palju mahukamaid faile, millest paljud võtavad kogu mälu lehe. Tüüpiliselt sisaldavad failid sysfs just ühte numbrit või stringi, erinevalt informatsiooni tabelitest, mis saadakse selliste failide lugemisel nagu /proc/meminfo.
Eesmärk sysfs – pakuvad omadusi, mis on loetavad ja kirjutatavad, mida tuum nimetab "kobjects" kasutajate ruumis. Ainus eesmärk kobjects on viidete arv: kui viimane viide kobjectile eemaldatakse, vabastab süsteem sellega seotud ressursid. Siiski, /sys moodustab suure osa tuntud tuumas, mida keegi kunagi, mitte mingitel asjaoludel, ei saa See ei tähenda, et failid sysfs-s oleksid staatilised, mis oleks vastupidine viidete arvestusele ebastabiilsete objektide kohta.
Tuuma stabiilne rakendusliidese (kernel's stable ABI) piirab seda, mis võib ilmuda /sys, mitte seda, mis tegelikult selles konkreetses hetkes kohal on. Failide lubade loend sysfs-s annab arusaama sellest, kuidas seadmete, moodulite, failisüsteemide jne konfiguratsiooniparameetreid saab seadistada või lugeda. Teeme loogilise järelduse, et procfs on samuti osa tuuma stabiilsest ABI-st, kuigi see ei ole selgelt mainitud .

Failid sysfs kujundavad iga üksuse jaoks üht konkreetset omadust ja võivad olla loetavad, kirjutatavad või mõlemad korraga. "0" failis näitab, et SSD-d ei saa eemaldada.
Teise osa tõlget alustame sellest, kuidas jälgida VFS-i eBPF ja bcc tööriistade abil, ja nüüd ootame teie kommentaare ning traditsiooniliselt kutsume teid , mille juba 9. aprillil viib läbi meie õpetaja — .
Allikas: habr.com
