Sistèm dosye vityèl nan Linux: poukisa yo bezwen ak ki jan yo travay? Pati 1

Bonjou tout moun! Nou kontinye lanse nouvo kouran pou kou ou te deja renmen yo e kounye a nou prese anonse ke nap kòmanse yon nouvo seri kou. "Administratè Linux"ki pral lanse nan fen avril. Yon nouvo piblikasyon pral gen dat pou evènman sa a. Avèk materyèl orijinal la, ou kapab li isit la.

Sistèm fichye vityèl sèvi kòm yon kalite abstraksyon majik ki pèmèt filozofi Linux di ke "tout bagay se yon dosye."

Sistèm dosye vityèl nan Linux: poukisa yo bezwen ak ki jan yo travay? Pati 1

Ki sa ki se yon sistèm dosye? Baze sou pawòl youn nan premye kontribitè ak otè Linux Roberta Lava, "Yon sistèm dosye se yon depo yerarchize nan done reyini dapre yon estrikti espesifik." Kèlkeswa sa, definisyon sa a egalman byen adapte ak VFAT (Virtual File Allocation Table), Git ak Cassandra (NoSQL baz done). Se konsa, ki sa egzakteman defini yon bagay tankou yon "sistèm dosye"?

Prensip Fondamantal Filesystem

Kernel Linux la gen sèten kondisyon pou yon antite ki ka konsidere kòm yon sistèm dosye. Li dwe aplike metòd yo open(), read() и write() pou objè ki pèsistan ki gen non. Soti nan yon pwen de vi oryante objè pwogramasyon, Kernel la defini yon sistèm fichye jenerik kòm yon koòdone abstrè, ak twa gwo fonksyon sa yo konsidere kòm "vityèl" epi yo pa gen okenn definisyon konkrè. An konsekans, aplikasyon sistèm fichye default yo rele yon sistèm fichye vityèl (VFS).

Sistèm dosye vityèl nan Linux: poukisa yo bezwen ak ki jan yo travay? Pati 1

Si nou ka louvri, li, ak ekri nan yon antite, Lè sa a, antite sa a konsidere kòm yon dosye, jan nou ka wè nan egzanp ki nan konsole ki anwo a.
Fenomèn nan VFS sèlman souliye obsèvasyon an tankou Unix ke "tout bagay se yon dosye". Panse ki jan etranj ke ti egzanp /dev/console pi wo a montre ki jan konsole a aktyèlman ap travay. Foto a montre yon sesyon Bash entèaktif. Voye yon fisèl nan konsole a (aparèy konsole vityèl) montre li sou yon ekran vityèl. VFS gen lòt, menm pwopriyete etranje. Pou egzanp, li pèmèt ou rechèch pa pa l '.

Sistèm abitye tankou ext4, NFS, ak / proc gen twa fonksyon enpòtan nan yon estrikti done C yo rele file_operations. Anplis de sa, sèten sistèm dosye pwolonje ak redefini fonksyonalite VFS nan yon fason abitye oryante objè. Kòm Robert Love fè remake, abstraksyon VFS la pèmèt itilizatè Linux yo kopye fichye yo nan oswa soti nan sistèm operasyon twazyèm pati oswa antite abstrè tankou tiyo san yo pa enkyete sou fòma done entèn yo. Sou bò itilizatè a (espas itilizatè), lè l sèvi avèk yon apèl sistèm, yon pwosesis ka kopye soti nan yon dosye nan estrikti done nwayo lè l sèvi avèk metòd la. read() yon sèl sistèm dosye ak Lè sa a, sèvi ak metòd la write () yon lòt sistèm dosye pou pwodiksyon done.

Definisyon fonksyon ki fè pati kalite baz VFS yo nan dosye yo fs/*.c kòd sous nwayo, pandan y ap subdirectory fs/ genyen sèten sistèm dosye. Nwayo a gen ladan tou antite tankou cgroups, /dev и tmpfs, ki obligatwa pandan pwosesis bòt la epi se poutèt sa yo defini nan sou-anyè nwayo a init/. Remake sa cgroups, /dev и tmpfs pa rele "twa gwo" fonksyon yo file_operations, men dirèkteman li ak ekri nan memwa.
Dyagram ki anba la a montre kouman espas itilizatè yo jwenn aksè nan diferan kalite sistèm fichye ki souvan monte sou sistèm Linux. Estrikti yo pa montre pipes, dmesg и POSIX clocks, ki tou aplike estrikti a file_operations, aksè atravè kouch VFS la.

Sistèm dosye vityèl nan Linux: poukisa yo bezwen ak ki jan yo travay? Pati 1

VFS se yon "kouch wrapper" ant apèl sistèm ak aplikasyon sèten file_operationstankou ext4 и procfs. Fonksyon file_operations ka kominike avèk swa chofè aparèy oswa aparèy aksè memwa. tmpfs, devtmpfs и cgroups pa sèvi ak file_operations, men dirèkteman aksè memwa a.
Egzistans VFS bay yon opòtinite pou reitilize kòd, paske metòd debaz ki asosye ak sistèm fichye pa oblije re-aplike chak kalite sistèm fichye. Réutilisation kòd se yon pratik komen pami enjenyè lojisyèl! Sepandan, si kòd ki kapab itilize ankò gen ladan l erè grav, tout aplikasyon ki eritye metòd komen soufri nan men yo.

/tmp: Senp allusion

Yon fason fasil pou detekte ke VFS yo prezan sou yon sistèm se tape mount | grep -v sd | grep -v :/, ki pral montre tout monte (mounted) sistèm fichye ki pa rezidan disk ak ki pa NFS, ki se vre sou pifò òdinatè. Youn nan mòn ki nan lis yo (mounts) VFS pral san dout /tmp, pa vre?

Sistèm dosye vityèl nan Linux: poukisa yo bezwen ak ki jan yo travay? Pati 1

Tout moun konnen depo sa / tmp sou yon mwayen fizik - foli! Sous.

Poukisa li endezirab nan magazen /tmp sou medya fizik? Paske dosye yo nan /tmp yo tanporè ak aparèy depo yo pi dousman pase memwa kote tmpfs kreye. Anplis, medya fizik yo pi fasil pou mete lè yo ekri pase memwa. Finalman, dosye nan / tmp ka gen enfòmasyon sansib, kidonk fè yo disparèt sou chak rdemare se yon karakteristik esansyèl.

Malerezman, kèk script enstalasyon distribisyon Linux kreye /tmp sou aparèy depo a pa default. Pa dezespwa si sa te rive sistèm ou tou. Swiv kèk enstriksyon senp ak Arch Wikiranje sa a, epi ou dwe konnen ke memwa a atribye ba pou tmpfs vin pa disponib pou lòt rezon. Nan lòt mo, yon sistèm ki gen yon tmpfs jeyan ak gwo dosye sou li ka kouri soti nan memwa ak aksidan. Yon lòt allusion: pandan y ap modifye yon dosye /etc/fstab, sonje ke li dwe fini ak yon newline, otreman sistèm ou a pa pral demaraj.

/proc ak /sys

Anplis /tmp, VFS (sistèm dosye vityèl) ki pi abitye ak itilizatè Linux yo /proc и /sys. (/dev abite nan memwa pataje epi li pa genyen file_operations). Poukisa de eleman sa yo? Ann gade nan pwoblèm sa a.

procfs kreye yon snapshot nan nwayo a ak pwosesis li kontwole pou yo userspace. Nan /proc nwayo a enprime enfòmasyon sou sa li disponib, tankou entèwonp, memwa vityèl, ak orè a. Anplis, /proc/sys se plas la kote paramèt yo configuré ak lòd la sysctl, disponib pou userspace. Estati a ak estatistik nan pwosesis endividyèl yo parèt nan anyè /proc/.

Sistèm dosye vityèl nan Linux: poukisa yo bezwen ak ki jan yo travay? Pati 1

Isit la /proc/meminfo se yon dosye vid ki poutan gen bonjan enfòmasyon.

Konpòtman /proc fichye yo montre kouman diferan sistèm dosye disk VFS kapab. Sou yon bò, /proc/meminfo gen enfòmasyon ki ka wè ak kòmandman an free. Nan lòt men an, li nan vid! Ki jan li travay? Sitiyasyon an se okoumansman de atik la pi popilè ki gen tit Èske lalin nan egziste lè pèsonn pa gade l? Reyalite ak teyori kwantik"ekri pa pwofesè fizik Inivèsite Cornell David Mermin an 1985. Reyalite a se ke nwayo a kolekte estatistik memwa lè yo fè yon demann /proc, ak aktyèlman nan dosye /proc pa gen anyen lè pesonn pa gade. Kòm te di Mermin, "Doktrin pwopòsyon fondamantal di ke mezi jeneralman pa revele yon valè pre-egziste nan pwopriyete a ke yo te mezire." (Epi konsidere kesyon sou lalin lan kòm devwa!)
Sanble vid procfs fè sans paske enfòmasyon an gen dinamik. Yon sitiyasyon yon ti kras diferan ak sysfs. Ann konpare konbyen fichye ki gen omwen yon byte nan gwosè /proc ak /sys.

Sistèm dosye vityèl nan Linux: poukisa yo bezwen ak ki jan yo travay? Pati 1

Procfs gen yon sèl fichye, sètadi konfigirasyon nwayo ekspòte, ki se yon eksepsyon paske li sèlman bezwen pwodwi yon fwa pou chak bòt. Nan lòt men an, nan /sys gen anpil dosye ki pi gwo, anpil nan yo ki pran yon paj tout nan memwa. Anjeneral dosye sysfs genyen egzakteman yon nimewo oswa yon liy, kontrèman ak tablo enfòmasyon yo jwenn nan lekti dosye tankou /proc/meminfo.

Objektif sysfs - bay pwopriyete lekti/ekri nan sa nwayo a rele «kobjects» nan espas itilizatè. Objektif la sèlman kobjects se konte lyen: lè yo retire dènye lyen ki mennen nan yon kobject, sistèm nan pral retabli resous ki asosye ak li. Poutan, /sys fè pi fò nan pi popilè a "ABI ki estab pou espas itilizatè" nwayo, ki pèsonn pa ka janm, nan nenpòt sikonstans "kraze". Sa pa vle di ke fichye nan sysfs yo estatik, ki ta dwe konsistan avèk konte referans nan objè enstab.
ABI ki estab nwayo a limite sa ki ka parèt nan /sys, pa sa ki aktyèlman prezan nan moman an patikilye. Lis otorizasyon pou fichye yo nan sysfs bay yon insight sou fason konfigirasyon paramèt pou aparèy, modil, sistèm fichye, elatriye. ka konfigirasyon oswa li. Konklizyon ki lojik la se ke procfs se tou yon pati nan ABI ki estab nwayo a, byenke sa a pa klèman deklare nan dokiman.

Sistèm dosye vityèl nan Linux: poukisa yo bezwen ak ki jan yo travay? Pati 1

Dosye nan sysfs dekri yon pwopriyete patikilye pou chak antite epi yo ka lizib, ekri, oswa toude. "0" nan dosye a vle di ke SSD a pa ka retire.

Ann kòmanse dezyèm pati tradiksyon an ak fason pou kontwole VFS lè l sèvi avèk zouti eBPF ak bcc, epi kounye a nou ap tann kòmantè ou yo epi tradisyonèlman envite ou. louvri webinar, ki pral fèt pa pwofesè nou an nan dat 9 avril - Vladimir Drozdetsky.

Sous: www.habr.com

Add nouvo kòmantè