Virtualaj dosiersistemoj en Linukso: kial ili estas bezonataj kaj kiel ili funkcias? Parto 1

Saluton al ĉiuj! Ni daŭre lanĉas novajn fluojn por la kursoj, al kiuj vi jam enamiĝis kaj nun ni rapidas anonci, ke ni komencas novan aron da kursoj. "Linuksa Administranto"kiu lanĉos fine de aprilo. Nova eldonaĵo estos datiĝita por ĉi tiu evento. Kun la originala materialo, vi povas legu ĉi tie.

Virtualaj dosiersistemoj funkcias kiel speco de magia abstraktado kiu permesas al la filozofio de Linukso diri ke "ĉio estas dosiero."

Virtualaj dosiersistemoj en Linukso: kial ili estas bezonataj kaj kiel ili funkcias? Parto 1

Kio estas dosiersistemo? Surbaze de la vortoj de unu el la unuaj kontribuantoj kaj aŭtoroj de Linukso Roberta Lava, "Dosiersistemo estas hierarkia stokado de datumoj kunmetitaj laŭ specifa strukturo." Estu kiel ajn, ĉi tiu difino estas same bone taŭga por VFAT (Virtuala Dosiera Asigna Tablo), Git kaj Cassandra (NoSQL-datumbazo). Do kio precize difinas tian aferon kiel "dosiersistemo"?

Bazaj Dosiersistemoj

La Linukso-kerno havas certajn postulojn por ento kiu povas esti konsiderata dosiersistemo. Ĝi devas efektivigi la metodojn open(), read() и write() por persistaj objektoj, kiuj havas nomojn. El objekt-orientita vidpunkto programado, la kerno difinas senmarkan dosiersistemon kiel abstraktan interfacon, kaj tiuj tri grandaj funkcioj estas konsideritaj "virtuala" kaj havas neniun konkretan difinon. Sekve, la defaŭlta dosiersistemo efektivigo estas nomita virtuala dosiersistemo (VFS).

Virtualaj dosiersistemoj en Linukso: kial ili estas bezonataj kaj kiel ili funkcias? Parto 1

Se ni povas malfermi, legi kaj skribi al ento, tiam tiu ento estas konsiderata dosiero, kiel ni povas vidi el la ekzemplo en la supra konzolo.
La VFS-fenomeno nur substrekas la Unikso-similan observon ke "ĉio estas dosiero". Pensu, kiel strange, ke tiu eta ekzemplo de /dev/console supre montras kiel la konzolo efektive funkcias. La bildo montras interagan Bash-sesion. Sendante ŝnuron al la konzolo (virtuala konzola aparato) montras ĝin sur virtuala ekrano. VFS havas aliajn, eĉ pli strangajn ecojn. Ekzemple, ĝi permesas vin serĉi per li.

Konataj sistemoj kiel ekzemple ext4, NFS, kaj /proc havas tri gravajn funkciojn en C datumstrukturo nomita dosiero_operacioj. Krome, certaj dosiersistemoj etendas kaj redifinas VFS-funkciecon en konata objektoorientita maniero. Kiel Robert Love notas, la VFS-abstraktado permesas al uzantoj de Linukso kopii dosierojn al aŭ de triaj operaciumoj aŭ abstraktaj estaĵoj kiel pipoj sen zorgi pri sia interna datumformato. Sur la uzantflanko (uzantspaco), uzante sistemvokon, procezo povas kopii de dosiero al kernaj datumstrukturoj uzante la metodon read() unu dosiersistemo kaj poste uzu la metodon write () alia dosiersistemo por eligo de datumoj.

La funkciodifinoj kiuj apartenas al la bazaj VFS-tipoj estas en la dosieroj fs/*.c kerno fontkodo, dum subdosierujoj fs/ enhavas certajn dosiersistemojn. La kerno ankaŭ enhavas entojn kiel ekzemple cgroups, /dev и tmpfs, kiuj estas postulataj dum la ekfunkciigo kaj tial estas difinitaj en la kerna subdosierujo init/. Rimarku tion cgroups, /dev и tmpfs ne nomu la "grandajn tri" funkciojn file_operations, sed rekte legu kaj skribu al memoro.
La diagramo malsupre montras kiel uzantspaco aliras la malsamajn specojn de dosiersistemoj ofte muntitaj sur Linuksaj sistemoj. Strukturoj ne montritaj pipes, dmesg и POSIX clocks, kiuj ankaŭ efektivigas la strukturon file_operations, alirita tra la VFS-tavolo.

Virtualaj dosiersistemoj en Linukso: kial ili estas bezonataj kaj kiel ili funkcias? Parto 1

VFS estas "envolvaĵtavolo" inter sistemvokoj kaj efektivigoj de certaj file_operationskiel ekzemple ext4 и procfs. Funkcioj file_operations povas interagi kun aŭ aparataj ŝoforoj aŭ memoraliraj aparatoj. tmpfs, devtmpfs и cgroups ne uzas file_operations, sed rekte aliru la memoron.
La ekzisto de VFS disponigas ŝancon reuzi kodon, ĉar la bazaj metodoj asociitaj kun dosiersistemoj ne devas esti re-efektivigitaj per ĉiu speco de dosiersistemo. Kodreuzo estas ofta praktiko inter softvarinĝenieroj! Tamen, se la reuzebla kodo enhavas seriozaj eraroj, ĉiuj efektivigoj kiuj heredas komunajn metodojn suferas de ili.

/tmp: Simpla sugesto

Facila maniero detekti ke VFS ĉeestas sur sistemo estas tajpi mount | grep -v sd | grep -v :/, kiu montros ĉiujn muntitajn (mounted) dosiersistemoj kiuj ne estas disk-loĝantaj kaj ne-NFS, kio estas vera en la plej multaj komputiloj. Unu el la listigitaj montoj (mounts) VFS sendube faros /tmp, ĉu ne?

Virtualaj dosiersistemoj en Linukso: kial ili estas bezonataj kaj kiel ili funkcias? Parto 1

Ĉiuj konas tiun stokadon / tmp sur fizika medio - frenezo! Fonto.

Kial estas nedezirinda stoki /tmp sur fizikaj amaskomunikiloj? Ĉar la dosieroj en /tmp estas provizoraj kaj stokaj aparatoj estas pli malrapidaj ol la memoro kie tmpfs estas kreita. Plie, fizika amaskomunikilaro estas pli sentema eluzebla kiam anstataŭita ol memoro. Fine, dosieroj en /tmp povas enhavi sentemajn informojn, do malaperigi ilin ĉe ĉiu rekomenco estas esenca trajto.

Bedaŭrinde iuj instalaj skriptoj de Linuksa distribuo kreas /tmp en la stoka aparato defaŭlte. Ne malesperu, se tio okazis ankaŭ al via sistemo. Sekvu kelkajn simplajn instrukciojn kun Arch Wikiripari ĉi tion, kaj konscii ke la memoro asignita por tmpfs fariĝas neatingebla por aliaj celoj. Alivorte, sistemo kun giganta tmpfs kaj grandaj dosieroj sur ĝi povas elĉerpi memoron kaj kraŝi. Alia konsilo: dum redaktado de dosiero /etc/fstab, memoru, ke ĝi devas finiĝi per novlinio, alie via sistemo ne startos.

/proc kaj /sys

krom /tmp, VFS (virtualaj dosiersistemoj) kiuj estas plej konataj al Linukso-uzantoj estas /proc и /sys. (/dev loĝas en komuna memoro kaj ne havas file_operations). Kial ĉi tiuj du komponantoj? Ni rigardu ĉi tiun aferon.

procfs kreas momentfoton de la kerno kaj la procezoj kiujn ĝi monitoras userspace. la /proc la kerno presas informojn pri tio, kion ĝi disponeblas, kiel interrompoj, virtuala memoro kaj la planilo. Cetere, /proc/sys estas la loko kie la parametroj agordis kun la komando sysctl, disponebla por userspace. La stato kaj statistiko de individuaj procezoj estas montrataj en dosierujoj /proc/.

Virtualaj dosiersistemoj en Linukso: kial ili estas bezonataj kaj kiel ili funkcias? Parto 1

estas /proc/meminfo estas malplena dosiero, kiu tamen enhavas valorajn informojn.

Konduto /proc dosieroj montras kiom malsamaj VFS-diskaj dosiersistemoj povas esti. Unuflanke, /proc/meminfo enhavas informojn, kiujn oni povas vidi per la komando free. Aliflanke, ĝi estas malplena! Kiel ĝi funkcias? La situacio memorigas pri la fama artikolo titolita Ĉu la luno ekzistas kiam neniu rigardas ĝin? Realo kaj Kvantuma Teorio"skribita fare de Cornell University fizikprofesoro David Mermin en 1985. La fakto estas, ke la kerno kolektas memorstatistikojn kiam peto estas farita al /proc, kaj fakte en dosieroj /proc estas nenio, kiam neniu rigardas. Kiel dirite Mermin, "Fundamenta kvantuma doktrino diras ke mezurado ĝenerale ne rivelas antaŭekzistan valoron de la posedaĵo estanta mezurita." (Kaj konsideru la demandon pri la luno kiel hejmtaskon!)
Ŝajnas malpleno procfs havas sencon ĉar la informoj tie estas dinamikaj. Iomete malsama situacio kun sysfs. Ni komparu kiom da dosieroj estas almenaŭ unu bajto en grandeco /proc kaj en /sys.

Virtualaj dosiersistemoj en Linukso: kial ili estas bezonataj kaj kiel ili funkcias? Parto 1

Procfs havas unu dosieron, nome la eksportitan kernan agordon, kiu estas escepto ĉar ĝi devas esti generita nur unufoje por ekkuro. Aliflanke, en /sys estas multaj pli grandaj dosieroj, multaj el kiuj okupas tutan paĝon da memoro. Kutime dosieroj sysfs enhavas ekzakte unu nombron aŭ linion, male al tabeloj de informoj akiritaj de legado de dosieroj kiel ekzemple /proc/meminfo.

Golo sysfs - havigi leg-/skribi ecojn de tio, kion la kerno vokas «kobjects» en uzantspaco. La sola celo kobjects estas ligokalkulado: kiam la lasta ligo al kobjekto estas forigita, la sistemo restarigos la rimedojn asociitajn kun ĝi. Tamen, /sys konsistigas la plej grandan parton de la famaj "stabila ABI por uzantspaco" kerno, kiun neniu povas iam ajn, en ajna cirkonstanco "rompi". Ĉi tio ne signifas, ke dosieroj en sysfs estas senmovaj, kio estus malkonsekvenca kun referenckalkulado de malstabilaj objektoj.
La stabila ABI de la kerno limigas en kio povas aperi /sys, ne kio efektive ĉeestas en tiu aparta momento. Listigi dosierpermesojn en sysfs donas sciojn pri kiom agordeblaj agordoj por aparatoj, moduloj, dosiersistemoj ktp. povas esti agordita aŭ legita. La logika konkludo estas ke procfs ankaŭ estas parto de la stabila ABI de la kerno, kvankam tio ne estas eksplicite deklarita en dokumentado.

Virtualaj dosiersistemoj en Linukso: kial ili estas bezonataj kaj kiel ili funkcias? Parto 1

Dosieroj en sysfs priskribu unu apartan posedaĵon por ĉiu ento kaj povas esti legebla, skribebla aŭ ambaŭ. "0" en la dosiero signifas, ke la SSD ne povas esti forigita.

Ni komencu la duan parton de la traduko kun kiel kontroli VFS per la eBPF kaj bcc-iloj, kaj nun ni atendas viajn komentojn kaj tradicie invitas vin al malferma retseminario, kiu okazos de nia instruisto la 9-an de aprilo - Vladimir Drozdeckij.

fonto: www.habr.com

Aldoni komenton