Virtuális fájlrendszerek Linuxban: miért van szükség rájuk és hogyan működnek? 1. rész

Sziasztok! Folytatjuk az új streamek indítását azokhoz a tanfolyamokhoz, amelyekbe már beleszerettél, és most sietünk bejelenteni, hogy új kurzuscsomagot indítunk "Linux rendszergazda"amely április végén indul. Erről az eseményről új kiadvány fog megjelenni. Az eredeti anyaggal megteheti olvassa el itt.

A virtuális fájlrendszerek egyfajta mágikus absztrakcióként szolgálnak, amely lehetővé teszi a Linux filozófiájának azt mondani, hogy "minden egy fájl".

Virtuális fájlrendszerek Linuxban: miért van szükség rájuk és hogyan működnek? 1. rész

Mi az a fájlrendszer? A Linux egyik első közreműködőjének és szerzőjének szavai alapján Roberta Lava, "A fájlrendszer egy meghatározott struktúra szerint összeállított adatok hierarchikus tárolója." Bárhogy is legyen, ez a definíció egyformán jól illeszkedik a VFAT-hoz (Virtual File Allocation Table), a Githez és a Cassandra (NoSQL adatbázis). Tehát mi határozza meg pontosan azt a dolgot, mint "fájlrendszer"?

Fájlrendszer alapjai

A Linux kernel bizonyos követelményeket támaszt a fájlrendszernek tekinthető entitásokkal szemben. Meg kell valósítania a módszereket open(), read() и write() a nevekkel rendelkező állandó objektumokhoz. Objektum-orientált szemszögből programozás, a kernel egy általános fájlrendszert absztrakt interfészként határoz meg, és ez a három nagy függvény "virtuálisnak" tekinthető, és nincs konkrét definíciója. Ennek megfelelően az alapértelmezett fájlrendszer-megvalósítást virtuális fájlrendszernek (VFS) nevezik.

Virtuális fájlrendszerek Linuxban: miért van szükség rájuk és hogyan működnek? 1. rész

Ha meg tudunk nyitni, olvasni és írni tudunk egy entitást, akkor az adott entitást fájlnak tekintjük, amint azt a fenti konzol példájából láthatjuk.
A VFS jelenség csak aláhúzza azt a Unix-szerű megfigyelést, hogy "minden egy fájl". Gondolj bele, milyen furcsa, hogy a fenti kis /dev/console példa megmutatja, hogyan működik a konzol valójában. A képen egy interaktív Bash munkamenet látható. Ha egy karakterláncot küld a konzolra (virtuális konzoleszközre), az megjelenik egy virtuális képernyőn. A VFS-nek más, még furcsább tulajdonságai is vannak. Például lehetővé teszi a keresést neki.

Az olyan ismert rendszereknek, mint az ext4, az NFS és a /proc, három fontos funkciójuk van az úgynevezett C adatstruktúrában. file_operations. Ezen túlmenően, bizonyos fájlrendszerek kiterjesztik és újradefiniálják a VFS funkcióit a megszokott objektum-orientált módon. Ahogy Robert Love rámutat, a VFS-absztrakció lehetővé teszi a Linux-felhasználók számára, hogy gond nélkül másolhassanak fájlokat harmadik fél operációs rendszereibe vagy onnan, vagy absztrakt entitásokra, például csövekre anélkül, hogy aggódnának a belső adatformátumuk miatt. A felhasználói oldalon (userspace) rendszerhívás segítségével egy folyamat a metódussal másolhat fájlból kernel adatstruktúrákba read() egy fájlrendszert, majd használja a módszert write () egy másik fájlrendszer az adatkimenethez.

Az alap VFS-típusokhoz tartozó függvénydefiníciók a fájlokban találhatók fs/*.c kernel forráskódja, míg az alkönyvtárak fs/ tartalmaznak bizonyos fájlrendszereket. A mag olyan entitásokat is tartalmaz, mint pl cgroups, /dev и tmpfs, amelyek a rendszerindítási folyamat során szükségesek, ezért a kernel alkönyvtárában vannak meghatározva init/. Vedd észre cgroups, /dev и tmpfs ne hívja meg a "három nagy" függvényt file_operations, hanem közvetlenül olvassa és írjon a memóriába.
Az alábbi diagram bemutatja, hogy a userspace hogyan fér hozzá a különböző típusú fájlrendszerekhez, amelyeket általában Linux rendszereken csatlakoztatnak. A szerkezetek nem láthatók pipes, dmesg и POSIX clocks, amelyek szintén megvalósítják a szerkezetet file_operations, amely a VFS rétegen keresztül érhető el.

Virtuális fájlrendszerek Linuxban: miért van szükség rájuk és hogyan működnek? 1. rész

A VFS egy "burkoló réteg" a rendszerhívások és bizonyos megvalósítások között file_operationsmint például ext4 и procfs. Funkciók file_operations interakcióba léphet eszközillesztőkkel vagy memóriaelérési eszközökkel. tmpfs, devtmpfs и cgroups ne használja file_operations, hanem közvetlenül elérheti a memóriát.
A VFS megléte lehetőséget ad a kód újrafelhasználására, hiszen a fájlrendszerekhez kapcsolódó alapvető metódusokat nem kell minden fájlrendszertípusnál újra megvalósítani. A kód újrafelhasználása bevett gyakorlat a szoftvermérnökök körében! Ha azonban az újrafelhasználható kód tartalmazza súlyos hibákat, minden olyan implementáció, amely a gyakori módszereket örökli, szenved tőlük.

/tmp: Egyszerű tipp

A VFS jelenléte a rendszerben egyszerű módszer a gépelés mount | grep -v sd | grep -v :/, amely megmutatja az összes csatlakoztatott (mounted) nem lemezrezidens és nem NFS fájlrendszerek, ami a legtöbb számítógépre igaz. A felsorolt ​​tartók egyike (mounts) A VFS kétségtelenül megteszi /tmp, jobb?

Virtuális fájlrendszerek Linuxban: miért van szükség rájuk és hogyan működnek? 1. rész

Mindenki ismeri ezt a tárolást / tmp fizikai közegen - őrület! Forrás.

Miért nem kívánatos a tárolás /tmp fizikai adathordozón? Mivel a fájlok /tmp ideiglenesek, és a tárolóeszközök lassabbak, mint a memória, ahol a tmpfs létrejön. Ráadásul a fizikai adathordozók hajlamosabbak a kopásra, ha felülírják, mint a memória. Végül a /tmp-ben található fájlok érzékeny információkat tartalmazhatnak, ezért minden újraindításkor el kell tüntetni őket.

Sajnos néhány Linux disztribúciós telepítő parancsfájl alapértelmezés szerint létrehozza a /tmp fájlt a tárolóeszközön. Ne essen kétségbe, ha ez az Ön rendszerével is megtörtént. Kövesse néhány egyszerű utasítást Arch Wikiennek kijavításához, és ügyeljen arra, hogy a számára lefoglalt memória tmpfs más célokra elérhetetlenné válik. Más szóval, egy hatalmas tmpfs-t és nagy fájlokat tartalmazó rendszerben elfogyhat a memória és összeomolhat. Még egy tipp: fájl szerkesztése közben /etc/fstab, ne feledje, hogy újsorral kell végződnie, különben a rendszer nem indul el.

/proc és /sys

Kívül /tmp, a VFS-ek (virtuális fájlrendszerek), amelyek a Linux-felhasználók számára legismertebbek /proc и /sys. (/dev megosztott memóriában van, és nincs file_operations). Miért ez a két összetevő? Nézzük meg ezt a kérdést.

procfs pillanatképet készít a kernelről és az általa figyelt folyamatokról userspace. -Ban /proc a kernel információkat nyomtat arról, hogy mi áll rendelkezésére, például a megszakításokról, a virtuális memóriáról és az ütemezőről. Kívül, /proc/sys az a hely, ahol a paranccsal konfigurált paraméterek sysctl, elérhető userspace. Az egyes folyamatok állapota és statisztikái könyvtárakban jelennek meg /proc/.

Virtuális fájlrendszerek Linuxban: miért van szükség rájuk és hogyan működnek? 1. rész

Itt /proc/meminfo egy üres fájl, amely ennek ellenére értékes információkat tartalmaz.

viselkedés /proc fájlok megmutatja, hogy milyen különbözőek lehetnek a VFS lemezes fájlrendszerek. Egyrészt /proc/meminfo paranccsal megtekinthető információkat tartalmaznak free. Másrészt üres! Hogyan működik? A helyzet a híres cikkre emlékeztet Létezik a hold, amikor senki sem nézi? Valóság és kvantumelmélet"A Cornell Egyetem fizikaprofesszora, David Mermin írta 1985-ben. A tény az, hogy a kernel memóriastatisztikát gyűjt, amikor egy kérés érkezik /proc, és valójában fájlokban /proc nincs semmi, amikor senki nem néz. Ahogy mondták Mermin, "Az alapvető kvantumdoktrína azt mondja, hogy a mérés általában nem fedi fel a mért tulajdonság már meglévő értékét." (A Holdra vonatkozó kérdést pedig tekintse házi feladatnak!)
Látszólag üresség procfs van értelme, mert az információ dinamikus. Kicsit más a helyzet vele sysfs. Hasonlítsuk össze, hány olyan fájl van, amelyek legalább egy bájt méretűek /proc és /sys.

Virtuális fájlrendszerek Linuxban: miért van szükség rájuk és hogyan működnek? 1. rész

Procfs egy fájlja van, mégpedig az exportált kernelkonfiguráció, ami kivétel, mert rendszerindításonként csak egyszer kell előállítani. Másrészt be /sys sok nagyobb fájl van, amelyek közül sok egy egész oldalnyi memóriát foglal el. Általában fájlokat sysfs pontosan egy számot vagy sort tartalmaznak, ellentétben a fájlolvasásból nyert információtáblázatokkal, mint pl /proc/meminfo.

Gól sysfs - olvasási/írási tulajdonságokat biztosít annak, amit a kernel hív «kobjects» felhasználói térben. Az egyetlen cél kobjects linkszámlálás: amikor egy kobject utolsó hivatkozását eltávolítják, a rendszer visszaállítja a hozzá tartozó erőforrásokat. Mindazonáltal, /sys alkotja a legtöbb híres "stabil ABI felhasználói térhez" mag, amit soha senki, semmilyen körülmények között nem tud "szünet". Ez nem jelenti azt, hogy a sysf-ben lévő fájlok statikusak, ami összeegyeztethetetlen az instabil objektumok referenciaszámlálásával.
A kernel stabil ABI-ja korlátozza, hogy mi jelenhet meg benne /sys, nem az, ami az adott pillanatban ténylegesen jelen van. A fájljogosultságok listázása a sysf-ben betekintést nyújt az eszközök, modulok, fájlrendszerek stb. konfigurálható beállításaiba. konfigurálható vagy olvasható. A logikus következtetés az, hogy a procfs is része a kernel stabil ABI-jának, bár ez nincs kifejezetten kimondva dokumentáció.

Virtuális fájlrendszerek Linuxban: miért van szükség rájuk és hogyan működnek? 1. rész

Fájlok be sysfs minden entitáshoz egy adott tulajdonságot ír le, és lehet olvasható, írható vagy mindkettő. A "0" a fájlban azt jelenti, hogy az SSD nem távolítható el.

Kezdjük a fordítás második részét azzal, hogy miként figyeljük a VFS-t az eBPF és a Bcc eszközök segítségével, most pedig várjuk észrevételeiket, és hagyományosan meghívjuk Önt nyílt webinárium, melyet tanárunk április 9-én tart - Vlagyimir Drozdeckij.

Forrás: will.com

Hozzászólás