Sveiki visiem! MÄs turpinÄm uzsÄkt jaunas straumes kursiem, kurus jÅ«s jau esat iemÄ«lÄjuÅ”i, un tagad mÄs steidzam paziÅot, ka mÄs sÄkam jaunu kursu komplektu
VirtuÄlÄs failu sistÄmas kalpo kÄ sava veida maÄ£iska abstrakcija, kas ļauj Linux filozofijÄ teikt, ka "viss ir fails".
Kas ir failu sistÄma? BalstÄ«ts uz viena no pirmajiem Linux lÄ«dzstrÄdniekiem un autoriem vÄrdiem
Failu sistÄmas pamati
Linux kodolam ir noteiktas prasÄ«bas entÄ«tijai, ko var uzskatÄ«t par failu sistÄmu. Tam ir jÄÄ«steno metodes open()
, read()
Šø write()
pastÄvÄ«giem objektiem, kuriem ir nosaukumi. No objektorientÄtÄ viedokļa
Ja mÄs varam atvÄrt, lasÄ«t un rakstÄ«t entÄ«tiju, Ŕī entÄ«tija tiek uzskatÄ«ta par failu, kÄ redzams no piemÄra iepriekÅ” konsolÄ.
VFS fenomens tikai pasvÄ«tro Unix lÄ«dzÄ«gu novÄrojumu, ka "viss ir fails". PadomÄjiet, cik dÄ«vaini, ka Å”is mazais /dev/console piemÄrs parÄda, kÄ konsole faktiski darbojas. AttÄlÄ redzama interaktÄ«va Bash sesija. NosÅ«tot virkni uz konsoli (virtuÄlÄs konsoles ierÄ«ci), tÄ tiek parÄdÄ«ta virtuÄlÄ ekrÄnÄ. VFS ir citas, vÄl dÄ«vainÄkas Ä«paŔības. PiemÄram, tas ļauj meklÄt pÄc
PazÄ«stamÄm sistÄmÄm, piemÄram, ext4, NFS un /proc, ir trÄ«s svarÄ«gas funkcijas C datu struktÅ«rÄ, ko sauc par read()
vienu failu sistÄmu un pÄc tam izmantojiet metodi write ()
cita failu sistÄma datu izvadÄ«Å”anai.
Funkciju definīcijas, kas pieder pamata VFS tipiem, atrodas failos fs/
satur noteiktas failu sistÄmas. KodolÄ ir arÄ« tÄdas entÄ«tijas kÄ cgroups
, /dev
Šø tmpfs
, kas ir nepiecieÅ”ami sÄknÄÅ”anas procesa laikÄ un tÄpÄc ir definÄti kodola apakÅ”direktorijÄ init/
. IevÄrojiet to cgroups
, /dev
Šø tmpfs
neizsauc "lielÄ trijnieka" funkcijas file_operations
, bet tieÅ”i lasÄ«t un ierakstÄ«t atmiÅÄ.
TÄlÄk redzamajÄ diagrammÄ parÄdÄ«ts, kÄ lietotÄja telpa piekļūst dažÄda veida failu sistÄmÄm, kas parasti tiek uzstÄdÄ«tas Linux sistÄmÄs. StruktÅ«ras nav parÄdÄ«tas pipes
, dmesg
Šø POSIX clocks
, kas arī īsteno struktūru file_operations
, kuram var piekļūt, izmantojot VFS slÄni.
VFS ir "iesaiÅojuma slÄnis" starp sistÄmas izsaukumiem un noteiktu ievieÅ”anu file_operations
, piemÄram, ext4
Šø procfs
. Funkcijas file_operations
var mijiedarboties ar ierÄ«Äu draiveriem vai atmiÅas piekļuves ierÄ«cÄm. tmpfs
, devtmpfs
Šø cgroups
Nelietojiet file_operations
, bet tieÅ”i piekļūstiet atmiÅai.
VFS esamÄ«ba sniedz iespÄju atkÄrtoti izmantot kodu, jo ar failu sistÄmÄm saistÄ«tÄs pamatmetodes nav atkÄrtoti jÄÄ«steno katram failu sistÄmas tipam. Koda atkÄrtota izmantoÅ”ana ir izplatÄ«ta programmatÅ«ras inženieru prakse! TomÄr, ja atkÄrtoti lietojamais kods satur
/tmp: vienkÄrÅ”s padoms
VienkÄrÅ”s veids, kÄ noteikt, vai sistÄmÄ ir VFS, ir rakstÄ«t mount | grep -v sd | grep -v :/
, kurÄ tiks parÄdÄ«ti visi uzstÄdÄ«tie (mounted
) failu sistÄmas, kas nav diska rezidences un nav NFS, kas attiecas uz lielÄko daļu datoru. Viens no uzskaitÄ«tajiem stiprinÄjumiem (mounts
) VFS neapÅ”aubÄmi bÅ«s /tmp
, pa labi?
Ikviens zina, ka uzglabÄÅ”ana / tmp
uz fiziska nesÄja - vÄjprÄts!
KÄpÄc nav vÄlams uzglabÄt /tmp
fiziskajÄ datu nesÄjÄ? TÄ kÄ faili iekÅ”Ä /tmp
ir pagaidu, un atmiÅas ierÄ«ces ir lÄnÄkas nekÄ atmiÅa, kurÄ tiek izveidots tmpfs. TurklÄt fiziskie datu nesÄji ir vairÄk pakļauti nodilumam, ja tie tiek pÄrrakstÄ«ti, nekÄ atmiÅa. Visbeidzot, faili mapÄ /tmp var saturÄt sensitÄ«vu informÄciju, tÄpÄc to pazuÅ”ana katrÄ atsÄknÄÅ”anas reizÄ ir bÅ«tiska funkcija.
DiemžÄl daži Linux izplatÄ«Å”anas instalÄÅ”anas skripti atmiÅas ierÄ«cÄ pÄc noklusÄjuma izveido /tmp. Neesiet izmisumÄ, ja tas notika arÄ« ar jÅ«su sistÄmu. Izpildiet dažus vienkÄrÅ”us norÄdÄ«jumus ar tmpfs
kļūst nepieejama citiem mÄrÄ·iem. Citiem vÄrdiem sakot, sistÄmai ar milzÄ«gu tmpfs un lieliem failiem tajÄ var pietrÅ«kt atmiÅas un tÄ var izraisÄ«t avÄriju. VÄl viens padoms: faila rediÄ£ÄÅ”anas laikÄ /etc/fstab
, atcerieties, ka tai jÄbeidzas ar jaunu rindiÅu, pretÄjÄ gadÄ«jumÄ jÅ«su sistÄma netiks sÄknÄta.
/proc un /sys
TurklÄt /tmp
, VFS (virtuÄlÄs failu sistÄmas), kas ir vispazÄ«stamÄkÄs Linux lietotÄjiem /proc
Šø /sys
. (/dev
atrodas koplietotajÄ atmiÅÄ un nav file_operations
). KÄpÄc Ŕīs divas sastÄvdaļas? ApskatÄ«sim Å”o jautÄjumu.
procfs
izveido kodola un tÄ pÄrraudzÄ«to procesu momentuzÅÄmumu userspace
. Uz /proc
kodols izdrukÄ informÄciju par to, kas tam ir pieejams, piemÄram, pÄrtraukumi, virtuÄlÄ atmiÅa un plÄnotÄjs. TurklÄt, /proc/sys
ir vieta, kur parametri konfigurÄti ar komandu sysctl
, pieejams userspace
. AtseviŔķu procesu statuss un statistika tiek parÄdÄ«ta direktorijÄs /proc/
.
Å eit /proc/meminfo
ir tukÅ”s fails, kas tomÄr satur vÄrtÄ«gu informÄciju.
Uzvedība /proc
faili parÄda, cik dažÄdas var bÅ«t VFS diska failu sistÄmas. No vienas puses, /proc/meminfo
satur informÄciju, ko var apskatÄ«t ar komandu free
. No otras puses, tas ir tukÅ”s! KÄ tas darbojas? SituÄcija atgÄdina slaveno rakstu ar nosaukumu /proc
, un faktiski failos /proc
nav nekÄ, kad neviens neskatÄs. KÄ teikts
Šķietamais tukŔums procfs
ir jÄga, jo informÄcija tur ir dinamiska. Nedaudz savÄdÄka situÄcija ar sysfs
. SalÄ«dzinÄsim, cik failos ir vismaz viens baits liels /proc
un /sys
.
Procfs
ir viens fails, proti, eksportÄtÄ kodola konfigurÄcija, kas ir izÅÄmums, jo tas ir jÄÄ£enerÄ tikai vienu reizi sÄknÄÅ”anas laikÄ. No otras puses, iekÅ”Ä /sys
ir daudz lielÄku failu, no kuriem daudzi aizÅem visu atmiÅas lappusi. Parasti faili sysfs
satur tieÅ”i vienu skaitli vai rindiÅu, atŔķirÄ«bÄ no informÄcijas tabulÄm, kas iegÅ«tas, lasot failus, piemÄram, /proc/meminfo
.
mÄrÄ·is sysfs
- nodroÅ”inÄt kodola izsaukto lasÄ«Å”anas/rakstÄ«Å”anas rekvizÄ«tus Ā«kobjectsĀ»
lietotÄja telpÄ. VienÄ«gais mÄrÄ·is kobjects
ir saiÅ”u skaitÄ«Å”ana: kad tiek noÅemta pÄdÄjÄ saite uz kobject, sistÄma atjaunos ar to saistÄ«tos resursus. TomÄr, /sys
veido lielÄko daļu slaveno
Kodola stabilais ABI ierobežo to, kas var parÄdÄ«ties /sys
, nevis to, kas patiesÄ«bÄ atrodas konkrÄtajÄ brÄ«dÄ«. Failu atļauju uzskaitÄ«Å”ana sistÄmÄ sysf sniedz ieskatu par to, kÄ konfigurÄjami iestatÄ«jumi ierÄ«cÄm, moduļiem, failu sistÄmÄm utt. var konfigurÄt vai lasÄ«t. LoÄ£isks secinÄjums ir tÄds, ka procfs ir arÄ« daļa no kodola stabilÄ ABI, lai gan tas nav skaidri norÄdÄ«ts
Faili iekÅ”Ä sysfs
aprakstiet vienu konkrÄtu rekvizÄ«tu katrai entÄ«tijai, un tas var bÅ«t lasÄms, rakstÄms vai abi. "0" failÄ nozÄ«mÄ, ka SSD nevar noÅemt.
SÄksim otro tulkojuma daļu ar to, kÄ uzraudzÄ«t VFS, izmantojot eBPF un bcc rÄ«kus, un tagad mÄs gaidÄm jÅ«su komentÄrus un tradicionÄli aicinÄm jÅ«s
Avots: www.habr.com