Pershendetje te gjitheve! Ne vazhdojmë të lançojmë transmetime të reja për kurset me të cilat tashmë keni rënë në dashuri dhe tani jemi me nxitim të njoftojmë se po fillojmë një grup të ri kursesh i cili do të nisë në fund të prillit. Një botim i ri do të datohet për këtë ngjarje. Me materialin origjinal mundeni .
Sistemet virtuale të skedarëve veprojnë si një lloj abstraksioni magjik që lejon filozofinë Linux të thuash se "gjithçka është një skedar".

Çfarë është një sistem skedarësh? Sipas njërit prej kontribuesve dhe autorëve të parë Linux , "Një sistem skedarësh është një ruajtje hierarkike e të dhënave të mbledhura sipas një strukture specifike." Sido që të jetë, ky përkufizim është po aq i përshtatshëm për VFAT (Tabela e ndarjes së skedarëve virtualë), Git dhe (). Pra, çfarë përcakton saktësisht një gjë të tillë si "sistemin e skedarëve"?
Bazat e sistemit të skedarëve
Thelbi Linux ka kërkesa të caktuara që një entitet të konsiderohet sistem skedarësh. Duhet të zbatojë metoda open(), read() и write() për objektet e qëndrueshme që kanë emra. Nga një këndvështrim i orientuar nga objekti , kerneli përcakton një sistem skedari gjenerik si një ndërfaqe abstrakte, dhe këto tre funksione të mëdha konsiderohen "virtuale" dhe nuk kanë përkufizim konkret. Prandaj, zbatimi i parazgjedhur i sistemit të skedarëve quhet një sistem skedari virtual (VFS).

Nëse mund të hapim, lexojmë dhe shkruajmë në një entitet, atëherë ai ent konsiderohet skedar, siç mund ta shohim nga shembulli në tastierën e mësipërme.
Fenomeni VFS vetëm nënvizon vëzhgimin e ngjashëm me Unix-in se "çdo gjë është një skedar". Mendoni sa e çuditshme që shembulli i vogël /dev/console më sipër tregon se si funksionon në të vërtetë tastiera. Fotografia tregon një seancë interaktive Bash. Dërgimi i një vargu në tastierë (pajisja virtuale e konsolës) e shfaq atë në një ekran virtual. VFS ka veti të tjera, edhe më të çuditshme. Për shembull, ju lejon të kërkoni sipas .
Sistemet e njohura si ext4, NFS dhe /proc kanë tre funksione të rëndësishme në një strukturë të dhënash C të quajtur Për më tepër, disa sisteme skedarësh zgjerojnë dhe ri-implementojnë funksionalitetin VFS në një mënyrë të njohur të orientuar drejt objekteve. Siç vëren Robert Love, abstraksioni VFS u lejon përdoruesve Linux Kopjoni pa kujdes skedarët nga dhe në sisteme operative të palëve të treta ose entitete abstrakte siç janë tubacionet, pa u shqetësuar për formatin e tyre të brendshëm të të dhënave. Nga ana e përdoruesit (hapësira e përdoruesit), një proces mund të kopjojë nga një skedar në strukturat e të dhënave të bërthamës duke përdorur një thirrje sistemi. read() një sistem skedari dhe më pas përdorni metodën write () një sistem tjetër skedar për daljen e të dhënave.
Përkufizimet e funksioneve që i përkasin llojeve bazë VFS janë në skedarë kodi burim i kernelit, ndërsa nëndrejtoritë fs/ përmbajnë sisteme të caktuara skedarësh. Bërthama përmban edhe entitete si p.sh cgroups, /dev и tmpfs, të cilat kërkohen gjatë procesit të nisjes dhe për këtë arsye përcaktohen në nëndrejtorinë e kernelit init/. Vini re se cgroups, /dev и tmpfs mos i quani funksionet "tre të mëdhenj". file_operations, por drejtpërdrejt lexoni dhe shkruani në kujtesë.
Diagrama më poshtë tregon se si hapësira e përdoruesit qaset në llojet e ndryshme të sistemeve të skedarëve që zakonisht montohen në sisteme. LinuxNdërtime të tilla që nuk janë paraqitur pipes, dmesg и POSIX clocks, të cilat zbatojnë edhe strukturën file_operations, aksesohet përmes shtresës VFS.

VFS është një "shtresë mbështjellëse" midis thirrjeve të sistemit dhe zbatimeve të caktuara file_operationsSi ext4 и procfs. Funksione file_operations mund të ndërveprojë me drejtuesit e pajisjes ose me pajisjet e aksesit në kujtesë. tmpfs, devtmpfs и cgroups mos e përdor file_operations, por qasje direkt në kujtesë.
Ekzistenca e VFS ofron mundësinë për të ripërdorur kodin, pasi metodat bazë të lidhura me sistemet e skedarëve nuk duhet të ri-zbatohen nga çdo lloj sistemi skedari. Ripërdorimi i kodit është një praktikë e zakonshme midis inxhinierëve të softuerit! Megjithatë, nëse kodi i ripërdorshëm përmban , të gjitha implementimet që trashëgojnë metoda të zakonshme vuajnë prej tyre.
/tmp: Këshillë e thjeshtë
Një mënyrë e thjeshtë për të zbuluar se VFS janë të pranishme në një sistem është të shtypni mount | grep -v sd | grep -v :/, i cili do të tregojë të gjitha të montuarat (mounted) sisteme skedarësh që nuk janë rezidentë të diskut dhe jo-NFS, gjë që është e vërtetë në shumicën e kompjuterëve. Një nga montimet e listuara (mounts) VFS padyshim që do /tmp, apo jo?

Të gjithë e dinë atë ruajtje / tmp në një medium fizik - çmenduri! .
Pse është e padëshirueshme të ruhet /tmp në media fizike? Sepse skedarët në /tmp janë të përkohshme dhe pajisjet e ruajtjes janë më të ngadalta se memoria ku krijohet tmpfs. Për më tepër, media fizike është më e ndjeshme ndaj konsumimit kur mbishkruhet sesa kujtesa. Së fundi, skedarët në /tmp mund të përmbajnë informacione të ndjeshme, kështu që zhdukja e tyre në çdo rindezje është një veçori thelbësore.
Fatkeqësisht, disa skripte instalimi Linux Shpërndarjet krijojnë /tmp në pajisjen e ruajtjes si parazgjedhje. Mos u dëshpëroni nëse kjo i ndodh sistemit tuaj. Ndiqni disa udhëzime të thjeshta me për ta rregulluar këtë dhe kini parasysh se memoria e caktuar për tmpfs bëhet i padisponueshëm për qëllime të tjera. Me fjalë të tjera, një sistem me një tmpf gjigant dhe skedarë të mëdhenj në të mund të mbarojë memorien dhe të rrëzohet. Një sugjerim tjetër: gjatë redaktimit të një skedari /etc/fstab, mbani mend se duhet të përfundojë me një linjë të re, përndryshe sistemi juaj nuk do të niset.
/proc dhe /sys
Përveç /tmp, VFS (sisteme skedarësh virtualë), të cilat janë më të njohura për përdoruesit Linux - kjo /proc и /sys. (/dev qëndron në kujtesën e përbashkët dhe nuk ka file_operations). Pse këta dy komponentë? Le të shqyrtojmë këtë çështje.
procfs krijon një fotografi të kernelit dhe proceseve për të cilat monitoron userspace. Në /proc kerneli printon informacione rreth asaj që ka në dispozicion, të tilla si ndërprerjet, memoria virtuale dhe planifikuesi. Përveç kësaj, /proc/sys është vendi ku janë konfiguruar parametrat me komandën sysctl, në dispozicion për userspace. Statusi dhe statistikat e proceseve individuale shfaqen në drejtori /proc/.

Këtu /proc/meminfo është një skedar bosh që megjithatë përmban informacion të vlefshëm.
sjellje /proc skedarët tregon se sa të ndryshëm mund të jenë sistemet e skedarëve të diskut VFS. Nga njëra anë, /proc/meminfo përmbajnë informacione që mund të shihen me komandën free. Nga ana tjetër, është bosh! Si punon? Situata të kujton artikullin e famshëm me titull shkruar nga profesori i fizikës i Universitetit Cornell, David Mermin në 1985. Fakti është se kerneli mbledh statistika të memories kur i bëhet një kërkesë /proc, dhe në fakt në skedarë /proc nuk ka asgjë kur askush nuk shikon. Siç u tha , "Doktrina themelore kuantike thotë se matja në përgjithësi nuk zbulon një vlerë paraekzistuese të pronës që matet." (Dhe konsiderojeni pyetjen për hënën si detyrë shtëpie!)
Në dukje zbrazëti procfs ka kuptim sepse informacioni atje është dinamik. Një situatë pak më ndryshe me sysfs. Le të krahasojmë sa skedarë janë të paktën një bajt në madhësi /proc dhe /sys.

Procfs ka një skedar, përkatësisht konfigurimin e kernelit të eksportuar, i cili është një përjashtim sepse duhet të gjenerohet vetëm një herë për nisje. Nga ana tjetër, në /sys ka shumë skedarë më të mëdhenj, shumë prej të cilëve zënë një faqe të tërë memorie. Zakonisht skedarët sysfs përmbajnë saktësisht një numër ose rresht, ndryshe nga tabelat e informacionit të marrë nga leximi i skedarëve si p.sh /proc/meminfo.
Qëllim sysfs - Siguroni vetitë e leximit/shkrimit të asaj që thërret kerneli «kobjects» në hapësirën e përdoruesit. Goli i vetëm kobjects është numërimi i lidhjeve: kur lidhja e fundit për një kobjekt hiqet, sistemi do të rivendosë burimet e lidhura me të. Megjithatë, /sys përbën shumicën e të famshmeve bërthamë, të cilën askush nuk mundet kurrë, në asnjë rrethanë . Kjo nuk do të thotë që skedarët në sysfs janë statikë, gjë që nuk do të ishte në përputhje me numërimin e referencës së objekteve të paqëndrueshme.
ABI e qëndrueshme e kernelit kufizon atë që mund të shfaqet /sys, jo ajo që është në të vërtetë e pranishme në atë moment të caktuar. Listimi i lejeve të skedarëve në sysfs ofron një pasqyrë të cilësimeve të konfigurueshme për pajisjet, modulet, sistemet e skedarëve, etj. mund të konfigurohet ose lexohet. Konkluzioni logjik është se procfs është gjithashtu pjesë e ABI-së së qëndrueshme të kernelit, megjithëse kjo nuk është deklaruar në mënyrë eksplicite në .

Skedarët në sysfs përshkruani një veti të veçantë për çdo entitet dhe mund të jetë e lexueshme, e shkruajtshme ose të dyja. "0" në skedar do të thotë që SSD nuk mund të hiqet.
Le të fillojmë pjesën e dytë të përkthimit me mënyrën e monitorimit të VFS duke përdorur veglat eBPF dhe bcc, dhe tani ne presim komentet tuaja dhe ju ftojmë tradicionalisht të , e cila do të mbahet nga mësuesi ynë më 9 Prill - .
Burimi: www.habr.com
