Virtual file systems hauv Linux: vim li cas lawv xav tau thiab lawv ua haujlwm li cas? Ntu 1

Nyob zoo sawv daws! Peb tseem tab tom nthuav tawm cov kwj tshiab rau cov kev kawm uas koj twb tau poob rau hauv kev hlub thiab tam sim no peb tau nrawm tshaj tawm tias peb tab tom pib txheej txheem tshiab "Linux Administrator"uas yuav tso tawm thaum lub Plaub Hlis kawg. Ib qho kev tshaj tawm tshiab yuav raug mob siab rau rau qhov kev tshwm sim no. Nrog cov khoom qub koj tuaj yeem ua tau nyeem ntawm no.

Cov ntaub ntawv virtual ua haujlwm ua ib hom kev paub txog tej yam yees siv uas tso cai rau lub tswv yim ntawm Linux hais tias "txhua yam yog cov ntaub ntawv."

Virtual file systems hauv Linux: vim li cas lawv xav tau thiab lawv ua haujlwm li cas? Ntu 1

Cov ntaub ntawv system yog dab tsi? Raws li cov lus ntawm ib qho ntawm thawj tus neeg txhawb nqa thiab sau ntawv ntawm Linux Roberta Lav, "Ib cov ntaub ntawv kaw lus yog hierarchical khaws cov ntaub ntawv sib sau ua ke raws li cov qauv tshwj xeeb." Raws li nws yuav, qhov kev txhais no yog sib npaug zoo rau VFAT (Virtual File Allocation Table), Git thiab Cassandra (NoSQL database). Yog li dab tsi raws nraim txhais xws li ib yam li "file system"?

Filesystem Basics

Linux kernel muaj qee qhov kev xav tau rau ib lub koom haum uas tuaj yeem suav tias yog cov ntaub ntawv kaw lus. Nws yuav tsum siv cov txheej txheem open(), read() ΠΈ write() rau cov khoom tsis tu ncua uas muaj npe. Los ntawm cov khoom-oriented point of view programming, lub kernel txhais ib tug generic filesystem raws li ib tug paub daws teeb interface, thiab peb lub luag hauj lwm loj no suav hais tias "virtual" thiab tsis muaj cov ntsiab lus tseeb. Raws li, lub neej ntawd cov ntaub ntawv siv tau yog hu ua virtual file system (VFS).

Virtual file systems hauv Linux: vim li cas lawv xav tau thiab lawv ua haujlwm li cas? Ntu 1

Yog tias peb tuaj yeem qhib, nyeem, thiab sau rau ib qho chaw, ces qhov chaw ntawd raug suav tias yog cov ntaub ntawv, raws li peb tuaj yeem pom los ntawm qhov piv txwv hauv console saum toj no.
Qhov tshwm sim ntawm VFS tsuas yog qhia txog qhov kev soj ntsuam ntau rau Unix-zoo li cov tshuab uas "txhua yam yog cov ntaub ntawv." Xav txog qhov txawv npaum li cas nws yog qhov piv txwv me me saum toj no nrog / dev / console qhia tias lub console ua haujlwm li cas. Daim duab qhia txog kev sib tham sib tham Bash. Xa ib txoj hlua mus rau console (virtual console device) qhia nws ntawm lub vijtsam virtual. VFS muaj lwm yam, txawm tias txawv txawv. Piv txwv li, nws tso cai rau koj mus nrhiav los ntawm los ntawm nws.

Cov kab ke paub zoo xws li ext4, NFS, thiab / proc muaj peb txoj haujlwm tseem ceeb hauv C cov ntaub ntawv hu ua file_operations. Tsis tas li ntawd, qee cov ntaub ntawv kaw lus txuas ntxiv thiab rov txheeb xyuas VFS cov haujlwm hauv txoj kev paub txog cov khoom siv. Raws li Robert Love tau hais tawm, VFS abstraction tso cai rau cov neeg siv Linux tsis tuaj yeem luam cov ntaub ntawv mus rau lossis los ntawm cov neeg sab nrauv kev khiav hauj lwm lossis cov koom haum paub daws teeb meem xws li cov kav dej tsis muaj kev txhawj xeeb txog lawv cov ntaub ntawv sab hauv. Ntawm cov neeg siv sab (userspace), siv lub kaw lus hu, txheej txheem tuaj yeem luam tawm ntawm cov ntaub ntawv mus rau cov ntaub ntawv cov qauv siv cov qauv. read() ib cov ntaub ntawv system thiab ces siv txoj kev write () lwm cov ntaub ntawv system rau cov ntaub ntawv tso zis.

Cov kev txhais cov ntsiab lus uas muaj nyob rau hauv lub hauv paus VFS hom yog nyob rau hauv cov ntaub ntawv fs/*.c kernel qhov chaws code, thaum subdirectories fs/ muaj tej yam ntaub ntawv systems. Lub hauv paus tseem muaj cov chaw xws li cgroups, /dev ΠΈ tmpfs, uas yuav tsum tau thaum lub sij hawm khau raj thiab yog li ntawd txhais tau tias nyob rau hauv lub kernel subdirectory init/. Nco ntsoov tias cgroups, /dev ΠΈ tmpfs tsis txhob hu ua "loj peb" functions file_operations, tab sis ncaj qha nyeem thiab sau rau kev nco.
Daim duab hauv qab no qhia tau hais tias userspace nkag mus rau ntau hom filesystems feem ntau mounted ntawm Linux systems. Cov qauv tsis qhia pipes, dmesg ΠΈ POSIX clocks, uas kuj siv cov qauv file_operations, nkag los ntawm VFS txheej.

Virtual file systems hauv Linux: vim li cas lawv xav tau thiab lawv ua haujlwm li cas? Ntu 1

VFS yog "wrapper txheej" ntawm kev hu xov tooj thiab kev siv ntawm qee yam file_operations, zoo li ext4 ΠΈ procfs. Muaj nuj nqi file_operations tuaj yeem cuam tshuam nrog cov cuab yeej tsav tsheb lossis cov khoom siv nco nkag. tmpfs, devtmpfs ΠΈ cgroups tsis txhob siv file_operations, tab sis ncaj qha mus rau lub cim xeeb.
Lub hav zoov ntawm VFS muab lub peev xwm los rov siv cov cai, txij li cov txheej txheem yooj yim cuam tshuam nrog cov ntaub ntawv kaw lus tsis tas yuav rov ua dua los ntawm txhua hom ntaub ntawv. Code rov siv dua yog ib qho kev coj ua ntawm cov software engineers! Txawm li cas los xij, yog tias cov lej rov siv tau muaj yuam kev loj, tag nrho cov kev siv uas tau txais txiaj ntsig zoo los ntawm lawv.

/tmp: Cov lus qhia yooj yim

Ib txoj hauv kev yooj yim los txheeb xyuas tias VFS muaj nyob rau ntawm lub kaw lus yog ntaus ntawv mount | grep -v sd | grep -v :/, uas yuav qhia tag nrho cov mounted (mounted) filesystems uas tsis yog disk-neeg nyob thiab tsis-NFS, uas yog muaj tseeb nyob rau hauv feem ntau cov computers. Ib qho ntawm cov npe mounts (mounts) VFS yuav undoubtedly /tmp, txoj cai?

Virtual file systems hauv Linux: vim li cas lawv xav tau thiab lawv ua haujlwm li cas? Ntu 1

Txhua tus paub qhov chaw khaws cia / tmp ntawm lub cev nruab nrab - vwm! Tau qhov twg los.

Vim li cas ho tsis pom zoo khaws cia /tmp ntawm lub cev xov xwm? Raws li cov ntaub ntawv hauv /tmp yog ib ntus thiab cov khoom siv khaws cia qeeb dua lub cim xeeb uas tsim tmpfs. Ntxiv mus, cov xov xwm lub cev muaj kev cuam tshuam ntau dua rau hnav thiab tsim kua muag thaum sau overwritten dua li nco. Thaum kawg, cov ntaub ntawv hauv / tmp yuav muaj cov ntaub ntawv rhiab, yog li ua rau lawv ploj ntawm txhua qhov kev rov pib dua yog qhov tseem ceeb.

Hmoov tsis zoo, qee qhov Linux faib kev teeb tsa cov ntawv tsim / tmp ntawm lub cuab yeej cia los ntawm lub neej ntawd. Tsis txhob poob siab yog tias qhov no tshwm sim rau koj lub cev thiab. Ua raws li ob peb cov lus qhia yooj yim nrog Arch Wikikho qhov no, thiab yuav tsum paub tias lub cim xeeb faib rau tmpfs ua tsis tau rau lwm lub hom phiaj. Hauv lwm lo lus, lub kaw lus nrog tmpfs loj heev thiab cov ntaub ntawv loj ntawm nws tuaj yeem khiav tawm ntawm kev nco thiab poob. Lwm cov lus qhia: thaum kho cov ntaub ntawv /etc/fstab, nco ntsoov tias nws yuav tsum xaus nrog cov kab tshiab, txwv tsis pub koj lub kaw lus yuav tsis khau raj.

/proc thiab /sys

dua li /tmp, VFS (virtual file systems) uas paub zoo tshaj plaws rau cov neeg siv Linux /proc ΠΈ /sys. (/dev nyob hauv kev sib koom nco thiab tsis muaj file_operations). Vim li cas ob lub ntsiab lus no? Cia peb saib rau qhov teeb meem no.

procfs tsim ib qho snapshot ntawm lub kernel thiab cov txheej txheem nws saib rau userspace. Cov /proc lub kernel luam tawm cov ntaub ntawv hais txog yam nws muaj, xws li cuam tshuam, nco virtual, thiab lub sijhawm teem sijhawm. Tsis tas li ntawd, /proc/sys yog qhov chaw uas cov parameter configured nrog cov lus txib sysctl, muaj rau userspace. Cov xwm txheej thiab kev txheeb cais ntawm cov txheej txheem ntawm tus kheej raug tso tawm hauv cov npe /proc/.

Virtual file systems hauv Linux: vim li cas lawv xav tau thiab lawv ua haujlwm li cas? Ntu 1

nws yog /proc/meminfo yog cov ntaub ntawv khoob uas tseem muaj cov ntaub ntawv tseem ceeb.

Cwj pwm /proc cov ntaub ntawv qhia tias VFS disk cov ntaub ntawv sib txawv yuav ua tau li cas. Ntawm ib sab, /proc/meminfo muaj cov ntaub ntawv uas tuaj yeem pom nrog cov lus txib free. Ntawm qhov tod tes, nws yog qhov khoob! Nws ua haujlwm li cas? Qhov xwm txheej yog nco txog zaj lus nto moo hu ua Lub hli puas muaj thaum tsis muaj leej twg saib nws? Kev muaj tiag thiab Quantum Theory "sau los ntawm Cornell University physics xibfwb David Mermin hauv 1985. Qhov tseeb yog tias kernel sau cov txheeb cais nco thaum muaj kev thov rau /proc, thiab ua tau nyob rau hauv cov ntaub ntawv /proc tsis muaj dab tsi thaum tsis muaj leej twg saib. Raws li hais Mermin, "Fundamental quantum lus qhuab qhia hais tias kev ntsuas feem ntau tsis qhia tus nqi uas twb muaj lawm ntawm cov cuab yeej raug ntsuas." (Thiab xav txog cov lus nug txog lub hli ua homework!)
Pom qhov khoob procfs ua rau kev nkag siab vim cov ntaub ntawv muaj dynamic. Me ntsis txawv qhov teeb meem nrog sysfs. Cia peb sib piv pes tsawg cov ntaub ntawv tsawg kawg ib byte nyob rau hauv /proc thiab nyob rau hauv /sys.

Virtual file systems hauv Linux: vim li cas lawv xav tau thiab lawv ua haujlwm li cas? Ntu 1

Procfs muaj ib cov ntaub ntawv, uas yog lub exported kernel configuration, uas yog ib qho kev zam vim hais tias nws tsuas yog yuav tsum tau generated ib zaug ib lub khau raj. Ntawm qhov tod tes, hauv /sys muaj ntau ntau cov ntaub ntawv loj, ntau yam uas siv tag nrho nplooj ntawv nco. Feem ntau cov ntaub ntawv sysfs muaj raws nraim ib tug xov tooj los yog kab, tsis zoo li cov ntxhuav ntawm cov ntaub ntawv tau los ntawm kev nyeem cov ntaub ntawv xws li /proc/meminfo.

Lub hom phiaj sysfs - muab cov ntawv nyeem / sau cov khoom ntawm cov kernel hu li cas Β«kobjectsΒ» hauv userspace. Lub hom phiaj nkaus xwb kobjects yog txuas suav: thaum kawg txuas mus rau kobject raug tshem tawm, lub kaw lus yuav rov qab cov peev txheej cuam tshuam nrog nws. Txawm li cas los xij, /sys ua rau feem ntau ntawm cov nto moo "ruaj khov ABI rau userspace" core, uas tsis muaj leej twg tuaj yeem ua tau, nyob rau hauv txhua qhov xwm txheej "lov". Qhov no tsis txhais tau hais tias cov ntaub ntawv hauv sysfs yog qhov zoo li qub, uas yuav cuam tshuam kev siv suav ntawm cov khoom tsis ruaj khov.
Lub kernel ruaj khov ABI txwv qhov tuaj yeem tshwm sim hauv /sys, tsis yog qhov tseeb tam sim no nyob rau lub sijhawm ntawd. Sau cov ntaub ntawv tso cai hauv sysfs muab kev nkag siab txog yuav ua li cas teeb tsa rau cov khoom siv, modules, filesystems, thiab lwm yam. tuaj yeem teeb tsa lossis nyeem. Qhov kev txiav txim siab yog tias procfs kuj yog ib feem ntawm cov kernel ruaj khov ABI, txawm hais tias qhov no tsis tau hais meej meej hauv cov ntaub ntawv.

Virtual file systems hauv Linux: vim li cas lawv xav tau thiab lawv ua haujlwm li cas? Ntu 1

Cov ntaub ntawv hauv sysfs piav txog ib qho khoom tshwj xeeb rau txhua qhov chaw thiab tuaj yeem nyeem tau, sau tau, lossis ob qho tib si. "0" hauv cov ntaub ntawv txhais tau tias SSD tsis tuaj yeem raug tshem tawm.

Cia peb pib qhov thib ob ntawm kev txhais lus nrog yuav ua li cas saib xyuas VFS siv eBPF thiab bcc cov cuab yeej, thiab tam sim no peb tab tom tos koj cov lus thiab ib txwm caw koj mus qhib webinar, uas yuav muaj los ntawm peb tus kws qhia lub Plaub Hlis 9 - Vladimir Drozdetsky.

Tau qhov twg los: www.hab.com

Ntxiv ib saib