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.
Virtualaj dosiersistemoj funkcias kiel speco de magia abstraktado kiu permesas al la filozofio de Linukso diri ke "ĉio estas dosiero."
Kio estas dosiersistemo? Surbaze de la vortoj de unu el la unuaj kontribuantoj kaj aŭtoroj de Linukso
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
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
Konataj sistemoj kiel ekzemple ext4, NFS, kaj /proc havas tri gravajn funkciojn en C datumstrukturo nomita 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/
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.
VFS estas "envolvaĵtavolo" inter sistemvokoj kaj efektivigoj de certaj file_operations
kiel 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
/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?
Ĉiuj konas tiun stokadon / tmp
sur fizika medio - frenezo!
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 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/
.
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 /proc
, kaj fakte en dosieroj /proc
estas nenio, kiam neniu rigardas. Kiel dirite
Ŝ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
.
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
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
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
fonto: www.habr.com