Mifumo ya faili halisi katika Linux: kwa nini zinahitajika na zinafanyaje kazi? Sehemu 1

Salaam wote! Tunaendelea kuzindua mipasho mipya ya kozi ambazo tayari umezipenda na sasa tunaharaka kutangaza kwamba tunaanza seti mpya ya kozi. "Msimamizi wa Linux"ambayo itazinduliwa mwishoni mwa Aprili. Uchapishaji mpya utawekwa tarehe kwa tukio hili. Kwa nyenzo za asili, unaweza soma hapa.

Mifumo halisi ya faili hutumika kama aina ya uondoaji wa kichawi ambayo inaruhusu falsafa ya Linux kusema kwamba "kila kitu ni faili."

Mifumo ya faili halisi katika Linux: kwa nini zinahitajika na zinafanyaje kazi? Sehemu 1

Mfumo wa faili ni nini? Kulingana na maneno ya mmoja wa wachangiaji wa kwanza na waandishi wa Linux Roberta Lava, "Mfumo wa faili ni hifadhi ya kihierarkia ya data iliyokusanywa kulingana na muundo maalum." Iwe hivyo, ufafanuzi huu unafaa kwa VFAT (Jedwali la Ugawaji wa Faili ya Virtual), Git na Cassandra (Hifadhidata ya NoSQL) Kwa hivyo ni nini hasa hufafanua kitu kama "mfumo wa faili"?

Misingi ya Mfumo wa faili

Kiini cha Linux kina mahitaji fulani kwa huluki ambayo inaweza kuchukuliwa kuwa mfumo wa faili. Ni lazima kutekeleza mbinu open(), read() ΠΈ write() kwa vitu vinavyoendelea ambavyo vina majina. Kutoka kwa mtazamo wa kitu programu, kernel inafafanua mfumo wa faili wa generic kama kiolesura cha dhahania, na kazi hizi tatu kubwa huchukuliwa kuwa "virtual" na hazina ufafanuzi kamili. Ipasavyo, utekelezaji wa mfumo chaguo-msingi wa faili unaitwa mfumo wa faili wa kawaida (VFS).

Mifumo ya faili halisi katika Linux: kwa nini zinahitajika na zinafanyaje kazi? Sehemu 1

Ikiwa tunaweza kufungua, kusoma, na kuandika kwa huluki, basi huluki hiyo inachukuliwa kuwa faili, kama tunavyoweza kuona kutoka kwa mfano kwenye koni hapo juu.
Hali ya VFS inasisitiza tu uchunguzi wa Unix kwamba "kila kitu ni faili". Fikiria jinsi ya kushangaza kwamba mfano huo mdogo /dev/console hapo juu unaonyesha jinsi koni inavyofanya kazi. Picha inaonyesha kikao cha mwingiliano cha Bash. Kutuma kamba kwa kiweko (kifaa cha kiweko halisi) huionyesha kwenye skrini pepe. VFS ina mali nyingine, hata ngeni. Kwa mfano, hukuruhusu kutafuta yeye.

Mifumo inayojulikana kama ext4, NFS, na /proc ina kazi tatu muhimu katika muundo wa data wa C unaoitwa faili_uendeshaji. Kwa kuongeza, mifumo fulani ya faili hupanua na kufafanua upya utendaji wa VFS kwa njia inayolengwa na kitu. Kama Robert Love anavyoonyesha, muhtasari wa VFS huruhusu watumiaji wa Linux kunakili faili bila kujali kwenda au kutoka kwa mifumo ya uendeshaji ya watu wengine au huluki dhahania kama mabomba bila kuwa na wasiwasi kuhusu umbizo lao la ndani la data. Kwa upande wa mtumiaji (nafasi ya mtumiaji), kwa kutumia simu ya mfumo, mchakato unaweza kunakili kutoka faili hadi miundo ya data ya kernel kwa kutumia njia. read() mfumo wa faili moja na kisha utumie njia write () mfumo mwingine wa faili kwa pato la data.

Ufafanuzi wa chaguo za kukokotoa ambazo ni za aina za VFS msingi ziko kwenye faili fs/*.c msimbo wa chanzo wa kernel, wakati subdirectories fs/ ina mifumo fulani ya faili. Msingi pia una vyombo kama vile cgroups, /dev ΠΈ tmpfs, ambazo zinahitajika wakati wa mchakato wa kuwasha na kwa hivyo zinafafanuliwa katika saraka ndogo ya kernel init/. Angalia hilo cgroups, /dev ΠΈ tmpfs usiite kazi za "tatu kubwa". file_operations, lakini soma na uandike moja kwa moja kwa kumbukumbu.
Mchoro ulio hapa chini unaonyesha jinsi nafasi ya mtumiaji inavyofikia aina tofauti za mifumo ya faili ambayo kawaida huwekwa kwenye mifumo ya Linux. Miundo haijaonyeshwa pipes, dmesg ΠΈ POSIX clocks, ambayo pia kutekeleza muundo file_operations, kupatikana kupitia safu ya VFS.

Mifumo ya faili halisi katika Linux: kwa nini zinahitajika na zinafanyaje kazi? Sehemu 1

VFS ni "safu ya kufunika" kati ya simu za mfumo na utekelezaji wa fulani file_operationsKama vile ext4 ΠΈ procfs. Kazi file_operations inaweza kuingiliana na viendeshi vya kifaa au vifaa vya ufikiaji wa kumbukumbu. tmpfs, devtmpfs ΠΈ cgroups usitumie file_operations, lakini fikia kumbukumbu moja kwa moja.
Kuwepo kwa VFS kunatoa fursa ya kutumia tena msimbo, kwani mbinu za kimsingi zinazohusiana na mifumo ya faili si lazima zitekelezwe tena na kila aina ya mfumo wa faili. Kutumia tena msimbo ni jambo la kawaida miongoni mwa wahandisi wa programu! Walakini, ikiwa nambari inayoweza kutumika tena inayo makosa makubwa, utekelezaji wote ambao hurithi njia za kawaida zinakabiliwa nao.

/tmp: Kidokezo rahisi

Njia rahisi ya kugundua kuwa VFS wapo kwenye mfumo ni kuandika mount | grep -v sd | grep -v :/, ambayo itaonyesha yote yaliyowekwa (mounted) mifumo ya faili ambayo haiishi kwenye diski na isiyo ya NFS, ambayo ni kweli kwenye kompyuta nyingi. Moja ya milipuko iliyoorodheshwa (mounts) VFS bila shaka /tmp, haki?

Mifumo ya faili halisi katika Linux: kwa nini zinahitajika na zinafanyaje kazi? Sehemu 1

Kila mtu anajua hifadhi hiyo / tmp juu ya kimwili kati - wazimu! Chanzo.

Kwa nini haifai kuhifadhi /tmp kwenye vyombo vya habari vya kimwili? Kwa sababu faili ndani /tmp ni za muda na vifaa vya kuhifadhi ni polepole kuliko kumbukumbu ambapo tmpfs imeundwa. Zaidi ya hayo, vyombo vya habari vya kimwili huathirika zaidi kuvaa wakati wa kuandika zaidi kuliko kumbukumbu. Mwishowe, faili katika /tmp zinaweza kuwa na habari nyeti, kwa hivyo kuzifanya kutoweka kwenye kila kuwasha upya ni kipengele muhimu.

Kwa bahati mbaya, hati zingine za usakinishaji wa usambazaji wa Linux huunda /tmp kwenye kifaa cha kuhifadhi kwa chaguo-msingi. Usikate tamaa ikiwa hii ilitokea kwa mfumo wako pia. Fuata maagizo machache rahisi na Arch Wikikurekebisha hii, na ujue kuwa kumbukumbu iliyotengwa kwa ajili ya tmpfs inakuwa haipatikani kwa madhumuni mengine. Kwa maneno mengine, mfumo ulio na tmpfs kubwa na faili kubwa juu yake unaweza kukosa kumbukumbu na kuanguka. Kidokezo kingine: wakati wa kuhariri faili /etc/fstab, kumbuka kwamba lazima imalizike na laini mpya, vinginevyo mfumo wako hautaanza.

/proc na /sys

Mbali na hilo /tmp, VFS (mifumo ya faili halisi) ambayo inajulikana zaidi kwa watumiaji wa Linux ni /proc ΠΈ /sys. (/dev inakaa katika kumbukumbu iliyoshirikiwa na haina file_operations) Kwa nini vipengele hivi viwili? Hebu tuangalie suala hili.

procfs huunda taswira ya kernel na michakato inayofuatilia userspace. Katika /proc kernel huchapisha maelezo kuhusu kile kilicho nacho, kama vile kukatizwa, kumbukumbu pepe, na kipanga ratiba. Mbali na hilo, /proc/sys ni mahali ambapo vigezo vimeundwa kwa amri sysctl, inapatikana kwa userspace. Hali na takwimu za michakato ya mtu binafsi huonyeshwa kwenye saraka /proc/.

Mifumo ya faili halisi katika Linux: kwa nini zinahitajika na zinafanyaje kazi? Sehemu 1

Hapa /proc/meminfo ni faili tupu ambayo hata hivyo ina taarifa muhimu.

Tabia /proc faili zinaonyesha jinsi mifumo tofauti ya faili za diski za VFS inaweza kuwa. Kwa upande mmoja, /proc/meminfo vyenye habari ambayo inaweza kutazamwa na amri free. Kwa upande mwingine, ni tupu! Inafanyaje kazi? Hali hiyo inakumbusha makala maarufu yenye kichwa Je, mwezi upo wakati hakuna mtu anayeutazama? Ukweli na Nadharia ya Quantum"iliyoandikwa na profesa wa fizikia wa Chuo Kikuu cha Cornell David Mermin mnamo 1985. Ukweli ni kwamba kernel inakusanya takwimu za kumbukumbu wakati ombi linafanywa /proc, na kwa kweli katika faili /proc hakuna kitu wakati hakuna mtu anayeangalia. Kama ilivyosemwa Mermin, "Mafundisho ya kimsingi ya quantum yanasema kwamba kipimo kwa ujumla hakionyeshi thamani iliyokuwepo awali ya mali inayopimwa." (Na fikiria swali kuhusu mwezi kama kazi ya nyumbani!)
Inaonekana utupu procfs ina maana kwa sababu habari huko ni ya nguvu. Hali tofauti kidogo na sysfs. Wacha tulinganishe ni faili ngapi ambazo zina ukubwa wa angalau baiti moja /proc na /sys.

Mifumo ya faili halisi katika Linux: kwa nini zinahitajika na zinafanyaje kazi? Sehemu 1

Procfs ina faili moja, ambayo ni usanidi wa kernel iliyosafirishwa, ambayo ni ubaguzi kwa sababu inahitaji tu kuzalishwa mara moja kwa buti. Kwa upande mwingine, katika /sys kuna faili nyingi kubwa, nyingi ambazo huchukua ukurasa mzima wa kumbukumbu. Kawaida faili sysfs vyenye nambari moja au laini, tofauti na jedwali la habari iliyopatikana kutoka kwa faili za kusoma kama vile /proc/meminfo.

Lengo sysfs - toa sifa za kusoma/kuandika za kile kernel huita Β«kobjectsΒ» katika nafasi ya mtumiaji. Lengo pekee kobjects ni kuhesabu viungo: wakati kiungo cha mwisho cha kobject kinapoondolewa, mfumo utarejesha rasilimali zinazohusiana nayo. Hata hivyo, /sys hufanya wengi wa maarufu "ABI thabiti kwa nafasi ya mtumiaji" msingi, ambayo hakuna mtu anaweza milele, chini ya hali yoyote "mapumziko". Hii haimaanishi kuwa faili kwenye sysfs ni tuli, ambayo haiendani na hesabu ya kumbukumbu ya vitu visivyo thabiti.
ABI thabiti ya kernel huwekea mipaka kile kinachoweza kuonekana ndani /sys, sio kile kilichopo kwa wakati huo. Kuorodhesha ruhusa za faili katika sysfs hutoa maarifa juu ya jinsi mipangilio inayoweza kusanidiwa ya vifaa, moduli, mifumo ya faili, n.k. inaweza kusanidiwa au kusoma. Hitimisho la kimantiki ni kwamba procfs pia ni sehemu ya ABI thabiti ya kernel, ingawa hii haijasemwa wazi katika nyaraka.

Mifumo ya faili halisi katika Linux: kwa nini zinahitajika na zinafanyaje kazi? Sehemu 1

Faili ndani sysfs eleza sifa moja mahususi kwa kila chombo na inaweza kusomeka, kuandikwa, au zote mbili. "0" kwenye faili inamaanisha kuwa SSD haiwezi kuondolewa.

Hebu tuanze sehemu ya pili ya tafsiri na jinsi ya kufuatilia VFS kwa kutumia eBPF na zana za bcc, na sasa tunasubiri maoni yako na kwa kawaida tunakualika fungua wavuti, ambayo itashikiliwa na mwalimu wetu mnamo Aprili 9 - Vladimir Drozdetsky.

Chanzo: mapenzi.com

Kuongeza maoni