Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 2. daļa

Labdien, mēs ar jums dalāmies ar publikācijas otro daļu ā€œVirtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzÄ«gas un kā tās darbojas?ā€ JÅ«s varat izlasÄ«t pirmo daļu Å”eit. Atgādināsim, ka Ŕī publikāciju sērija ir ieplānota tā, lai tas sakristu ar jaunas straumes uzsākÅ”anu kursā "Linux administrators", kas sākas pavisam drÄ«z.

Kā pārraudzīt VFS, izmantojot eBPF un Bcc rīkus

VienkārŔākais veids, kā saprast, kā kodols darbojas ar failiem sysfs ir redzēt to praksē, un vienkārŔākais veids, kā skatÄ«ties ARM64, ir izmantot eBPF. eBPF (saÄ«sinājums no Berkeley pakeÅ”u filtra) sastāv no virtuālās maŔīnas, kurā darbojas kodols, ko priviliģētie lietotāji var pieprasÄ«t (query) no komandrindas. Kodola avoti stāsta lasÄ«tājam, ko kodols var darÄ«t; eBPF rÄ«ku palaiÅ”ana ielādētā sistēmā parāda, ko kodols patiesÄ«bā dara.

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 2. daļa

Par laimi, ar rÄ«ku palÄ«dzÄ«bu sākt lietot eBPF ir diezgan vienkārÅ”i BCC, kas ir pieejami kā pakotnes no vispārējā izplatÄ«Å”anas Linux un detalizēti dokumentēts Bernards Gregs. RÄ«ki bcc ir Python skripti ar nelieliem C koda ievietojumiem, kas nozÄ«mē, ka ikviens, kurÅ” pārzina abas valodas, var tos viegli modificēt. IN bcc/tools Ir 80 Python skripti, kas nozÄ«mē, ka, visticamāk, izstrādātājs vai sistēmas administrators varēs izvēlēties kaut ko piemērotu problēmas risināŔanai.
Lai iegÅ«tu vismaz virspusēju priekÅ”statu par to, kādu darbu VFS veic darbojoŔā sistēmā, izmēģiniet vfscount vai vfsstat. Tas parādÄ«s, teiksim, ka desmitiem zvanu vfs_open() un "viņa draugi" notiek burtiski katru sekundi.

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 2. daļa

vfsstat.py ir Python skripts ar C koda ievietojumiem, kas vienkārŔi uzskaita VFS funkciju zvanus.

Sniegsim triviālāku piemēru un paskatīsimies, kas notiek, kad datorā ievietojam USB zibatmiņu un sistēma to konstatē.

Virtuālās failu sistēmas operētājsistēmā Linux: kāpēc tās ir vajadzīgas un kā tās darbojas? 2. daļa

Izmantojot eBPF, jÅ«s varat redzēt, kas notiek /syskad ir ievietots USB zibatmiņas disks. Å eit ir parādÄ«ts vienkārÅ”s un sarežģīts piemērs.

IepriekÅ” parādÄ«tajā piemērā bcc instruments trace.py izdrukā ziņojumu, kad komanda tiek izpildÄ«ta sysfs_create_files(). Mēs to redzam sysfs_create_files() tika palaists, izmantojot kworker straume, reaģējot uz to, ka tika ievietots zibatmiņas disks, bet kāds fails tika izveidots? Otrais piemērs parāda eBPF jaudu. Å eit trace.py Izdrukā kodola izsekoÅ”anu (-K opcija) un izveidotā faila nosaukumu sysfs_create_files(). Viena priekÅ”raksta ievietoÅ”ana ir C kods, kas ietver viegli atpazÄ«stamu formāta virkni, ko nodroÅ”ina Python skripts, kas palaiž LLVM tieÅ”i laikā kompilators. Tas apkopo Å”o rindiņu un izpilda to virtuālajā maŔīnā kodola iekÅ”pusē. Pilnas funkcijas paraksts sysfs_create_files () ir jāatveido otrajā komandā, lai formāta virkne varētu atsaukties uz kādu no parametriem. Kļūdas Å”ajā C koda daļā rada atpazÄ«stamas kļūdas no C kompilatora. Piemēram, ja parametrs -l ir izlaists, jÅ«s redzēsit "Neizdevās apkopot BPF tekstu". Izstrādātāji, kuri pārzina C un Python, atradÄ«s rÄ«kus bcc viegli paplaÅ”ināt un mainÄ«t.

Kad USB diskdzinis ir ievietots, kodola aizmugures izsekoÅ”ana parādÄ«s, ka PID 7711 ir pavediens kworkerkas izveidoja failu Ā«eventsĀ» Š² sysfs. AttiecÄ«gi zvans no sysfs_remove_files() parādÄ«s, ka diska noņemÅ”anas rezultātā fails tika izdzēsts events, kas atbilst vispārējam atsauces skaitÄ«Å”anas jēdzienam. Tajā paŔā laikā skatÄ«Å”anās sysfs_create_link () ar eBPF, ievietojot USB disku, parādÄ«s, ka ir izveidotas vismaz 48 simboliskas saites.

Tātad, kāda jēga ir notikumu failam? LietoÅ”ana cscope MeklÄ“Å”anai __device_add_disk(), parāda, ko tas izraisa disk_add_events (), un vai nu "media_change"Vai "eject_request" var ierakstÄ«t notikumu failā. Å eit kodola bloka slānis informē lietotāja telpu, ka ir parādÄ«jies un izstumts "disks". Ņemiet vērā, cik informatÄ«va ir Ŕī izpētes metode, ievietojot USB disku, salÄ«dzinot ar mēģinājumu noskaidrot, kā lietas darbojas tikai no avota.

Tikai lasāmas saknes failu sistēmas nodroÅ”ina iegultās ierÄ«ces

Protams, neviens neizslēdz serveri vai datoru, izraujot kontaktdakÅ”u no rozetes. Bet kāpēc? Tas ir tāpēc, ka uzstādÄ«tajās failu sistēmās fiziskajās atmiņas ierÄ«cēs ierakstÄ«Å”ana var bÅ«t aizkavējusies, un datu struktÅ«ras, kas reÄ£istrē to stāvokli, var nebÅ«t sinhronizētas ar ierakstiem atmiņā. Kad tas notiek, sistēmas Ä«paÅ”niekiem ir jāgaida lÄ«dz nākamajai sāknÄ“Å”anai, lai palaistu utilÄ«tu. fsck filesystem-recovery un sliktākajā gadÄ«jumā datu zaudÄ“Å”ana.

Tomēr mēs visi zinām, ka daudzas IoT ierÄ«ces, kā arÄ« marÅ”rutētāji, termostati un automaŔīnas tagad darbojas ar Linux. Daudzām no Ŕīm ierÄ«cēm ir maz vai nav lietotāja interfeisa, un nav iespējas tās izslēgt "tÄ«ri". Iedomājieties, ka iedarbiniet automaŔīnu ar izlādējuÅ”os akumulatoru, kad vadÄ«bas blokam ir pieslēgta jauda Linux nepārtraukti lecot uz augÅ”u un uz leju. Kā tas nākas, ka sistēma sāk darboties bez ilga fsckkad beidzot motors sāk darboties? Un atbilde ir vienkārÅ”a. Iegultās ierÄ«ces balstās uz saknes failu sistēmu tikai lasÄ«Å”anai (saÄ«sināts ro-rootfs (tikai lasāma saknes failu sistēma)).

ro-rootfs piedāvā daudzas priekÅ”rocÄ«bas, kas ir mazāk acÄ«mredzamas nekā autentiskums. Viena priekÅ”rocÄ«ba ir tā, ka ļaunprātÄ«ga programmatÅ«ra nevar rakstÄ«t uz /usr vai /lib, ja tur nevar ierakstÄ«t neviens Linux process. Vēl viens ir tas, ka lielā mērā nemainÄ«ga failu sistēma ir bÅ«tiska attālo ierīču atbalstam uz vietas, jo atbalsta personāls paļaujas uz vietējām sistēmām, kas ir nomināli identiskas lauka sistēmām. Iespējams, vissvarÄ«gākais (bet arÄ« mānÄ«gākais) ieguvums ir tas, ka ro-rootfs liek izstrādātājiem izlemt, kuri sistēmas objekti bÅ«s nemainÄ«gi sistēmas projektÄ“Å”anas stadijā. Darbs ar ro-rootf var bÅ«t neērts un sāpÄ«gs, jo const mainÄ«gie bieži ir programmÄ“Å”anas valodās, taču to priekÅ”rocÄ«bas viegli attaisno papildu izmaksas.

radÄ«Å”ana rootfs Tikai lasÄ«Å”anas režīmā iegultiem izstrādātājiem ir jāpieliek papildu pÅ«les, un Å”eit parādās VFS. Linux pieprasa, lai faili bÅ«tu iekŔā /var bija rakstāmas, un turklāt daudzas populāras lietojumprogrammas, kurās darbojas iegultās sistēmas, mēģinās izveidot konfigurāciju dot-files Š² $HOME. Viens no risinājumiem konfigurācijas failiem mājas direktorijā parasti ir to iepriekŔēja Ä£enerÄ“Å”ana un ievietoÅ”ana rootfs. Par /var Viena no iespējām ir uzstādÄ«t to atseviŔķā rakstāmā nodalÄ«jumā, kamēr / uzstādÄ«ts tikai lasāms. Vēl viena populāra alternatÄ«va ir iesieÅ”anas vai pārklājuma stiprinājumu izmantoÅ”ana.

Savienojami un sakraujami stiprinājumi, to izmantoŔana konteineros

Komandas izpilde man mount ir labākais veids, kā uzzināt par saistoÅ”iem un pārklājamiem stiprinājumiem, kas izstrādātājiem un sistēmas administratoriem sniedz iespēju izveidot failu sistēmu vienā ceļā un pēc tam pakļaut to lietojumprogrammām citā. Iegultajām sistēmām tas nozÄ«mē iespēju saglabāt failus /var tikai lasāmā zibatmiņas diskā, bet pārklājums vai savienojams montāžas ceļŔ no tmpfs Š² /var ielādējot, tas ļaus aplikācijām tur rakstÄ«t piezÄ«mes (scrawl). Nākamajā reizē, kad ieslēgsit izmaiņas uz /var tiks zaudēts. Pārklājuma stiprinājums rada savienÄ«bu starp tmpfs un pamatā esoÅ”o failu sistēmu un ļauj veikt Ŕķietamas izmaiņas esoÅ”ajos failos ro-tootf tā kā iesieÅ”anas stiprinājums var padarÄ«t jaunus tukÅ”us tmpfs mapes, kas redzamas kā ierakstāmas ro-rootfs veidus. Kamēr overlayfs Å”is ir Ä«stais (proper) failu sistēmas tips, ir ieviests saistoÅ”s stiprinājums VFS nosaukumvieta.

Pamatojoties uz pārklājuma un savienojamā stiprinājuma aprakstu, neviens par to nav pārsteigts Linux konteineri tie tiek aktīvi izmantoti. Apskatīsim, kas notiek, kad mēs izmantojam systemd-nspawn lai palaistu konteineru, izmantojot rīku mountsnoop no bcc.

Zvans system-nspawn palaiž konteineru darbības laikā mountsnoop.py.

Apskatīsim, kas notika:

Š—Š°ŠæусŠŗ mountsnoop kamēr konteiners tiek "sāknēts", parāda, ka konteinera izpildlaiks ir ļoti atkarÄ«gs no savienotā stiprinājuma (tiek rādÄ«ts tikai garās izvades sākums).

Å eit systemd-nspawn nodroÅ”ina atlasÄ«tos failus procfs Šø sysfs resursdatora uz konteineru kā ceļus uz to rootfs. Izņemot MS_BIND karodziņu, kas iestata saistoÅ”o stiprinājumu, daži citi stiprinājuma karodziņi definē attiecÄ«bas starp izmaiņām resursdatora un konteinera nosaukumvietās. Piemēram, saistÄ«tais stiprinājums var izlaist izmaiņas uz /proc Šø /sys konteinerā vai paslēpiet tos atkarÄ«bā no izsaukuma.

Secinājums

Linux iekŔējās darbÄ«bas izpratne var Ŕķist neiespējams uzdevums, jo pats kodols satur milzÄ«gu daudzumu koda, atstājot malā Linux lietotāja telpas lietojumprogrammas un sistēmas zvanu saskarnes C bibliotēkās, piemēram, glibc. Viens no veidiem, kā panākt progresu, ir lasÄ«t vienas kodola apakÅ”sistēmas avota kodu, liekot uzsvaru uz sistēmas izsaukumu un lietotāja telpas galveņu izpratni, kā arÄ« uz galvenajām iekŔējām kodola saskarnēm, piemēram, tabulu. file_operations. Failu darbÄ«bas nodroÅ”ina principu "viss ir fails", padarot to pārvaldÄ«bu Ä«paÅ”i patÄ«kamu. C kodola avota faili augstākā lÄ«meņa direktorijā fs/ piedāvā virtuālo failu sistēmu ievieÅ”anu, kas ir iesaiņojuma slānis, kas nodroÅ”ina plaÅ”u un salÄ«dzinoÅ”i vienkārÅ”u saderÄ«bu starp populārām failu sistēmām un atmiņas ierÄ«cēm. SaistÄ«Å”ana un pārklājuma montāža, izmantojot Linux nosaukumvietas, ir VFS burvÄ«ba, kas ļauj izveidot tikai lasāmus konteinerus un saknes failu sistēmas. Apvienojumā ar pirmkoda, eBPF pamata rÄ«ka un tā saskarnes pārbaudi bcc
padarot galveno izpēti vieglāku nekā jebkad agrāk.

Draugi, rakstiet, vai Å”is raksts jums bija noderÄ«gs? VarbÅ«t jums ir kādi komentāri vai piezÄ«mes? Un tie, kurus interesē Linux administratora kurss, tiek aicināti uz Atvērto durvju diena, kas notiks 18. aprÄ«lÄ«.

Pirmā daļa.

Avots: www.habr.com

Pievieno komentāru