Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 2

Hello lil kulħadd, qed naqsmu miegħek it-tieni parti tal-pubblikazzjoni "Sistemi ta' fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu?" Tista' taqra l-ewwel parti hawn. Ejjew infakkru li din is-sensiela ta’ pubblikazzjonijiet hija f’waqtha biex tikkoinċidi mat-tnedija ta’ fluss ġdid fuq il-kors "Amministratur tal-Linux", li jibda malajr ħafna.

Kif timmonitorja l-VFS billi tuża għodod eBPF u bcc

L-eħfef mod biex tifhem kif il-qalba topera fuq il-fajls sysfs huwa li taraha fil-prattika, u l-eħfef mod biex tara ARM64 huwa li tuża eBPF. eBPF (qosor għal Berkeley Packet Filter) jikkonsisti minn magna virtwali li taħdem qalba, liema utenti privileġġjati jistgħu jitolbu (query) mil-linja tal-kmand. Is-sorsi tal-qalba jgħidu lill-qarrej x'jista' jagħmel il-qalba; it-tħaddim tal-għodod tal-eBPF fuq sistema mgħobbija juri x'qed jagħmel il-qalba fil-fatt.

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 2

Fortunatament, li tibda tuża eBPF hija pjuttost faċli bl-għajnuna ta 'għodod Bcc, li huma disponibbli bħala pakketti mid-distribuzzjoni ġenerali Linux u dokumentati fid-dettall Bernard Gregg. Għodda bcc huma skripts Python b'inserzjonijiet żgħar ta 'kodiċi C, li jfisser li kull min huwa familjari maż-żewġ lingwi jista' faċilment jimmodifikahom. IN bcc/tools Hemm 80 skripts Python, li jfisser li x'aktarx żviluppatur jew amministratur tas-sistema se jkun jista 'jagħżel xi ħaġa adattata biex issolvi l-problema.
Biex tikseb mill-inqas idea superfiċjali ta 'x'xogħol jagħmlu l-VFSs fuq sistema li taħdem, ipprova vfscount jew vfsstat. Dan se juri, ejja ngħidu, li għexieren ta 'sejħiet vfs_open() u "ħbieb tiegħu" jiġri litteralment kull sekonda.

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 2

vfsstat.py huwa skript Python b'inserzjonijiet tal-kodiċi C li sempliċement jgħodd is-sejħiet tal-funzjoni VFS.

Ejja nagħtu eżempju aktar trivjali u naraw x'jiġri meta ndaħħlu USB flash drive f'kompjuter u s-sistema tiskopriha.

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 2

Bl-użu tal-eBPF tista’ tara x’qed jiġri fih /sysmeta tiddaħħal USB flash drive. Eżempju sempliċi u kumpless jidher hawn.

Fl-eżempju muri hawn fuq, bcc għodda traċċa.py jistampa messaġġ meta l-kmand jitmexxa sysfs_create_files(). Aħna naraw li sysfs_create_files() tnieda bl-użu kworker nixxiegħa bi tweġiba għall-fatt li l-flash drive kien imdaħħal, imma liema fajl inħoloq? It-tieni eżempju juri l-qawwa tal-eBPF. Hawn trace.py Tipprintja backtrace tal-qalba (għażla -K) u l-isem tal-fajl li nħoloq sysfs_create_files(). L-inserzjoni ta' stqarrija waħda hija kodiċi C li tinkludi sekwenza ta' format li tingħaraf faċilment ipprovduta mill-iskript Python li jmexxi LLVM kompilatur eżatt fil-ħin. Jiġbor din il-linja u jesegwixxiha f'magna virtwali ġewwa l-qalba. Firma tal-funzjoni sħiħa sysfs_create_files () trid tiġi riprodotta fit-tieni kmand sabiex is-sekwenza tal-format tkun tista' tirreferi għal wieħed mill-parametri. Żbalji f'din il-biċċa tal-kodiċi C jirriżultaw fi żbalji rikonoxxibbli mill-kompilatur C. Per eżempju, jekk il-parametru -l jitħalla barra, se tara "Falliet li tikkumpila test BPF." Iżviluppaturi li huma familjari ma 'C u Python se jsibu l-għodod bcc faċli biex tespandi u tinbidel.

Meta l-USB drive tiddaħħal, il-backtrace tal-qalba se turi li PID 7711 huwa ħajt kworkerli ħoloq il-fajl «events» в sysfs. Għaldaqstant, is-sejħa minn sysfs_remove_files() se juri li t-tneħħija tad-drajv irriżulta li l-fajl jitħassar events, li jikkorrispondi għall-kunċett ġenerali ta' għadd ta' referenza. Fl-istess ħin, wiri sysfs_create_link () bl-eBPF waqt li ddaħħal il-USB drive se turi li mill-inqas 48 link simboliku inħolqu.

Allura x'inhu l-punt tal-fajl tal-avvenimenti? Użu cscope Għat-tfittxija __device_add_disk(), juri x'jikkawża disk_add_events (), u jew "media_change"Jew "eject_request" jistgħu jiġu rreġistrati f'fajl tal-avveniment. Hawnhekk is-saff tal-blokk tal-kernel jinforma lill-ispazju tal-utent li "disk" deher u ħarġet. Innota kemm dan il-metodu ta 'riċerka huwa informattiv billi ddaħħal USB drive, meta mqabbel ma' tipprova ssib kif l-affarijiet jaħdmu purament mis-sors.

Sistemi ta' fajls ta' għerq li jinqraw biss jippermettu apparati inkorporati

Naturalment, ħadd ma jitfi s-server jew il-kompjuter tiegħu billi jiġbed il-plagg mis-sokit. Imma għala? Dan huwa minħabba li s-sistemi tal-fajls immuntati fuq apparati tal-ħażna fiżika jista 'jkollhom kitba lagged, u l-istrutturi tad-dejta li jirreġistraw l-istat tagħhom jistgħu ma jkunux sinkronizzati mal-kitba fil-ħażna. Meta jiġri dan, is-sidien tas-sistema jridu jistennew sal-boot li jmiss biex iniedu l-utilità. fsck filesystem-recovery u, fl-agħar każ, titlef id-data.

Madankollu, ilkoll nafu li ħafna apparati IoT, kif ukoll routers, termostati u karozzi, issa jaħdmu Linux. Ħafna minn dawn l-apparati għandhom ftit jew xejn user interface, u m'hemm l-ebda mod kif itfihom "b'mod nadif." Immaġina li tibda karozza b'batterija mejta meta l-enerġija għall-unità ta 'kontroll tkun Linux kontinwament jaqbeż 'l fuq u' l isfel. Kif huwa li s-sistema boots mingħajr twil fsckmeta l-magna finalment tibda taħdem? U t-tweġiba hija sempliċi. L-apparati inkorporati jiddependu fuq is-sistema tal-fajl tal-għeruq għall-qari biss (imqassar ro-rootfs (fileystem għerq li jinqara biss)).

ro-rootfs joffru ħafna benefiċċji li huma inqas ovvji mill-awtentiċità. Vantaġġ wieħed huwa li l-malware ma jistax jikteb /usr jew /lib, jekk l-ebda proċess Linux ma jista 'jikteb hemmhekk. Ieħor huwa li sistema ta' fajls fil-biċċa l-kbira immutabbli hija kritika għall-appoġġ fuq il-post ta' apparati remoti, peress li l-persunal ta 'appoġġ jiddependi fuq sistemi lokali li huma nominalment identiċi għas-sistemi fuq il-post. Forsi l-aktar benefiċċju importanti (iżda wkoll l-aktar insidjuż) huwa li ro-rootfs iġiegħel lill-iżviluppaturi jiddeċiedu liema oġġetti tas-sistema se jkunu immutabbli fl-istadju tad-disinn tas-sistema. Il-ħidma ma 'ro-rootfs tista' tkun skomda u ta 'uġigħ, peress li l-varjabbli const spiss ikunu f'lingwi ta' programmar, iżda l-benefiċċji tagħhom faċilment jiġġustifikaw l-overhead addizzjonali.

ħolqien rootfs Il-qari biss jeħtieġ xi sforz żejjed għall-iżviluppaturi inkorporati, u dan huwa fejn jidħol l-istampa VFS. Linux jeħtieġ li l-fajls ikunu ġewwa /var kienu writable, u barra minn hekk, ħafna applikazzjonijiet popolari li jmexxu sistemi inkorporati se jippruvaw joħolqu konfigurazzjoni dot-files в $HOME. Soluzzjoni waħda għall-fajls tal-konfigurazzjoni fid-direttorju tad-dar hija ġeneralment li jiġu ġġenerati minn qabel u jinbnewhom rootfs. Biex /var Approċċ wieħed possibbli huwa li jintramaw fuq partizzjoni separata li tista 'tinkiteb, filwaqt li / immuntat għall-qari biss. Alternattiva popolari oħra hija l-użu ta 'bind jew overlay mounts.

Muntaturi linkable u stackable, l-użu tagħhom minn kontenituri

Eżekuzzjoni ta 'kmand man mount huwa l-aħjar mod biex titgħallem dwar muntaturi li jistgħu jintrabtu u li jistgħu jiġu sovrapposti, li jagħtu lill-iżviluppaturi u lill-amministraturi tas-sistema l-abbiltà li joħolqu sistema ta 'fajls f'passaġġ wieħed u mbagħad jesponuha għal applikazzjonijiet f'oħra. Għal sistemi inkorporati, dan ifisser il-kapaċità li jinħażnu fajls fihom /var fuq flash drive li jinqara biss, iżda overlay jew mogħdija tal-muntaġġ linkable minn tmpfs в /var waqt it-tagħbija, se tippermetti applikazzjonijiet biex jiktbu noti hemmhekk (scrawl). Il-ħin li jmiss li tixgħel il-bidliet għal /var se jintilef. Mount overlay joħloq unjoni bejn tmpfs u s-sistema tal-fajl sottostanti u tippermettilek tagħmel bidliet apparenti fil-fajls eżistenti fil ro-tootf billi muntatura li tista' torbot tista' tagħmel oħrajn ġodda vojta tmpfs folders viżibbli bħala writable fi ro-rootfs modi. Filwaqt li overlayfs din hija t-tajba (proper) tip ta' sistema ta' fajls, muntatura li tista' torbot hija implimentata fi Spazju tal-isem VFS.

Ibbażat fuq id-deskrizzjoni tal-overlay u l-muntatura linkable, ħadd ma huwa sorpriż li Kontenituri tal-Linux huma użati b'mod attiv. Ejja naraw x'jiġri meta nużaw systemd-nspawn biex tmexxi l-kontenitur billi tuża l-għodda mountsnoop minn bcc.

Sejħa system-nspawn jibda l-kontenitur waqt li jkun qed jaħdem mountsnoop.py.

Ejja naraw x'ġara:

Tnedija mountsnoop filwaqt li l-kontenitur huwa "booting" juri li l-runtime tal-kontenitur huwa dipendenti ħafna fuq il-muntatura li tkun konnessa (Huwa biss il-bidu tal-output twil).

Hawnhekk systemd-nspawn jipprovdi fajls magħżula fi procfs и sysfs ospitanti għal kontenitur bħala mogħdijiet għalih rootfs... Barra minn hekk MS_BIND bandiera li tistabbilixxi l-muntatura vinkolanti, xi bnadar oħra fuq il-muntatura jiddefinixxu r-relazzjoni bejn il-bidliet fl-ispazji tal-isem tal-host u tal-kontenitur. Pereżempju, muntatura konnessa tista' jew taqbeż il-bidliet /proc и /sys fil-kontenitur, jew jaħbihom skont is-sejħa.

Konklużjoni

Il-fehim tal-ħidma interna tal-Linux jista 'jidher biċċa xogħol impossibbli, peress li l-kernel innifsu fih ammont kbir ta' kodiċi, u jħalli fil-ġenb l-applikazzjonijiet tal-ispazju tal-utent tal-Linux u l-interfaces tas-sejħa tas-sistema f'libreriji C bħal glibc. Mod wieħed biex isir progress huwa li taqra l-kodiċi tas-sors ta 'subsistema tad-kernel waħda, b'enfasi fuq il-fehim tas-sejħiet tas-sistema u l-intestaturi tal-ispazju tal-utent, kif ukoll l-interfaces ewlenin tal-kernel interni, bħal tabella file_operations. L-operazzjonijiet tal-fajl jipprovdu l-prinċipju ta '"kollox huwa fajl", li jagħmluhom partikolarment pjaċevoli biex jiġu mmaniġġjati. Fajls tas-sors tal-kernel C fid-direttorju tal-ogħla livell fs/ tippreżenta implimentazzjoni ta 'sistemi ta' fajls virtwali, li huma saff ta 'tgeżwir li jipprovdi kompatibilità wiesgħa u relattivament sempliċi bejn sistemi ta' fajls popolari u tagħmir ta 'ħażna. Il-konnessjoni u l-immuntar ta 'overlay permezz ta' spazji tal-isem Linux hija l-maġija ta 'VFS li tagħmilha possibbli li jinħolqu kontenituri li jinqraw biss u sistemi ta' fajls tal-għeruq. Flimkien ma 'eżami tal-kodiċi tas-sors, l-għodda ewlenija tal-eBPF u l-interface tagħha bcc
tagħmel l-esplorazzjoni tal-qalba aktar faċli minn qatt qabel.

Ħbieb, ikteb, dan l-artiklu kien utli għalik? Forsi għandek xi kummenti jew rimarki? U dawk li huma interessati fil-kors tal-Amministratur tal-Linux huma mistiedna Open Day, li se ssir fit-18 ta’ April.

L-ewwel parti.

Sors: www.habr.com

Żid kumment