Awọn ọna faili foju ni Lainos: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ? Apa 1

Bawo ni gbogbo eniyan! A tẹsiwaju lati ṣe ifilọlẹ awọn ṣiṣan tuntun lori awọn iṣẹ ikẹkọ ti o nifẹ tẹlẹ, ati ni bayi a wa ni iyara lati kede pe a n bẹrẹ eto tuntun ti awọn iṣẹ ikẹkọ "Alakoso Linux", eyi ti yoo lọlẹ ni opin Kẹrin. Atẹjade tuntun yoo jẹ igbẹhin si iṣẹlẹ yii. Pẹlu ohun elo atilẹba o le ka nibi.

Awọn ọna ṣiṣe faili foju ṣiṣẹ bi iru abstraction idan ti o fun laaye imoye Linux lati sọ pe “ohun gbogbo jẹ faili kan.”

Awọn ọna faili foju ni Lainos: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ? Apa 1

Kini eto faili kan? Da lori awọn ọrọ ti oluranlọwọ Linux kutukutu ati onkọwe Robert Love, "Eto faili kan jẹ ibi ipamọ akosori ti data ti a pejọ gẹgẹbi eto kan pato." Sibẹsibẹ, itumọ yii kan deede daradara si VFAT (Tabili Ipinfunni Faili Foju), Git ati Cassandra (NoSQL database). Nitorinaa kini gangan n ṣalaye iru nkan bii “eto faili”?

Awọn ipilẹ Eto Faili

Ekuro Linux ni awọn ibeere kan fun nkan kan ti o le jẹ eto faili kan. O gbọdọ ṣe awọn ilana open(), read() и write() fun jubẹẹlo ohun ti o ni awọn orukọ. Lati oju-ọna oju-ọna ohun siseto, awọn ekuro asọye a jeneriki filesystem bi ohun áljẹbrà ni wiwo, ati awọn mẹta ti o tobi awọn iṣẹ-ṣiṣe ti wa ni ka "foju" ati ki o ni ko si kan pato definition. Nitorinaa, imuse eto faili aiyipada ni a pe ni eto faili foju kan (VFS).

Awọn ọna faili foju ni Lainos: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ? Apa 1

Ti a ba le ṣii, ka ati kọ si nkan kan, lẹhinna nkan yẹn ni a ka si faili kan, bi a ti le rii lati apẹẹrẹ ninu console loke.
Iṣẹlẹ VFS nikan ṣe afihan akiyesi ti o wọpọ si awọn eto Unix-bii pe “ohun gbogbo jẹ faili.” Ronu nipa bi o ṣe jẹ iyalẹnu pe apẹẹrẹ kekere loke pẹlu / dev/console fihan bi console ṣe n ṣiṣẹ gangan. Aworan naa fihan igba Bash ibaraenisepo. Fifiranṣẹ okun kan si console (ohun elo console foju) ṣafihan lori iboju foju kan. VFS ni o ni miiran, ani alejò-ini. Fun apẹẹrẹ, o gba ọ laaye lati wa nipasẹ oun.

Awọn ọna ṣiṣe ti a faramọ pẹlu bii ext4, NFS, ati / proc ni awọn iṣẹ pataki mẹta ninu eto data C ti a pe awọn iṣẹ_faili. Ni afikun, awọn ọna ṣiṣe faili kan fa ati daarẹ iṣẹ ṣiṣe VFS ni ọna ti o faramọ ohun. Gẹgẹbi awọn akọsilẹ Robert Love, abstraction VFS ngbanilaaye awọn olumulo Linux lati daakọ awọn faili blithely si tabi lati awọn ọna ṣiṣe ti ẹnikẹta tabi awọn nkan abọtẹlẹ gẹgẹbi awọn paipu laisi aibalẹ nipa ọna kika data inu wọn. Ni ẹgbẹ olumulo (aaye olumulo), ni lilo ipe eto, ilana kan le daakọ lati faili kan si awọn ẹya data ekuro nipa lilo ọna naa. read() ọkan faili eto ati ki o si lo awọn ọna write () miiran faili eto fun data o wu.

Awọn itumọ ti awọn iṣẹ ti o jẹ ti awọn oriṣi VFS ipilẹ ni a rii ninu awọn faili naa fs/*.c koodu orisun kernel, lakoko awọn iwe-itọnisọna fs/ ni pato faili awọn ọna šiše. Koko naa tun ni awọn nkan bii cgroups, /dev и tmpfs, eyiti o nilo lakoko ilana bata ati nitorinaa ti ṣalaye ninu iwe-ipamọ ekuro init/. Jọwọ ṣe akiyesi iyẹn cgroups, /dev и tmpfs maṣe pe awọn iṣẹ "nla mẹta". file_operations, ṣugbọn ka taara ati kọ si iranti.
Aworan ti o wa ni isalẹ fihan bi aaye olumulo ṣe n wọle si awọn oriṣiriṣi awọn ọna ṣiṣe faili ti o wọpọ sori awọn eto Linux. Awọn ikole bii pipes, dmesg и POSIX clocks, eyiti o tun ṣe imuse eto naa file_operations, wọle nipasẹ awọn VFS Layer.

Awọn ọna faili foju ni Lainos: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ? Apa 1

VFS jẹ “apapọ ohun-ọṣọ” laarin awọn ipe eto ati awọn imuse ti awọn file_operations, bi eleyi ext4 и procfs. Awọn iṣẹ file_operations le ṣe ajọṣepọ pẹlu boya awakọ ẹrọ tabi awọn ẹrọ iwọle iranti. tmpfs, devtmpfs и cgroups maṣe lo file_operations, ṣugbọn taara wọle si iranti.
Aye ti VFS n pese agbara lati tun lo koodu, nitori awọn ọna pataki ti o ni nkan ṣe pẹlu awọn ọna ṣiṣe faili ko ni lati tun-ṣe nipasẹ iru eto faili kọọkan. Atunlo koodu jẹ adaṣe lilo pupọ laarin awọn onimọ-ẹrọ sọfitiwia! Sibẹsibẹ, ti koodu atunlo naa ni ninu pataki asise, gbogbo awọn imuse ti o jogun awọn ọna ti o wọpọ jiya lati ọdọ wọn.

/tmp: Atọka ti o rọrun

Ọna ti o rọrun lati rii pe awọn VFS wa lori eto ni lati tẹ mount | grep -v sd | grep -v :/, eyi ti yoo fihan gbogbo awọn agesin (mounted) awọn ọna ṣiṣe faili ti kii ṣe olugbe disk ati kii ṣe NFS, eyiti o jẹ otitọ lori ọpọlọpọ awọn kọnputa. Ọkan ninu awọn oke ti a ṣe akojọ (mounts) VFS yoo laiseaniani jẹ /tmp, otun?

Awọn ọna faili foju ni Lainos: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ? Apa 1

Gbogbo eniyan mọ ibi ipamọ yẹn / tmp lori media ti ara - irikuri! Orisun.

Kini idi ti ko ṣe imọran lati fipamọ /tmp lori media ti ara? Nitori awọn faili ni /tmp jẹ igba diẹ ati awọn ẹrọ ipamọ losokepupo ju iranti nibiti a ti ṣẹda tmpfs. Pẹlupẹlu, media ti ara jẹ ifaragba diẹ sii lati wọ ati yiya nigba ti kọkọ ju iranti lọ. Nikẹhin, awọn faili inu / tmp le ni alaye ifura ninu, nitorina ṣiṣe wọn parẹ lori gbogbo atunbere jẹ ẹya ara ẹrọ.

Laanu, diẹ ninu awọn iwe afọwọkọ fifi sori pinpin Linux ṣẹda / tmp lori ẹrọ ibi ipamọ nipasẹ aiyipada. Ma ko despair ti o ba ti yi ṣẹlẹ si rẹ eto ju. Tẹle awọn ilana ti o rọrun diẹ pẹlu Opo Wikilati fix yi, ki o si ranti wipe iranti soto fun tmpfs di inaccessible fun miiran ìdí. Ni awọn ọrọ miiran, eto kan pẹlu tmpfs nla ati awọn faili nla ninu rẹ le lo gbogbo iranti ati jamba. Imọran miiran: lakoko ṣiṣatunṣe faili kan /etc/fstab, Ranti pe o gbọdọ pari pẹlu laini tuntun, bibẹẹkọ eto rẹ kii yoo bata.

/proc ati /sys

Yato si /tmpVFS (awọn ọna ṣiṣe faili foju) ti o mọ julọ si awọn olumulo Linux jẹ /proc и /sys. (/dev ti wa ni be ni pín iranti ati ki o ko ni file_operations). Kini idi ti awọn paati meji wọnyi? Jẹ ká wo sinu yi oro.

procfs ṣẹda aworan ti ipo ekuro ati awọn ilana ti o ṣakoso fun userspace. awọn /proc Ekuro n gbejade alaye nipa kini awọn ohun elo ti o ni, gẹgẹbi awọn idilọwọ, iranti foju, ati oluṣeto. Yato si, /proc/sys - Eyi ni ibiti a ti tunto awọn paramita nipa lilo aṣẹ naa sysctl, wa fun userspace. Ipo ati awọn iṣiro ti awọn ilana kọọkan ni a fihan ni awọn ilana /proc/.

Awọn ọna faili foju ni Lainos: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ? Apa 1

o ti wa ni /proc/meminfo jẹ faili ti o ṣofo ti o ni alaye ti o niyelori ninu.

Ihuwasi /proc awọn faili fihan bi o yatọ VFS awọn ọna šiše faili disk le jẹ. Ni apa kan, /proc/meminfo ni alaye ti o le wo pẹlu aṣẹ naa free. Ni apa keji, o ṣofo! Bawo ni eyi ṣe ṣẹlẹ? Awọn ipo jẹ reminiscent ti awọn gbajumọ article ẹtọ “Ṣé òṣùpá wà nígbà tí kò sẹ́ni tó ń wò ó? Otitọ ati imọ-ẹrọ kuatomu", ti Cornell University ọjọgbọn fisiksi David Mermin kọ ni ọdun 1985. Otitọ ni pe ekuro gba awọn iṣiro iranti nigbati ibeere kan lati /proc, ati kosi ninu awọn faili /proc ko si nkankan nigbati ko si ọkan ti wa ni nwa nibẹ. Bi mo ti wi Mermin, “Ẹ̀kọ́ kúlẹ̀kútà ìpilẹ̀ṣẹ̀ sọ pé ìwọ̀n gbogbogbòò kò ṣàfihàn iye tí ó ti wà tẹ́lẹ̀ ti ohun-ìní tí a ń díwọ̀n.” (Ati ronu nipa ibeere nipa oṣupa bi iṣẹ amurele!)
Ofo ti o han gbangba procfs ṣe oye nitori alaye ti o wa ni agbara. Diẹ ti o yatọ ipo pẹlu sysfs. Jẹ ki a ṣe afiwe iye awọn faili ti o kere ju baiti kan wa ninu /proc ati ni /sys.

Awọn ọna faili foju ni Lainos: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ? Apa 1

Procfs ni o ni ọkan faili, eyun awọn okeere ekuro iṣeto ni, eyi ti o jẹ ẹya sile niwon o nikan nilo lati wa ni ti ipilẹṣẹ ni kete ti fun bata. Ni apa keji, in /sys ọpọlọpọ awọn faili ti o tobi ju lo wa, ọpọlọpọ eyiti o gba gbogbo oju-iwe iranti kan. Nigbagbogbo awọn faili sysfs ni deede nọmba kan tabi okun, ko dabi awọn tabili alaye ti o gba nipasẹ awọn faili kika bii /proc/meminfo.

Ero sysfs - pese awọn ohun-ini kika ati kikọ ti ohun ti ekuro n pe «kobjects» ni aaye olumulo. Awọn nikan ìlépa kobjects ni a itọkasi kika: nigbati awọn ti o kẹhin tọka si a kobject ti paarẹ, awọn eto yoo pada sipo awọn oro ni nkan ṣe pẹlu ti o. Sibẹsibẹ, /sys ṣe soke julọ ninu awọn gbajumọ "ABI idurosinsin fun aaye olumulo" mojuto, eyiti ko si ẹnikan ti o le lailai, labẹ eyikeyi ayidayida, "fifọ". Eyi ko tumọ si pe awọn faili ni sysfs jẹ aimi, eyiti yoo tako kika itọkasi ti awọn nkan aiduro.
ABI iduroṣinṣin ekuro naa ṣe opin ohun ti o le han ninu /sys, kuku ju ohun ti o wa nitootọ ni akoko yẹn pato. Awọn igbanilaaye faili kikojọ ni sysfs n pese oye sinu bii awọn aye atunto ti awọn ẹrọ, awọn modulu, awọn eto faili, ati bẹbẹ lọ. le ti wa ni tunto tabi ka. A ṣe ipinnu ọgbọn kan pe procfs tun jẹ apakan ti ABI iduroṣinṣin ti ekuro, botilẹjẹpe eyi ko sọ ni gbangba ni iwe.

Awọn ọna faili foju ni Lainos: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ? Apa 1

Awọn faili sinu sysfs ṣe apejuwe ohun-ini kan pato fun nkan kọọkan ati pe o le jẹ kika, kọ, tabi mejeeji. "0" ninu faili naa tọkasi pe SSD ko le yọkuro.

A yoo bẹrẹ apakan keji ti itumọ pẹlu bii o ṣe le ṣe atẹle VFS ni lilo eBPF ati awọn irinṣẹ bcc, ati ni bayi a n duro de awọn asọye rẹ ati pe a pe ọ ni aṣa. ṣii webinar, eyiti olukọ wa yoo ṣe ni Oṣu Kẹrin Ọjọ 9 - Vladimir Drozdetsky.

orisun: www.habr.com

Fi ọrọìwòye kun