Amasistimu wefayela abonakalayo ku-Linux: kungani edingeka futhi asebenza kanjani? Ingxenye 2

Sanibonani nonke, sabelana nani ngengxenye yesibili yokushicilela “Amasistimu wamafayela abonakalayo ku-Linux: kungani edingeka futhi asebenza kanjani?” Ungafunda ingxenye yokuqala lapha. Asikukhumbuze ukuthi lolu chungechunge lokushicilelwe lubekwe isikhathi ukuze luhambisane nokwethulwa kokusakaza okusha esifundweni. "I-Linux Administrator", eqala maduze nje.

Uyiqapha kanjani i-VFS usebenzisa amathuluzi e-eBPF nawe-bcc

Indlela elula yokuqonda ukuthi i-kernel isebenza kanjani kumafayela sysfs ukuyibona isebenza, futhi indlela elula yokubuka i-ARM64 ukusebenzisa i-eBPF. I-eBPF (ifushane nge-Berkeley Packet Filter) iqukethe umshini obonakalayo osebenza ngaphakathi umnyombo, abasebenzisi abanenhlanhla abangacela (query) kusukela kulayini womyalo. Imithombo ye-kernel itshela umfundi ukuthi i-kernel ingenzani; ukusebenzisa amathuluzi e-eBPF ohlelweni olulayishiwe kukhombisa ukuthi i-kernel yenzani ngempela.

Amasistimu wefayela abonakalayo ku-Linux: kungani edingeka futhi asebenza kanjani? Ingxenye 2

Ngenhlanhla, ukuqalisa ukusebenzisa i-eBPF kulula kakhulu ngosizo lwamathuluzi bcc, atholakala njengamaphakheji asuka ekusabalaliseni okuvamile Linux futhi ibhalwe ngokuningiliziwe Bernard Gregg. Amathuluzi bcc yimibhalo yePython enokufakwa okuncane kwekhodi C, okusho ukuthi noma ngubani owazi zombili izilimi angakwazi ukuziguqula kalula. IN bcc/tools Kunemibhalo engu-80 yePython, okusho ukuthi cishe unjiniyela noma umlawuli wesistimu uzokwazi ukukhetha okuthile okufanele ukuxazulula inkinga.
Ukuze uthole okungenani umbono okha phezulu wokuthi umsebenzi we-VFS wenzani ohlelweni olusebenzayo, zama vfscount noma vfsstat. Lokhu kuzobonisa, ake sithi, inqwaba yezingcingo vfs_open() futhi “abangane bakhe” zenzeka ngokoqobo njalo ngomzuzwana.

Amasistimu wefayela abonakalayo ku-Linux: kungani edingeka futhi asebenza kanjani? Ingxenye 2

vfsstat.py iskripthi sePython esinokufakwa kwekhodi ye-C esibala izingcingo zomsebenzi we-VFS.

Ake sinikeze isibonelo esingasho lutho futhi sibone ukuthi kwenzekani uma sifaka i-USB flash drive kukhompuyutha bese isistimu iyibona.

Amasistimu wefayela abonakalayo ku-Linux: kungani edingeka futhi asebenza kanjani? Ingxenye 2

Usebenzisa i-eBPF ungabona ukuthi kwenzekani kuyo /sysuma i-USB flash drive ifakiwe. Isibonelo esilula nesiyinkimbinkimbi siboniswa lapha.

Esibonelweni esiboniswe ngenhla, bcc ithuluzi trace.py iphrinta umlayezo uma umyalo usetshenziswa sysfs_create_files(). Siyakubona lokho sysfs_create_files() yethulwa kusetshenziswa kworker ukusakaza ngokuphendula iqiniso lokuthi i-flash drive ifakiwe, kodwa yiliphi ifayela elakhiwe? Isibonelo sesibili sibonisa amandla e-eBPF. Lapha trace.py Iphrinta i-kernel backtrace (-K inketho) kanye negama lefayela elidaliwe sysfs_create_files(). Ukufakwa kwesitatimende esisodwa ikhodi C ehlanganisa iyunithi yezinhlamvu yefomethi ebonakala kalula enikezwa umbhalo wePython osebenzisa i-LLVM nje-in-time compiler. Ihlanganisa lo mugqa futhi iwusebenzise emshinini obonakalayo ngaphakathi kwe-kernel. Isiginesha yomsebenzi ogcwele sysfs_create_files () kufanele ikhiqizwe kabusha kumyalo wesibili ukuze iyunithi yezinhlamvu yefomethi ibhekisele kwenye yemingcele. Amaphutha kulesi siqeshana sekhodi C aphumela emaphutheni abonakalayo avela kumdidiyeli C. Isibonelo, uma ipharamitha ye -l ikhishiwe, uzobona "Yehlulekile ukuhlanganisa umbhalo we-BPF." Onjiniyela abajwayele i-C nePython bazothola amathuluzi bcc kulula ukwandisa nokushintsha.

Lapho idrayivu ye-USB ifakiwe, i-kernel backtrace izobonisa ukuthi i-PID 7711 iwuchungechunge. kworkerokudale ifayela «events» в sysfs. Ngokuvumelana nalokho, ucingo oluvela sysfs_remove_files() izobonisa ukuthi ukukhipha idrayivu kubangele ukuthi ifayela lisuswe events, ehambisana nomqondo ojwayelekile wokubala kwereferensi. Ngesikhathi esifanayo, ukubuka sysfs_create_link () nge-eBPF ngenkathi ifaka idrayivu ye-USB izobonisa ukuthi okungenani izixhumanisi ezingokomfanekiso ezingu-48 zidaliwe.

Ngakho-ke liyini iphuzu lefayela lemicimbi? Ukusetshenziswa cscope Okokusesha __idivayisi_engeza_idiski(), ikhombisa ukuthi ibangelani disk_add_events (), futhi noma "media_change", noma "eject_request" ingaqoshwa efayeleni lomcimbi. Lapha isendlalelo se-kernel block sazisa indawo yomsebenzisi ukuthi "idiski" ivele futhi yakhishwa. Qaphela ukuthi ifundisa kangakanani le ndlela yocwaningo ngokufaka idrayivu ye-USB, uma kuqhathaniswa nokuzama ukuthola ukuthi izinto zisebenza kanjani kusuka kumthombo.

Amasistimu wefayela eliyizimpande ezifundwayo kuphela anika amandla amadivayisi ashumekiwe

Kunjalo, akekho ovala iseva noma ikhompuyutha yakhe ngokudonsa ipulaki kusokhethi. Kodwa kungani? Lokhu kungenxa yokuthi amasistimu wefayela anyusiwe kumadivayisi esitoreji aphathekayo angase abe nokubhala okunesikhathi eside, futhi izakhiwo zedatha ezirekhoda isimo sazo zingase zingavumelaniswa nokubhalela kusitoreji. Uma lokhu kwenzeka, abanikazi besistimu kufanele balinde kuze kube ibhuthi elandelayo ukuze baqalise insiza. fsck filesystem-recovery futhi, esimweni esibi kakhulu, ukulahlekelwa idatha.

Kodwa-ke, sonke siyazi ukuthi amadivayisi amaningi e-IoT, kanye namarutha, ama-thermostats nezimoto, manje asebenzisa i-Linux. Eziningi zalezi zisetshenziswa zine-interface yomsebenzisi encane, futhi ayikho indlela yokuyivala "ngokuhlanzekile." Cabanga ukuqala imoto ngebhethri efile lapho amandla eyunithi yokulawula ekhona Linux elokhu egxuma phansi naphezulu. Kwenzeka kanjani ukuthi amabhuzu esistimu ngaphandle kwesikhathi eside fsckekugcineni injini iqala ukusebenza nini? Futhi impendulo ilula. Amadivayisi ashumekiwe ancike ohlelweni lwefayela eliyimpande ukufunda kuphela (fingqiwe ro-rootfs (isistimu yefayela lempande yokufunda kuphela)).

ro-rootfs nikeza izinzuzo eziningi ezingacacile kunobuqiniso. Enye inzuzo ukuthi uhlelo olungayilungele ikhompuyutha alukwazi ukubhalela /usr noma /lib, uma ingekho inqubo ye-Linux engabhala lapho. Okunye ukuthi uhlelo lwefayela olungaguquki kakhulu lubalulekile ekusekelweni kwenkundla yamadivayisi akude, njengoba abasebenzi abasekelayo bethembele kumasistimu asendaweni afana nezinhlelo zenkundla. Mhlawumbe inzuzo ebaluleke kakhulu (kodwa futhi ecashile) ukuthi i-ro-rootfs iphoqa abathuthukisi ukuthi banqume ukuthi yiziphi izinto zesistimu ezingeke zishintshe esigabeni sokuklama sohlelo. Ukusebenza nama-ro-rootfs kungase kube nzima futhi kube buhlungu, njengoba okuguquguqukayo kwe-const kuvame ukuba ngezilimi zokuhlela, kodwa izinzuzo zabo zithethelela kalula i-overhead eyengeziwe.

indalo rootfs Ukufunda kuphela kudinga umzamo owengeziwe kubathuthukisi abashumekiwe, futhi kulapho i-VFS ingena khona esithombeni. I-Linux idinga ukuthi amafayela angene /var bezibhaleka, futhi ngaphezu kwalokho, izinhlelo zokusebenza eziningi ezidumile ezisebenzisa amasistimu ashumekiwe zizozama ukudala ukumisa dot-files в $HOME. Isixazululo esisodwa samafayela okumisa kumkhombandlela wasekhaya ngokuvamile ukukhiqiza kusengaphambili nokuwakha kuwo rootfs. Ngoba /var Enye indlela engenzeka ukuyibeka endaweni ehlukile ebhalwayo, ngenkathi / kufakwe ukufunda kuphela. Enye indlela ethandwayo ukusebenzisa izikhwebu zokubopha noma zokumbondela.

Izikhwebu ezixhumekayo nezinamathelayo, ukusetshenziswa kwazo ngeziqukathi

Ukwenziwa komyalo man mount iyindlela engcono kakhulu yokufunda mayelana nezikhwezi ezibophelekayo nezinganqwabelana, ezinikeza abathuthukisi nabaphathi besistimu ikhono lokudala isistimu yefayela ngendlela eyodwa bese beyiveza ezinhlelweni zokusebenza kwenye. Kuzinhlelo ezishumekiwe, lokhu kusho amandla okugcina amafayela kuwo /var ku-flash drive efundwayo kuphela, kodwa imbondela noma indlela yokukhweza exhumekayo esuka tmpfs в /var uma ilayisha, izovumela izinhlelo zokusebenza ukuthi zibhale amanothi lapho (scrawl). Ngokuzayo uma uvula izinguquko ku /var izolahleka. Ukukhweza imbondela kudala inyunyana phakathi tmpfs kanye nesistimu yefayela engaphansi futhi ikuvumela ukuthi wenze izinguquko ezibonakalayo kumafayela akhona ro-tootf kuyilapho ukukhweza okubophezelayo kungenza okusha kungabi nalutho tmpfs amafolda abonakala njengabhalwe kuwo ro-rootfs izindlela. Ngenkathi overlayfs lokhu kulungile (proper) uhlobo lwesistimu yefayela, okokukhweza okubophekayo kufakwa ngaphakathi Isikhala segama se-VFS.

Ngokusekelwe encazelweni yembondela nokukhweza okuxhumekayo, akekho okumangazayo lokho Iziqukathi ze-Linux zisetshenziswa ngenkuthalo. Ake sibone ukuthi kwenzekani uma sisebenzisa i-systemd-spawn ukusebenzisa isitsha usebenzisa ithuluzi mountsnoop kusukela bcc.

Shayela system-nspawn iqala isiqukathi ngenkathi isebenza mountsnoop.py.

Ake sibone ukuthi kwenzekeni:

Qalisa mountsnoop kuyilapho isiqukathi "siqalisa" sibonisa ukuthi isikhathi sokusebenza sesiqukathi sincike kakhulu ekukhwezeni okuxhunywayo (Kuboniswa isiqalo kuphela sokukhipha okude).

kuyinto systemd-nspawn inikeza amafayela akhethiwe ku procfs и sysfs phatha esitsheni njengezindlela eziya kuso rootfs... ngaphandle MS_BIND ifulegi elimisa ukukhweza okubophezelayo, amanye amafulegi ekukhuphukeni achaza ubudlelwano phakathi kwezinguquko kumsingathi kanye nezikhala zamagama zesiqukathi. Isibonelo, ukukhweza okuxhunyiwe kungeqa izinguquko kuye /proc и /sys uzifake esitsheni, noma uzifihle kuye ngocingo.

isiphetho

Ukuqonda ukusebenza kwangaphakathi kweLinux kungabonakala kuwumsebenzi ongenakwenzeka, njengoba i-kernel ngokwayo iqukethe inani elikhulu lekhodi, ishiya eceleni izinhlelo zokusebenza zesikhala somsebenzisi we-Linux kanye nezixhumanisi zezingcingo zesistimu emitatsheni yolwazi ye-C njenge glibc. Enye indlela yokwenza inqubekelaphambili iwukufunda ikhodi yomthombo ye-kernel subsystem eyodwa, ngokugcizelela ekuqondeni izingcingo zesistimu kanye nezihloko zesikhala somsebenzisi, kanye nokuhlangana okuyinhloko kwe-kernel yangaphakathi, njengethebula. file_operations. Imisebenzi yefayela ihlinzeka ngomgomo othi "yonke into iyifayela", okuwenza kujabulise ngokukhethekile ukuwaphatha. Amafayela omthombo we-kernel kuhla lwemibhalo lwezinga eliphezulu fs/ yethula ukuqaliswa kwezinhlelo zamafayela abonakalayo, ayisendlalelo esisongayo esinikeza ukuhambisana okubanzi nokulula phakathi kwezinhlelo zamafayela adumile namadivayisi okulondoloza. Ukuxhumanisa nokubeka imbondela ngezikhala zamagama ze-Linux wumlingo we-VFS owenza ukudala iziqukathi zokufunda kuphela kanye nezinhlelo zefayela eziyizimpande kwenzeke. Kuhlanganiswe nokuhlolwa kwekhodi yomthombo, ithuluzi eliyinhloko le-eBPF nesixhumi esibonakalayo bcc
ukwenza ukuhlola okubalulekile kube lula kunangaphambili.

Bangani, bhalani, ingabe lesi sihloko siwusizo kuwe? Mhlawumbe unokuphawula kwakho noma ukuphawula kwakho? Futhi labo abathanda isifundo se-Linux Administrator bayamenywa Usuku Lokuvula, ezoba ngo-April 18.

Ingxenye yokuqala.

Source: www.habr.com

Engeza amazwana