Firtuele bestânsystemen yn Linux: wêrom binne se nedich en hoe wurkje se? Diel 1

Hoi allegearre! Wy trochgean mei it lansearjen fan nije streams foar de kursussen wêr't jo al fereale op binne wurden en no binne wy ​​​​haast om oan te kundigjen dat wy in nije set kursussen begjinne "Linux behearder"dy't ein april lansearje sil. In nije publikaasje sil datearre wurde foar dit evenemint. Mei it orizjinele materiaal kinne jo lês hjir.

Firtuele bestânsystemen tsjinje as in soarte fan magyske abstraksje wêrmei't de filosofy fan Linux kin sizze dat "alles in bestân is."

Firtuele bestânsystemen yn Linux: wêrom binne se nedich en hoe wurkje se? Diel 1

Wat is in triemsysteem? Op grûn fan 'e wurden fan ien fan' e earste meiwurkers en auteurs fan Linux Roberta Lava, "In bestânssysteem is in hiërargyske opslach fan gegevens gearstald neffens in spesifike struktuer." Hoe dan ek, dizze definysje is like goed geskikt foar VFAT (Virtual File Allocation Table), Git en Cassandra (NoSQL databank). Dus wat definiearret sa'n ding krekt as in "bestânsysteem"?

Triemsysteem Basics

De Linux-kernel hat bepaalde easken foar in entiteit dy't kin wurde beskôge as in bestânsysteem. It moat de metoaden ymplementearje open(), read() и write() foar persistente objekten dy't nammen hawwe. Ut in objekt-rjochte eachpunt programmearring, de kernel definiearret in generike triemsysteem as in abstrakte ynterface, en dizze trije grutte funksjes wurde beskôge as "firtuele" en hawwe gjin konkrete definysje. Dêrtroch wurdt de standert ymplemintaasje fan bestânsysteem in firtuele bestânsysteem (VFS) neamd.

Firtuele bestânsystemen yn Linux: wêrom binne se nedich en hoe wurkje se? Diel 1

As wy kinne iepenje, lêze en skriuwe nei in entiteit, dan wurdt dy entiteit beskôge as in bestân, lykas wy kinne sjen út it foarbyld yn 'e konsole hjirboppe.
It VFS-fenomeen ûnderstreket allinich de Unix-like observaasje dat "alles in bestân is". Tink hoe nuver dat dat lytse /dev/console foarbyld hjirboppe lit sjen hoe't de konsole eins wurket. De foto lit in ynteraktive Bash-sesje sjen. It ferstjoeren fan in tekenrige nei de konsole (firtuele konsole-apparaat) toant it op in firtuele skerm. VFS hat oare, noch frjemdere eigenskippen. Bygelyks, it kinne jo sykje troch troch him.

Fertroude systemen lykas ext4, NFS, en / proc hawwe trije wichtige funksjes yn in C-gegevensstruktuer neamd file_operaasjes. Dêrnjonken wreidzje en op 'e nij VFS-funksjonaliteit útwreidzje en opnij definiearje op in bekende objekt-rjochte manier. As Robert Love oanjout, lit de VFS-abstraksje Linux-brûkers nonchalant bestannen kopiearje nei of fan bestjoeringssystemen fan tredden of abstrakte entiteiten lykas pipes sûnder har soargen te meitsjen oer har ynterne gegevensformaat. Oan 'e brûkerskant (brûkersromte), mei in systeemoprop, kin in proses kopiearje fan in bestân nei kernelgegevensstruktueren mei de metoade read() ien triemsysteem en brûk dan de metoade write () in oar bestânssysteem foar gegevensútfier.

De funksje definysjes dy't hearre ta de basis VFS typen binne yn de triemmen fs/*.c kernel boarne koade, wylst submappen fs/ befetsje bepaalde triemsystemen. De kearn befettet ek entiteiten lykas cgroups, /dev и tmpfs, dy't nedich binne tidens it opstartproses en wurde dêrom definieare yn 'e kernel-submap init/. Let der op dat cgroups, /dev и tmpfs neam de "grutte trije" funksjes net file_operations, mar direkt lêze en skriuwe nei it ûnthâld.
It diagram hjirûnder lit sjen hoe't brûkersromte tagong hat ta de ferskate soarten bestânssystemen dy't gewoanlik op Linux-systemen monteare binne. Struktueren net werjûn pipes, dmesg и POSIX clocks, dy't ek de struktuer útfiere file_operations, tagong fia de VFS-laach.

Firtuele bestânsystemen yn Linux: wêrom binne se nedich en hoe wurkje se? Diel 1

VFS is in "wrapper laach" tusken systeem oproppen en ymplemintaasjes fan bepaalde file_operations, lykas ext4 и procfs. Funksjes file_operations kin ynteraksje mei beide apparaatsjauffeurs of apparaten foar ûnthâld tagong. tmpfs, devtmpfs и cgroups net brûke file_operations, mar direkt tagong ta it ûnthâld.
It bestean fan VFS jout in kâns om koade opnij te brûken, om't de basismetoaden dy't ferbûn binne mei bestânsystemen net opnij moatte wurde ymplementearre troch elk type bestânsysteem. Hergebrûk fan koade is in gewoane praktyk ûnder software-yngenieurs! Lykwols, as de werbrûkbere koade befettet serieuze flaters, alle ymplemintaasjes dy't gewoane metoaden erve, lije derfan.

/tmp: Ienfâldige hint

In maklike manier om te detektearjen dat VFS oanwêzich binne op in systeem is te typen mount | grep -v sd | grep -v :/, dy't alle montearden sjen sil (mounted) triemsystemen dy't net skiif-resident en net-NFS binne, wat wier is op de measte kompjûters. Ien fan 'e neamde mounts (mounts) VFS sil sûnder mis /tmp, rjochts?

Firtuele bestânsystemen yn Linux: wêrom binne se nedich en hoe wurkje se? Diel 1

Elkenien wit dat opslach / tmp op in fysyk medium - waansin! Boarne.

Wêrom is it net winsklik om te bewarjen /tmp op fysike media? Omdat de triemmen yn /tmp binne tydlik en opslachapparaten binne stadiger as it ûnthâld dêr't tmpfs wurdt makke. Boppedat binne fysike media gefoeliger foar wearze as se oerskreaun binne as ûnthâld. Uteinlik kinne bestannen yn /tmp gefoelige ynformaasje befetsje, sadat se ferdwine by elke opnij starte is in essensjele funksje.

Spitigernôch meitsje guon Linux-distribúsje-ynstallaasjeskripts standert /tmp op it opslachapparaat. Wês net wanhopich as dit ek barde mei jo systeem. Folgje in pear ienfâldige ynstruksjes mei Arch Wikite reparearjen dit, en wês bewust dat it ûnthâld tawiisd foar tmpfs wurdt net beskikber foar oare doelen. Mei oare wurden, in systeem mei in gigantyske tmpfs en grutte triemmen derop kin sûnder ûnthâld rinne en crashe. In oare oanwizing: by it bewurkjen fan in bestân /etc/fstab, tink derom dat it einigje moat mei in nije rigel, oars sil jo systeem net opstarte.

/proc en /sys

njonken /tmp, VFS (firtuele triemsystemen) dy't it meast bekend binne foar Linux-brûkers binne /proc и /sys. (/dev wennet yn dielde ûnthâld en hat net file_operations). Wêrom dizze twa komponinten? Litte wy nei dizze kwestje sjen.

procfs makket in momintopname fan 'e kernel en de prosessen wêrfoar't it kontrolearret userspace. de /proc de kearn printet ynformaasje oer wat it beskikber is, lykas interrupts, firtuele ûnthâld, en de scheduler. Neist, /proc/sys is it plak dêr't de parameters konfigurearre mei it kommando sysctl, beskikber foar userspace. De status en statistiken fan yndividuele prosessen wurde werjûn yn mappen /proc/.

Firtuele bestânsystemen yn Linux: wêrom binne se nedich en hoe wurkje se? Diel 1

it is /proc/meminfo is in leech bestân dat dochs weardefolle ynformaasje befettet.

Behavior /proc triemmen lit sjen hoe ferskillende VFS skiif triem systemen kinne wêze. Oan de iene kant, /proc/meminfo befetsje ynformaasje dy't kin wurde besjoen mei it kommando free. Oan de oare kant is it leech! Hoe wurket it? De situaasje docht tinken oan it ferneamde artikel mei de titel Bestiet de moanne as nimmen dernei sjocht? Realiteit en kwantumteory"skreaun troch Cornell University natuerkunde professor David Mermin yn 1985. It feit is dat de kearn sammelet ûnthâld statistyk as in fersyk wurdt dien ta /proc, en eins yn triemmen /proc der is neat as nimmen sjocht. Lykas sein Mermin, "Fundamental quantum doctrine seit dat mjitting oer it generaal gjin foarôf besteande wearde fan it mjitten eigendom iepenbieret." (En beskôgje de fraach oer de moanne as húswurk!)
Lytse leechte procfs makket sin omdat de ynformaasje dêr dynamysk is. In bytsje oare situaasje mei sysfs. Litte wy fergelykje hoefolle bestannen dy't op syn minst ien byte yn grutte binne /proc en yn /sys.

Firtuele bestânsystemen yn Linux: wêrom binne se nedich en hoe wurkje se? Diel 1

Procfs hat ien triem, nammentlik de eksportearre kearnkonfiguraasje, wat in útsûndering is, om't it mar ien kear per boot generearre wurde moat. Oan 'e oare kant, yn /sys d'r binne in protte gruttere bestannen, wêrfan in protte in hiele side ûnthâld opnimme. Meastal triemmen sysfs befetsje presys ien nûmer of rigel, yn tsjinstelling ta tabellen mei ynformaasje krigen fan it lêzen fan triemmen lykas /proc/meminfo.

Goal sysfs - leverje lês- / skriuweigenskippen fan wat de kernel neamt «kobjects» yn brûkersromte. It ienige doel kobjects is ferwizing tellen: as de lêste ferwizing nei in kobject wurdt fuorthelle, it systeem sil weromsette de middels ferbûn mei it. Dochs, /sys makket it grutste part fan 'e ferneamde "stabiele ABI foar brûkersromte" kearn, dy't gjinien ea kin, ûnder alle omstannichheden "brekke". Dit betsjut net dat triemmen yn sysfs statysk binne, wat ynkonsistint wêze soe mei referinsjetelling fan ynstabile objekten.
De stabile ABI fan 'e kernel beheint wat kin ferskine yn /sys, net wat der eins oanwêzich is op dat bepaalde momint. Listing fan triemmooglikheden yn sysfs jout ynsjoch yn hoe konfigurearbere ynstellings foar apparaten, modules, triemsystemen, ensfh. kin wurde konfigurearre of lêzen. De logyske konklúzje is dat procfs ek diel útmakket fan 'e stabile ABI fan 'e kernel, hoewol dit net eksplisyt stiet yn dokumintaasje.

Firtuele bestânsystemen yn Linux: wêrom binne se nedich en hoe wurkje se? Diel 1

Files yn sysfs beskriuwe ien bepaald eigendom foar elke entiteit en kin lêsber, skriuwber of beide wêze. "0" yn it bestân betsjut dat de SSD net fuortsmiten wurde kin.

Litte wy it twadde diel fan 'e oersetting begjinne mei hoe't jo VFS kinne kontrolearje mei de eBPF- en bcc-ark, en no wachtsje wy op jo opmerkingen en noegje jo tradisjoneel út iepen webinar, dy't hâlden wurdt troch ús learaar op 9 april - Vladimir Drozdetsky.

Boarne: www.habr.com

Add a comment