Virtualios failų sistemos Linux sistemoje: kodėl jos reikalingos ir kaip jos veikia? 1 dalis

Sveiki visi! Mes ir toliau pradedame naujus srautus jau pamėgtiems kursams ir dabar skubame pranešti, kad pradedame naują kursų rinkinį "Linux administratorius"kuris prasidės balandžio pabaigoje. Šiam renginiui bus išleistas naujas leidinys. Su originalia medžiaga galite skaitykite čia.

Virtualios failų sistemos tarnauja kaip savotiška magiška abstrakcija, leidžianti Linux filosofijoje sakyti, kad „viskas yra failas“.

Virtualios failų sistemos Linux sistemoje: kodėl jos reikalingos ir kaip jos veikia? 1 dalis

Kas yra failų sistema? Remiantis vieno iš pirmųjų Linux bendradarbių ir autorių žodžiais Roberta Lava, "Failų sistema yra hierarchinė duomenų saugykla, surinkta pagal konkrečią struktūrą." Kad ir kaip būtų, šis apibrėžimas vienodai gerai tinka VFAT (virtualiųjų failų paskirstymo lentelei), Git ir Kasandra (NoSQL duomenų bazė). Taigi, kas tiksliai apibrėžia tokį dalyką kaip „failų sistema“?

Failų sistemos pagrindai

„Linux“ branduolys turi tam tikrus reikalavimus subjektui, kuris gali būti laikomas failų sistema. Ji turi įgyvendinti metodus open(), read() и write() patvariems objektams, turintiems pavadinimus. Objektiniu požiūriu programavimas, branduolys apibrėžia bendrąją failų sistemą kaip abstrakčią sąsają, o šios trys didelės funkcijos laikomos „virtualiomis“ ir neturi konkretaus apibrėžimo. Atitinkamai, numatytasis failų sistemos diegimas vadinamas virtualia failų sistema (VFS).

Virtualios failų sistemos Linux sistemoje: kodėl jos reikalingos ir kaip jos veikia? 1 dalis

Jei galime atidaryti, skaityti ir rašyti objektą, tada tas objektas laikomas failu, kaip matome iš aukščiau esančio pavyzdžio konsolėje.
VFS reiškinys tik pabrėžia Unix tipo pastebėjimą, kad „viskas yra failas“. Pagalvokite, kaip keista, kad aukščiau pateiktas mažas /dev/console pavyzdys parodo, kaip konsolė iš tikrųjų veikia. Nuotraukoje parodyta interaktyvi Bash sesija. Siunčiant eilutę į konsolę (virtualios konsolės įrenginį), ji rodoma virtualiame ekrane. VFS turi kitų, dar keistesnių savybių. Pavyzdžiui, tai leidžia ieškoti pagal jis.

Pažįstamos sistemos, tokios kaip ext4, NFS ir /proc, turi tris svarbias funkcijas C duomenų struktūroje, vadinamoje failo_operacijos. Be to, tam tikros failų sistemos išplečia ir iš naujo apibrėžia VFS funkcijas įprastu objektiniu būdu. Kaip pažymi Robertas Love'as, VFS abstrakcija leidžia „Linux“ vartotojams nerūpestingai kopijuoti failus į trečiųjų šalių operacines sistemas arba iš jų arba abstrakčius objektus, pavyzdžiui, vamzdžius, nesijaudinant dėl ​​savo vidinio duomenų formato. Vartotojo pusėje (vartotojo erdvėje), naudojant sistemos iškvietimą, procesas gali nukopijuoti iš failo į branduolio duomenų struktūras naudojant metodą read() vieną failų sistemą ir tada naudokite metodą write () kita failų sistema duomenims išvesti.

Funkcijų apibrėžimai, priklausantys baziniams VFS tipams, yra failuose fs/*.c branduolio šaltinio kodas, o pakatalogiai fs/ turi tam tikras failų sistemas. Šerdyje taip pat yra tokių subjektų kaip cgroups, /dev и tmpfs, kurie reikalingi įkrovos procese ir todėl yra apibrėžti branduolio pakatalogyje init/. Pastebėti, kad cgroups, /dev и tmpfs nekvieskite „didžiųjų trijų“ funkcijų file_operations, bet tiesiogiai skaityti ir įrašyti į atmintį.
Toliau pateiktoje diagramoje parodyta, kaip vartotojo erdvė pasiekia skirtingų tipų failų sistemas, paprastai montuojamas Linux sistemose. Konstrukcijos nerodomos pipes, dmesg и POSIX clocks, kurios taip pat įgyvendina struktūrą file_operations, pasiekiamas per VFS sluoksnį.

Virtualios failų sistemos Linux sistemoje: kodėl jos reikalingos ir kaip jos veikia? 1 dalis

VFS yra „apvyniojimo sluoksnis“ tarp sistemos iškvietimų ir tam tikrų diegimų file_operationsPavyzdžiui ext4 и procfs. Funkcijos file_operations gali sąveikauti su įrenginių tvarkyklėmis arba atminties prieigos įrenginiais. tmpfs, devtmpfs и cgroups Nenaudokite file_operations, bet tiesiogiai pasiekti atmintį.
VFS buvimas suteikia galimybę pakartotinai naudoti kodą, nes pagrindiniai metodai, susiję su failų sistemomis, neturi būti iš naujo įdiegti kiekvieno tipo failų sistemoje. Pakartotinis kodo naudojimas yra įprasta programinės įrangos inžinierių praktika! Tačiau jei daugkartinio naudojimo kode yra rimtų klaidų, nuo jų kenčia visi diegimai, kurie paveldi įprastus metodus.

/tmp: paprasta užuomina

Lengvas būdas aptikti, kad sistemoje yra VFS, yra įvesti tekstą mount | grep -v sd | grep -v :/, kuriame bus rodomi visi sumontuoti (mounted) failų sistemos, kurios nėra disko ir nėra NFS, o tai pasakytina apie daugumą kompiuterių. Vienas iš išvardytų laikiklių (mounts) VFS neabejotinai /tmp, tiesa?

Virtualios failų sistemos Linux sistemoje: kodėl jos reikalingos ir kaip jos veikia? 1 dalis

Visi žino tą saugyklą / tmp fizinėje terpėje – beprotybė! šaltinis.

Kodėl nepageidautina laikyti /tmp fizinėje laikmenoje? Kadangi failai yra /tmp yra laikini, o saugojimo įrenginiai yra lėtesni nei atmintis, kurioje sukuriamas tmpfs. Be to, fizinė laikmena yra labiau linkusi nusidėvėti, kai perrašoma, nei atmintis. Galiausiai /tmp failuose gali būti neskelbtinos informacijos, todėl būtina, kad jie išnyktų kiekvieną kartą paleidžiant iš naujo.

Deja, kai kurie Linux platinimo diegimo scenarijai pagal numatytuosius nustatymus sukuria /tmp saugojimo įrenginyje. Nenusiminkite, jei taip nutiko ir jūsų sistemai. Vykdykite keletą paprastų nurodymų su Arch WikiNorėdami tai išspręsti, ir atminkite, kad atmintis skirta tmpfs tampa neprieinamas kitiems tikslams. Kitaip tariant, sistemoje su milžinišku tmpfs ir dideliais failais gali pritrūkti atminties ir ji gali sugesti. Kitas patarimas: redaguojant failą /etc/fstab, atminkite, kad ji turi baigtis nauja eilute, kitaip jūsų sistema nebus paleista.

/proc ir /sys

Be /tmp, VFS (virtualios failų sistemos), kurios yra labiausiai žinomos Linux vartotojams /proc и /sys. (/dev yra bendrojoje atmintyje ir neturi file_operations). Kodėl šie du komponentai? Panagrinėkime šį klausimą.

procfs sukuria branduolio ir jo stebimų procesų momentinę nuotrauką userspace. Į /proc branduolys spausdina informaciją apie tai, ką jis turi, pvz., pertraukimus, virtualiąją atmintį ir planuoklį. Be to, /proc/sys yra vieta, kur parametrai sukonfigūruoti naudojant komandą sysctl, galioja userspace. Atskirų procesų būsena ir statistika rodomi kataloguose /proc/.

Virtualios failų sistemos Linux sistemoje: kodėl jos reikalingos ir kaip jos veikia? 1 dalis

Čia /proc/meminfo yra tuščias failas, kuriame vis dėlto yra vertingos informacijos.

Elgesys /proc failai parodo, kokios skirtingos gali būti VFS disko failų sistemos. Iš vienos pusės, /proc/meminfo yra informacijos, kurią galima peržiūrėti naudojant komandą free. Kita vertus, tuščia! Kaip tai veikia? Situacija primena garsųjį straipsnį pavadinimu Ar mėnulis egzistuoja, kai niekas į jį nežiūri? Realybė ir kvantinė teorija“parašė Kornelio universiteto fizikos profesorius Davidas Merminas 1985 m. Faktas yra tas, kad branduolys renka atminties statistiką, kai pateikiama užklausa /proc, o iš tikrųjų failuose /proc nieko nėra, kai niekas nemato. Kaip sakė Merminas, „Pagrindinė kvantinė doktrina sako, kad matavimas paprastai neatskleidžia iš anksto esamos matuojamo turto vertės“. (Ir klausimą apie mėnulį apsvarstykite kaip namų darbus!)
Atrodo tuštuma procfs prasminga, nes ten esanti informacija yra dinamiška. Šiek tiek kitokia situacija su sysfs. Palyginkime, kiek failų yra bent vieno baito dydžio /proc ir /sys.

Virtualios failų sistemos Linux sistemoje: kodėl jos reikalingos ir kaip jos veikia? 1 dalis

Procfs turi vieną failą, būtent eksportuotą branduolio konfigūraciją, kuri yra išimtis, nes ją reikia sugeneruoti tik vieną kartą per įkrovą. Kita vertus, į /sys yra daug didesnių failų, kurių daugelis užima visą atminties puslapį. Paprastai failai sysfs yra tiksliai vienas skaičius arba eilutė, skirtingai nei informacijos lentelėse, gautose skaitant failus, pvz., /proc/meminfo.

Tikslas sysfs - pateikti skaitymo / rašymo ypatybes, kurias iškviečia branduolys «kobjects» vartotojo erdvėje. Vienintelis tikslas kobjects yra nuorodų skaičiavimas: pašalinus paskutinę nuorodą į kobject, sistema atkurs su juo susijusius išteklius. Nepaisant to, /sys sudaro didžiąją dalį žinomų „stabili vartotojo erdvės ABI“ branduolys, kurio niekas niekada negali, jokiomis aplinkybėmis "pertrauka". Tai nereiškia, kad failai sysf yra statiniai, o tai prieštarautų nestabilių objektų nuorodų skaičiavimui.
Stabili branduolio ABI riboja tai, kas gali būti rodoma /sys, o ne tai, kas iš tikrųjų yra tuo konkrečiu momentu. Failų leidimų sąrašas sistemoje „sysf“ leidžia suprasti, kaip konfigūruojami įrenginių, modulių, failų sistemų ir kt. parametrai. galima konfigūruoti arba skaityti. Logiška išvada, kad procfs taip pat yra branduolio stabilios ABI dalis, nors tai nėra aiškiai nurodyta dokumentacija.

Virtualios failų sistemos Linux sistemoje: kodėl jos reikalingos ir kaip jos veikia? 1 dalis

Failai į sysfs apibūdinkite vieną konkrečią kiekvieno objekto savybę ir gali būti skaitoma, įrašoma arba abi. „0“ faile reiškia, kad SSD negalima pašalinti.

Antrąją vertimo dalį pradėkime nuo to, kaip stebėti VFS naudojant eBPF ir bcc įrankius, o dabar laukiame jūsų komentarų ir tradiciškai kviečiame atviras webinaras, kuris vyks mūsų mokytojo balandžio 9 d. Vladimiras Drozdeckis.

Šaltinis: www.habr.com

Добавить комментарий