Virtuaaliset tiedostojärjestelmät Linuxissa: miksi niitä tarvitaan ja miten ne toimivat? Osa 1

Hei kaikki! Jatkamme uusien streamien käynnistämistä kursseille, joihin olet jo ihastunut, ja nyt meillä on kiire ilmoittaa, että aloitamme uuden kurssisarjan "Linux-järjestelmänvalvoja"joka käynnistyy huhtikuun lopussa. Tätä tapahtumaa varten päivätään uusi julkaisu. Alkuperäisellä materiaalilla voit lue tästä.

Virtuaaliset tiedostojärjestelmät toimivat eräänlaisena maagisena abstraktiona, jonka avulla Linuxin filosofia voi sanoa, että "kaikki on tiedostoa".

Virtuaaliset tiedostojärjestelmät Linuxissa: miksi niitä tarvitaan ja miten ne toimivat? Osa 1

Mikä on tiedostojärjestelmä? Perustuu yhden Linuxin ensimmäisistä avustajista ja kirjoittajista sanoihin Roberta Lava, "Tiedostojärjestelmä on tietyn rakenteen mukaan koottu tietojen hierarkkinen tallennus." Oli miten oli, tämä määritelmä sopii yhtä hyvin VFAT:lle (Virtual File Allocation Table), Gitille ja Cassandra (NoSQL-tietokanta). Joten mikä tarkalleen määrittelee sellaisen asian kuin "tiedostojärjestelmä"?

Tiedostojärjestelmän perusteet

Linux-ytimellä on tiettyjä vaatimuksia entiteetille, jota voidaan pitää tiedostojärjestelmänä. Sen on toteutettava menetelmät open(), read() и write() pysyville objekteille, joilla on nimet. Oliolähtöisestä näkökulmasta ohjelmointi, ydin määrittelee yleisen tiedostojärjestelmän abstraktiksi käyttöliittymäksi, ja näitä kolmea suurta funktiota pidetään "virtuaalisina" eikä niillä ole konkreettista määritelmää. Vastaavasti oletustiedostojärjestelmän toteutusta kutsutaan virtuaaliseksi tiedostojärjestelmäksi (VFS).

Virtuaaliset tiedostojärjestelmät Linuxissa: miksi niitä tarvitaan ja miten ne toimivat? Osa 1

Jos voimme avata, lukea ja kirjoittaa entiteetin, sitä pidetään tiedostona, kuten voimme nähdä yllä olevan konsolin esimerkistä.
VFS-ilmiö vain korostaa Unix-tyyppistä havaintoa, että "kaikki on tiedostoa". Ajattele kuinka outoa, että yllä oleva pieni /dev/console-esimerkki näyttää, kuinka konsoli todella toimii. Kuvassa on interaktiivinen Bash-istunto. Merkkijonon lähettäminen konsoliin (virtuaalikonsolilaitteeseen) näyttää sen virtuaalinäytöllä. VFS:llä on muita, vieläkin outoja ominaisuuksia. Sen avulla voit esimerkiksi etsiä hakusanalla se.

Tutuilla järjestelmillä, kuten ext4, NFS ja /proc, on kolme tärkeää toimintoa C-tietorakenteessa nimeltä file_operations. Lisäksi tietyt tiedostojärjestelmät laajentavat ja määrittelevät uudelleen VFS-toiminnallisuutta tutulla oliopohjaisella tavalla. Kuten Robert Love huomauttaa, VFS-abstraktion avulla Linux-käyttäjät voivat vahingossa kopioida tiedostoja kolmannen osapuolen käyttöjärjestelmiin tai abstrakteista kokonaisuuksista, kuten putkista, huolehtimatta sisäisestä tietomuodostaan. Käyttäjän puolella (userspace) prosessi voi kopioida järjestelmäkutsun avulla tiedostosta ytimen tietorakenteisiin menetelmällä read() yksi tiedostojärjestelmä ja käytä sitten menetelmää write () toinen tiedostojärjestelmä tietojen tulostamista varten.

VFS-perustyyppeihin kuuluvat funktiomääritykset ovat tiedostoissa fs/*.c ytimen lähdekoodia, kun taas alihakemistoja fs/ sisältää tiettyjä tiedostojärjestelmiä. Ydin sisältää myös kokonaisuuksia, kuten cgroups, /dev и tmpfs, joita tarvitaan käynnistysprosessin aikana ja jotka siksi määritellään ytimen alihakemistossa init/. Huomaa, että cgroups, /dev и tmpfs älä kutsu "kolme suurta" -funktiota file_operations, mutta suoraan lukea ja kirjoittaa muistiin.
Alla oleva kaavio näyttää, kuinka käyttäjätila käyttää erityyppisiä tiedostojärjestelmiä, jotka on yleisesti asennettu Linux-järjestelmiin. Rakenteet eivät näy pipes, dmesg и POSIX clocks, jotka myös toteuttavat rakenteen file_operations, jota käytetään VFS-kerroksen kautta.

Virtuaaliset tiedostojärjestelmät Linuxissa: miksi niitä tarvitaan ja miten ne toimivat? Osa 1

VFS on "käärekerros" järjestelmäkutsujen ja tiettyjen toteutusten välillä file_operations, kuten ext4 и procfs. Toiminnot file_operations voi olla vuorovaikutuksessa joko laiteajureiden tai muistin käyttölaitteiden kanssa. tmpfs, devtmpfs и cgroups Älä käytä file_operations, mutta pääset suoraan muistiin.
VFS:n olemassaolo tarjoaa mahdollisuuden käyttää koodia uudelleen, koska tiedostojärjestelmiin liittyviä perusmenetelmiä ei tarvitse ottaa uudelleen käyttöön jokaisessa tiedostojärjestelmätyypissä. Koodin uudelleenkäyttö on yleinen käytäntö ohjelmistosuunnittelijoiden keskuudessa! Kuitenkin, jos uudelleenkäytettävä koodi sisältää vakavia virheitä, kaikki yleisiä menetelmiä perivät toteutukset kärsivät niistä.

/tmp: Yksinkertainen vihje

Helppo tapa havaita VFS:n olemassaolo järjestelmässä on kirjoittaa mount | grep -v sd | grep -v :/, joka näyttää kaikki asennetut (mounted) tiedostojärjestelmät, jotka eivät ole levyllä sijaitsevia ja ei-NFS-tiedostoja, mikä pätee useimmissa tietokoneissa. Yksi listatuista kiinnikkeistä (mounts) VFS epäilemättä /tmp, eikö?

Virtuaaliset tiedostojärjestelmät Linuxissa: miksi niitä tarvitaan ja miten ne toimivat? Osa 1

Kaikki tietävät tämän säilytyksen / tmp fyysisellä välineellä - hulluutta! Lähde.

Miksi varastointi ei ole toivottavaa /tmp fyysisellä medialla? Koska tiedostot sisään /tmp ovat väliaikaisia ​​ja tallennuslaitteet ovat hitaampia kuin muisti, johon tmpfs luodaan. Lisäksi fyysinen media on herkempi kulumiselle päällekirjoitettaessa kuin muisti. Lopuksi /tmp-tiedostot voivat sisältää arkaluonteisia tietoja, joten niiden katoaminen jokaisen uudelleenkäynnistyksen yhteydessä on olennainen ominaisuus.

Valitettavasti jotkin Linux-jakelun asennuskomentosarjat luovat /tmp:n tallennuslaitteeseen oletusarvoisesti. Älä ole epätoivoinen, jos tämä tapahtui myös järjestelmällesi. Noudata muutamia yksinkertaisia ​​ohjeita Arch Wikikorjataksesi tämän, ja muista, että muistia on varattu tmpfs ei ole käytettävissä muihin tarkoituksiin. Toisin sanoen järjestelmä, jossa on jättimäinen tmpfs ja suuria tiedostoja, voi loppua muistista ja kaatua. Toinen vihje: kun muokkaat tiedostoa /etc/fstab, muista, että sen täytyy päättyä rivinvaihtoon, muuten järjestelmä ei käynnisty.

/proc ja /sys

Lisäksi /tmp, VFS (virtuaaliset tiedostojärjestelmät), jotka ovat Linux-käyttäjille tutuimpia /proc и /sys. (/dev sijaitsee jaetussa muistissa, eikä sillä ole file_operations). Miksi nämä kaksi komponenttia? Tarkastellaan tätä asiaa.

procfs luo tilannekuvan ytimestä ja sen valvomista prosesseista userspace. Sisään /proc ydin tulostaa tietoja siitä, mitä sillä on saatavilla, kuten keskeytykset, virtuaalimuisti ja ajastin. Sitä paitsi, /proc/sys on paikka, jossa parametrit on määritetty komennolla sysctl, saatavilla userspace. Yksittäisten prosessien tila ja tilastot näkyvät hakemistoissa /proc/.

Virtuaaliset tiedostojärjestelmät Linuxissa: miksi niitä tarvitaan ja miten ne toimivat? Osa 1

Täällä /proc/meminfo on tyhjä tiedosto, joka kuitenkin sisältää arvokasta tietoa.

käytös /proc tiedostot osoittavat, kuinka erilaisia ​​VFS-levytiedostojärjestelmät voivat olla. toisaalta, /proc/meminfo sisältää tietoja, jotka voidaan tarkastella komennolla free. Toisaalta se on tyhjä! Kuinka se toimii? Tilanne muistuttaa kuuluisaa artikkelia nimeltä Onko kuu olemassa, kun kukaan ei katso sitä? Todellisuus ja kvanttiteoria"kirjoitti Cornellin yliopiston fysiikan professori David Mermin vuonna 1985. Tosiasia on, että ydin kerää muistitilastoja, kun pyyntö esitetään /proc, ja itse asiassa tiedostoissa /proc ei ole mitään kun kukaan ei katso. Kuten sanottu Mermin, "Kvanttidoktriini sanoo, että mittaus ei yleensä paljasta mitattavan ominaisuuden olemassa olevaa arvoa." (Ja pidä kysymystä kuusta kotitehtävänä!)
Näyttävä tyhjyys procfs on järkevää, koska siellä oleva tieto on dynaamista. Hieman erilainen tilanne sysfs. Verrataan kuinka monta tiedostoa, jotka ovat kooltaan vähintään yksi tavu, on /proc ja /sys.

Virtuaaliset tiedostojärjestelmät Linuxissa: miksi niitä tarvitaan ja miten ne toimivat? Osa 1

Procfs on yksi tiedosto, nimittäin viety ytimen kokoonpano, mikä on poikkeus, koska se tarvitsee luoda vain kerran käynnistystä kohti. Toisaalta sisään /sys on monia suurempia tiedostoja, joista monet vievät koko sivun muistia. Yleensä tiedostot sysfs sisältävät täsmälleen yhden numeron tai rivin, toisin kuin taulukot tietotaulukoista, jotka on saatu lukemalla tiedostoja, kuten /proc/meminfo.

Tavoite sysfs - tarjota luku-/kirjoitusominaisuudet sille, mitä ydin kutsuu «kobjects» käyttäjätilassa. Ainoa tavoite kobjects on linkkien laskeminen: kun viimeinen linkki kobjectiin poistetaan, järjestelmä palauttaa siihen liittyvät resurssit. Tästä huolimatta, /sys muodostaa suurimman osan kuuluisista "vakaa ABI käyttäjätilalle" ydin, jota kukaan ei voi koskaan, missään olosuhteissa "tauko". Tämä ei tarkoita, että sysf:n tiedostot olisivat staattisia, mikä olisi ristiriidassa epävakaiden objektien viitelaskennan kanssa.
Ytimen vakaa ABI rajoittaa sitä, mitä voi esiintyä /sys, ei sitä, mitä sillä hetkellä on todellisuudessa. Tiedostojen käyttöoikeuksien luettelointi sysfissä antaa käsityksen laitteiden, moduulien, tiedostojärjestelmien jne. määritettävistä asetuksista. voidaan konfiguroida tai lukea. Looginen johtopäätös on, että procfs on myös osa ytimen vakaata ABI:ta, vaikka tätä ei ole erikseen mainittu dokumentointi.

Virtuaaliset tiedostojärjestelmät Linuxissa: miksi niitä tarvitaan ja miten ne toimivat? Osa 1

Tiedostot sisään sysfs kuvaamaan yhtä tiettyä ominaisuutta kullekin entiteetille ja se voi olla luettavissa, kirjoitettava tai molemmat. "0" tiedostossa tarkoittaa, että SSD-levyä ei voi poistaa.

Aloitetaan käännöksen toinen osa VFS:n valvomisesta eBPF- ja bcc-työkalujen avulla, ja nyt odotamme kommenttejasi ja kutsumme sinut perinteisesti avoin webinaari, jonka opettajamme pitää 9. huhtikuuta - Vladimir Drozdetski.

Lähde: will.com

Lisää kommentti