Përshëndetje të gjithëve! Ne vazhdojmë të hapim grupe të reja për kurset që i keni pëlqyer tashmë dhe tani duam t’ju njoftojmë se po fillon një regjistrim i ri për kursin , i cili do të nisë në fund të prillit. Pikërisht me këtë rast është përgatitur edhe publikimi i ri. Me materialin origjinal mund të .
Sistemet virtuale të skedarëve luajnë rolin e një abstraksioni thuajse magjik, që i lejon filozofisë së Linux-it të thotë se «gjithçka është skedar».

Çfarë është një sistem skedarësh? Duke u mbështetur te fjalët e njërit prej kontribuesve dhe autorëve të hershëm të Linux-it , «Sistemi i skedarëve është një ruajtje hierarkike e të dhënave, e organizuar sipas një strukture të caktuar». Sido që të jetë, ky përkufizim është po aq i përshtatshëm si për VFAT (Virtual File Allocation Table), ashtu edhe për Git dhe (). Atëherë, çfarë e përcakton saktësisht nocionin «sistem skedarësh»?
Bazat e sistemit të skedarëve
Kerneli Linux ka kërkesa të caktuara për një entitet që mund të konsiderohet sistem skedarësh. Ai duhet të zbatojë metodat open(), read() dhe write() për objekte të përhershme që kanë emra. Nga këndvështrimi i , kerneli e përcakton sistemin e përgjithshëm të skedarëve (generic filesystem) si një ndërfaqe abstrakte, ndërsa këto tri funksione kryesore konsiderohen «virtuale» dhe nuk kanë një përkufizim konkret. Prandaj, zbatimi i parazgjedhur i sistemit të skedarëve quhet sistem virtual i skedarëve (VFS).

Nëse mund ta hapim, ta lexojmë dhe të shkruajmë në një entitet, atëherë ky entitet konsiderohet skedar, siç e shohim nga shembulli në konsolën më sipër.
Fenomeni i VFS vetëm sa e thekson vëzhgimin karakteristik për sistemet e ngjashme me Unix-in, sipas të cilit «gjithçka është skedar». Mendoni sa e çuditshme është që ai shembull i vogël më sipër me /dev/console tregon se si funksionon në të vërtetë konsola. Në figurë paraqitet një sesion interaktiv Bash. Dërgimi i një rreshti në konsolë (virtual console device) e shfaq atë në ekranin virtual. VFS ka edhe veti të tjera, madje edhe më të pazakonta. Për shembull, ajo jep mundësinë për të kërkuar nëpër .
Sisteme të njohura për ne, si ext4, NFS dhe /proc, kanë tri funksione të rëndësishme në strukturën e të dhënave C, e cila quhet . Përveç kësaj, disa sisteme skedarësh zgjerojnë dhe ripërcaktojnë funksionet e VFS në mënyrën e zakonshme objekt-orientuar. Siç vëren Robert Love, abstraksioni i VFS u lejon përdoruesve të Linux të kopjojnë pa u shqetësuar skedarë nga ose drejt sistemeve operative të palëve të treta apo entiteteve abstrakte, si p.sh. pipes, pa u merakosur për formatin e tyre të brendshëm të të dhënave. Nga ana e përdoruesit (userspace), përmes thirrjes së sistemit, një proces mund të kopjojë nga një skedar në strukturat e të dhënave të kernelit duke përdorur metodën read() të një sistemi skedarësh, dhe më pas të përdorë metodën write () të një sistemi tjetër skedarësh për të nxjerrë të dhënat.
Përkufizimet e funksioneve që i përkasin tipeve bazë të VFS gjenden në skedarët të kodit burimor të kernelit, ndërsa nënkatalogët fs/ përmbajnë sisteme të caktuara skedarësh. Kerneli përmban gjithashtu entitete si cgroups, /dev dhe tmpfs, të cilat nevojiten gjatë procesit të nisjes dhe për këtë arsye përcaktohen në nënkatalogun e kernelit init/. Vini re se cgroups, /dev dhe tmpfs nuk thërrasin “treshen e madhe” të funksioneve file_operations, por lexojnë dhe shkruajnë drejtpërdrejt në memorie.
Diagrami më poshtë tregon se si userspace qaset te lloje të ndryshme sistemesh skedarësh, që zakonisht montohen në sistemet Linux. Nuk paraqiten konstrukte të tilla si pipes, dmesg dhe POSIX clocks, të cilat gjithashtu implementojnë strukturën file_operations, dhe aksesi ndaj tyre kalon përmes shtresës VFS.

VFS është një “shtresë mbështjellëse” midis thirrjeve të sistemit dhe implementimeve specifike të file_operations, të tilla si ext4 dhe procfs. Funksionet file_operations mund të ndërveprojnë ose me drejtuesit e pajisjeve, ose me pajisje të aksesit në memorie. tmpfs, devtmpfs dhe cgroups nuk përdorin file_operations, por i qasen drejtpërdrejt memories.
Ekzistenca e VFS bën të mundur ripërdorimin e kodit, pasi metodat bazë që lidhen me sistemet e skedarëve nuk kanë nevojë të riimplementohen nga çdo lloj sistemi skedarësh. Ripërdorimi i kodit është një praktikë shumë e përhapur në inxhinierinë e softuerit! Megjithatë, nëse kodi i ripërdorur përmban , ato prekin të gjitha implementimet që trashëgojnë metodat e përbashkëta.
/tmp: Простая подсказка
Një mënyrë e thjeshtë për të zbuluar praninë e VFS në sistem është të shkruani mount | grep -v sd | grep -v :/, gjë që do të shfaqë të gjitha sistemet e skedarëve të montuara (mounted) që nuk ndodhen në disk dhe nuk janë NFS, siç ndodh në shumicën e kompjuterëve. Një nga këto montime të listuara (mounts) VFS, pa dyshim, do të jetë /tmp, apo jo?

Të gjithë e dinë se ruajtja / tmp në një medium fizik është çmenduri! .
Pse nuk rekomandohet të ruhet /tmp në një medium fizik? Sepse skedarët në /tmp janë të përkohshëm, ndërsa pajisjet e ruajtjes janë më të ngadalta se memoria ku krijohet tmpfs. Për më tepër, mediumet fizike konsumohen më shumë nga rishkrimi sesa memoria. Së fundi, skedarët në /tmp mund të përmbajnë informacion konfidencial, prandaj zhdukja e tyre pas çdo rinisjeje është një funksion thelbësor.
Fatkeqësisht, disa skripte instalimi të shpërndarjeve Linux e krijojnë /tmp në pajisjen e ruajtjes si parazgjedhje. Mos u shqetësoni nëse kjo ka ndodhur edhe në sistemin tuaj. Ndiqni disa udhëzime të thjeshta nga , për ta rregulluar këtë, dhe mbani parasysh se memoria e caktuar për tmpfs bëhet e padisponueshme për qëllime të tjera. Me fjalë të tjera, një sistem me tmpfs gjigante dhe skedarë të mëdhenj brenda saj mund të shpenzojë të gjithë memorien dhe të rrëzohet. Një këshillë tjetër: gjatë redaktimit të skedarit /etc/fstab, mbani mend se ai duhet të përfundojë me një rresht të ri, përndryshe sistemi juaj nuk do të niset.
/proc и /sys
Përveç /tmp, VFS (sistemet virtuale të skedarëve) me të cilat përdoruesit e Linux janë më të njohur janë /proc dhe /sys. (/dev ndodhet në memorien e përbashkët dhe nuk ka file_operations). Pse pikërisht këta dy komponentë? Le ta shqyrtojmë këtë çështje.
procfs krijon një pamje të menjëhershme të gjendjes së kernelit dhe proceseve që ai kontrollon për userspace. Në /proc kerneli shfaq informacion për burimet që ka në dispozicion, si ndërprerjet, memoria virtuale dhe planifikuesi. Përveç kësaj, /proc/sys është vendi ku parametrat e konfigurueshëm me komandën sysctl, janë të disponueshëm për userspace. Statusi dhe statistikat e proceseve individuale shfaqen në drejtoritë /proc/.

Këtu /proc/meminfo është një skedar bosh, i cili megjithatë përmban informacion me vlerë.
Sjellja /proc skedarëve tregojnë sa të ndryshëm mund të jenë sistemet e skedarëve VFS në disk. Nga njëra anë, /proc/meminfo përmbajnë informacion që mund të shihet me komandën free. Nga ana tjetër, aty nuk ka asgjë! Si është e mundur kjo? Situata të kujton artikullin e famshëm me titull , shkruar nga profesori i fizikës në Universitetin Cornell, David Mermin, në vitin 1985. Çështja është se kerneli mbledh statistikat e memories kur bëhet një kërkesë te /proc, dhe në të vërtetë në skedarë /proc Nuk ka asgjë, kur askush nuk shikon aty. Siç tha , «Doktrina themelore kuantike thotë se matja, si rregull, nuk zbulon një vlerë të mëparshme të vetisë që matet.» (Dhe pyetjen për hënën mendojeni si detyrë shtëpie!)
Boshllëku i dukshëm procfs ka kuptim, sepse informacioni që ndodhet aty është dinamik. Situata është disi ndryshe me sysfs. Le të krahasojmë sa skedarë me madhësi të paktën një bajt ka në /proc dhe në /sys.

Procfs ka një skedar të vetëm, përkatësisht konfigurimin e eksportuar të kernelit, i cili është një përjashtim, sepse duhet të gjenerohet vetëm një herë për çdo nisje. Nga ana tjetër, në /sys gjenden shumë skedarë më të mëdhenj, dhe shumë prej tyre zënë një faqe të plotë memorieje. Zakonisht skedarët sysfs përmbajnë saktësisht një numër ose varg, ndryshe nga tabelat e informacionit që merren gjatë leximit të skedarëve si /proc/meminfo.
Qëllimi sysfs – të ofrojë në userspace veti të lexueshme dhe të shkrueshme të asaj që kerneli e quan «kobjects» . Qëllimi i vetëm i kobjects është numërimi i referencave: kur hiqet referenca e fundit ndaj një kobject, sistemi do të rikthejë burimet e lidhura me të. Megjithatë, /sys përbën pjesën më të madhe të të kernelit, të cilin askush nuk mund ta në asnjë rrethanë. Kjo nuk do të thotë se skedarët në sysfs janë statikë, gjë që do të binte ndesh me numërimin e referencave për objekte jo të qëndrueshme.
Stable ABI i kernelit kufizon atë që mund të shfaqet në /sys, jo atë që është realisht e pranishme në një moment të caktuar. Lista e lejeve të skedarëve në sysfs ndihmon për të kuptuar se si mund të konfigurohen ose lexohen parametrat e pajisjeve, moduleve, sistemeve të skedarëve etj. Nxjerrim përfundimin logjik se edhe procfs është pjesë e stable ABI të kernelit, megjithëse kjo nuk thuhet shprehimisht në .

Skedarët në sysfs përshkruajnë një veti konkrete për secilin entitet dhe mund të jenë vetëm për lexim, të mbishkrueshëm ose të dyja njëkohësisht. «0» në skedar tregon se SSD nuk mund të hiqet.
Pjesën e dytë të përkthimit do ta nisim me mënyrën se si të vëzhgohet VFS me mjetet eBPF dhe bcc, ndërsa tani presim komentet tuaja dhe, si zakonisht, ju ftojmë në , të cilin më 9 prill do ta mbajë pedagogu ynë — .
Burimi: habr.com
