Siostaman faidhle mas-fhìor ann an Linux: carson a tha feum orra agus ciamar a tha iad ag obair? Pàirt 2

Halo a h-uile duine, tha sinn a’ roinn riut an dàrna pàirt den fhoillseachadh “Virtual file Systems in Linux: carson a tha feum orra agus ciamar a tha iad ag obair?” Faodaidh tu a’ chiad phàirt a leughadh an seo. Cuimhnichidh sinn gu bheil an t-sreath fhoillseachaidhean seo ann an àm aig an aon àm ri cur air bhog sruthan ùr air a’ chùrsa "Rianadair Linux", a thòisicheas gu math luath.

Mar a chumas tu sùil air VFS a’ cleachdadh innealan eBPF agus bcc

An dòigh as fhasa air tuigsinn mar a tha an kernel ag obrachadh air faidhlichean sysfs is e sin fhaicinn ann an cleachdadh, agus is e an dòigh as fhasa air ARM64 fhaicinn eBPF a chleachdadh. Tha eBPF (goirid airson Berkeley Packet Filter) air a dhèanamh suas de inneal brìgheil a ’ruith a-steach cridhe, a dh'fhaodas luchd-cleachdaidh sochair iarraidh (query) bhon loidhne-àithne. Tha na stòran kernel ag innse don leughadair dè as urrainn don kernel a dhèanamh; tha ruith na h-innealan eBPF air siostam luchdaichte a’ sealltainn na tha an kernel a’ dèanamh.

Siostaman faidhle mas-fhìor ann an Linux: carson a tha feum orra agus ciamar a tha iad ag obair? Pàirt 2

Gu fortanach, tha e gu math furasta tòiseachadh a’ cleachdadh eBPF le cuideachadh bho innealan Dld, a tha rim faighinn mar phasgan bhon sgaoileadh coitcheann Linux agus air a chlàradh gu mionaideach Bernard Gregg. Innealan bcc nan sgriobtaichean Python le cuir a-steach beaga de chòd C, a tha a’ ciallachadh gum faod neach sam bith a tha eòlach air an dà chànan an atharrachadh gu furasta. ANNS bcc/tools Tha 80 sgriobt Python ann, a tha a’ ciallachadh gum bi e comasach do leasaiche no rianadair siostam rudeigin a thaghadh a tha iomchaidh airson fuasgladh fhaighinn air an duilgheadas.
Gus co-dhiù beachd uachdarach fhaighinn air dè an obair a bhios VFSs a’ dèanamh air siostam ruith, feuch vfscount no vfsstat. Seallaidh seo, canaidh sinn, gu bheil dusanan de ghlaodhan vfs_open() agus bidh “a charaidean” a’ tachairt gu litireil a h-uile diog.

Siostaman faidhle mas-fhìor ann an Linux: carson a tha feum orra agus ciamar a tha iad ag obair? Pàirt 2

vfsstat.py na sgriobt Python le cuir a-steach còd C a tha dìreach a’ cunntadh gairmean gnìomh VFS.

Bheir sinn seachad eisimpleir nas lugha agus chì sinn dè thachras nuair a chuireas sinn draibhear USB flash a-steach do choimpiutair agus an siostam ga lorg.

Siostaman faidhle mas-fhìor ann an Linux: carson a tha feum orra agus ciamar a tha iad ag obair? Pàirt 2

Le bhith a’ cleachdadh eBPF chì thu na tha a’ tachairt ann /sysnuair a thèid draibhear USB flash a chuir a-steach. Tha eisimpleir sìmplidh agus iom-fhillte air a shealltainn an seo.

Anns an eisimpleir gu h-àrd, bcc ionnstramaid lorg.py clò-bhuail teachdaireachd nuair a thèid an àithne a ruith sysfs_create_files(). Chì sinn sin sysfs_create_files() air a chuir air bhog a’ cleachdadh kworker sruth mar fhreagairt gun deach an draibhear flash a chuir a-steach, ach dè am faidhle a chaidh a chruthachadh? Tha an dàrna eisimpleir a’ sealltainn cumhachd eBPF. Seo trace.py Clò-bhuail kernel backtrace (-K roghainn) agus ainm an fhaidhle a chaidh a chruthachadh sysfs_create_files(). Is e cuir a-steach aithris singilte còd C a tha a’ toirt a-steach sreang cruth a tha furasta aithneachadh air a thoirt seachad leis an sgriobt Python a tha a’ ruith LLVM neach-cruinneachaidh dìreach ann an ùine. Bidh e a 'cur ri chèile an loidhne seo agus ga chur an gnìomh ann an inneal mas-fhìor taobh a-staigh an kernel. Ainm-sgrìobhte làn-ghnìomh sysfs_create_files () feumar ath-riochdachadh san dàrna àithne gus an urrainn don sreang cruth iomradh a thoirt air aon de na paramadairean. Bidh mearachdan sa phìos seo de chòd C a’ ciallachadh gu bheil mearachdan aithnichte bhon cho-chruinneachadh C. Mar eisimpleir, ma thèid am paramadair -l fhàgail air falbh, chì thu “Dh’ fhàillig teacsa BPF a chuir ri chèile. ” Lorgaidh luchd-leasachaidh a tha eòlach air C agus Python na h-innealan bcc furasta a leudachadh agus atharrachadh.

Nuair a thèid an draibhear USB a chuir a-steach, seallaidh an cùl-raon kernel gur e snàithlean a th’ ann am PID 7711 kworkera chruthaich am faidhle «events» в sysfs. A rèir sin, a 'ghairm bho sysfs_remove_files() seallaidh e gun deach toirt air falbh an draibh gun deach am faidhle a sguabadh às events, a tha a rèir bun-bheachd coitcheann cunntais iomraidh. Aig an aon àm, a 'coimhead sysfs_create_link () le eBPF fhad ‘s a chuireas tu a-steach an draibhear USB a’ sealltainn gun deach co-dhiù 48 ceanglaichean samhlachail a chruthachadh.

Mar sin dè a’ phuing a th’ aig faidhle nan tachartasan? Cleachdadh cscope Airson lorg _inneal_cuir_diosc(), a 'sealltainn dè tha e ag adhbhrachadh disk_add_events (), agus an dàrna cuid "media_change", no "eject_request" faodar a chlàradh ann am faidhle tachartais. An seo tha an còmhdach bloc kernel ag innse don luchd-cleachdaidh gu bheil “diosg” air nochdadh agus air a chuir a-mach. Thoir an aire cho fiosrachail sa tha an dòigh sgrùdaidh seo le bhith a’ cuir a-steach draibhear USB, an taca ri bhith a’ feuchainn ri faighinn a-mach mar a tha cùisean ag obair dìreach bhon stòr.

Tha siostaman faidhle freumha leugh-a-mhàin a’ comasachadh innealan freumhaichte

Gu dearbh, chan eil duine a 'tionndadh an fhrithealaiche no an coimpiutair aca le bhith a' tarraing a 'phlug bhon t-socaid. Ach carson? Tha seo air sgàth 's gum faodadh gu bheil siostaman faidhle air an cur suas air innealan stòraidh corporra air a dhol sìos air sgrìobhadh, agus is dòcha nach bi na structaran dàta a tha a' clàradh an staid aca air an co-shioncronachadh le sgrìobhaidhean chun an stòraidh. Nuair a thachras seo, feumaidh luchd-seilbh an t-siostaim feitheamh gus an ath bhot gus an goireas a chuir air bhog. fsck filesystem-recovery agus, anns a 'chùis as miosa, a' call dàta.

Ach, tha fios againn uile gu bheil mòran innealan IoT, a bharrachd air routers, teirmeastait agus càraichean, a-nis a’ ruith Linux. Tha glè bheag de eadar-aghaidh cleachdaiche aig mòran de na h-innealan sin, agus chan eil dòigh ann an tionndadh "gu glan." Smaoinich air càr a thòiseachadh le bataraidh marbh nuair a tha an cumhachd don aonad smachd Linux daonnan a 'leum suas is sìos. Ciamar a tha an siostam a 'brògan gun a bhith fada fsckcuin a thòisicheas an einnsean mu dheireadh a’ ruith? Agus tha am freagairt sìmplidh. Tha innealan freumhaichte an urra ris an t-siostam faidhle freumh a-mhàin airson leughadh (giorraichte ro-rootfs (siostam faidhle freumh leughaidh a-mhàin)).

ro-rootfs a’ tabhann mòran bhuannachdan nach eil cho follaiseach na dearbhachd. Is e aon bhuannachd nach urrainn do malware sgrìobhadh thuige /usr no /lib, mura h-urrainn do phròiseas Linux sgrìobhadh an sin. Is e fear eile gu bheil siostam faidhle a tha gu ìre mhòr so-ruigsinneach deatamach airson taic làraich do dh’ innealan iomallach, leis gu bheil luchd-taic an urra ri siostaman ionadail a tha co-chosmhail ri siostaman achaidh. Is dòcha gur e am buannachd as cudromaiche (ach cuideachd as brùideil) gu bheil ro-rootfs a’ toirt air luchd-leasachaidh co-dhùnadh dè na stuthan siostam a bhios neo-sheasmhach aig ìre dealbhaidh an t-siostaim. Faodaidh a bhith ag obair le ro-rootfs a bhith neònach agus goirt, leis gu bheil caochladairean const gu tric ann an cànanan prògramaidh, ach tha na buannachdan aca gu furasta a’ fìreanachadh na cosgais a bharrachd.

cruthachadh rootfs Feumaidh leughadh a-mhàin beagan oidhirp a bharrachd airson luchd-leasachaidh freumhaichte, agus seo far a bheil VFS a ’tighinn a-steach don dealbh. Tha Linux ag iarraidh gum bi na faidhlichean a-staigh /var Chaidh an sgrìobhadh, agus a bharrachd air an sin, feuchaidh mòran thagraidhean mòr-chòrdte a bhios a’ ruith siostaman freumhaichte ri rèiteachadh a chruthachadh dot-files в $HOME. Is e aon fhuasgladh airson faidhlichean rèiteachaidh san eòlaire dachaigh mar as trice a bhith gan gineadh agus gan togail a-steach rootfs. airson /var Is e aon dòigh-obrach a dh’ fhaodadh a bhith ga chuir suas air sgaradh sgrìobhte fa leth, fhad ‘s a tha / air a chuir suas ri leughadh a-mhàin. Is e roghainn eile a tha a’ còrdadh ri mòran a bhith a’ cleachdadh còmhdach ceangail no ath-chòmhdach.

Sròin a ghabhas ceangal agus cruachadh, an cleachdadh le soithichean

Cur an gnìomh àithne man mount an dòigh as fheàrr air ionnsachadh mu shreap ceangail agus ath-chòmhdach, a bheir comas do luchd-leasachaidh agus luchd-rianachd shiostaman siostam faidhle a chruthachadh ann an aon shlighe agus an uairsin a nochdadh do thagraidhean ann an slighe eile. Airson siostaman freumhaichte, tha seo a’ ciallachadh comas faidhlichean a stòradh a-steach /var air draibheadh ​​​​flash a tha furasta a leughadh a-mhàin, ach slighe sreap ath-chòmhdach no ceangail bho tmpfs в /var nuair a thèid a luchdachadh, leigidh e le tagraidhean notaichean a sgrìobhadh an sin (sgrìobadh). An ath thuras a chuireas tu na h-atharrachaidhean air /var bhi air chall. Bidh sliabh ath-chòmhdach a’ cruthachadh aonadh eadar tmpfs agus an siostam fhaidhlichean bunaiteach agus leigidh e leat atharraichean os-cionn a dhèanamh air na faidhlichean a tha ann mu thràth ro-tootf ach faodaidh beinn ceangail feadhainn ùra a dhèanamh falamh tmpfs pasganan rim faicinn mar a ghabhas sgrìobhadh a-steach ro-rootfs dòighean. Fhad 's a tha overlayfs is e seo am fear ceart (proper) seòrsa siostam faidhle, tha inneal ceangail air a chuir an gnìomh a-steach Àite-ainm VFS.

Stèidhichte air an tuairisgeul air an ath-chòmhdach agus an t-sliabh a ghabhas ceangal, chan eil e na iongnadh do dhuine sam bith Draibhearan airson linux tha iad air an cleachdadh gu gnìomhach. Chì sinn dè thachras nuair a chleachdas sinn siostamd-nspawn gus an soitheach a ruith a’ cleachdadh an inneil mountsnoop от bcc.

Dùbhlan system-nspawn tòisichidh an soitheach fhad ‘s a tha e a’ ruith mountsnoop.py.

Chì sinn dè thachair:

Запуск mountsnoop fhad ‘s a tha an soitheach“ booting ”a’ sealltainn gu bheil ùine ruith an t-soithich gu mòr an urra ris an t-sreap a tha ceangailte (Chan eil ach toiseach an toraidh fhada air a shealltainn).

tha e systemd-nspawn a’ toirt seachad faidhlichean taghte ann an procfs и sysfs aoigheachd gu soitheach mar shlighean thuige rootfs. Ach a-mhàin MS_BIND bratach a shuidhicheas an t-sliabh ceangail, tha cuid de bhrataichean eile air an t-sliabh a’ mìneachadh a’ cheangail eadar atharrachaidhean air ainmean-àite an òstair agus an soitheach. Mar eisimpleir, faodaidh sliabh ceangailte atharrachaidhean a sheachnadh /proc и /sys a-steach don ghobhar, no cuir am falach iad a rèir a’ ghairm.

co-dhùnadh

Faodaidh a bhith a’ tuigsinn obrachadh a-staigh Linux a bhith coltach ri obair do-dhèanta, leis gu bheil tòrr còd anns an kernel fhèin, a’ fàgail iarrtasan àite luchd-cleachdaidh Linux agus eadar-aghaidh gairm siostam ann an leabharlannan C leithid an dàrna taobh. glibc. Is e aon dhòigh air adhartas a dhèanamh a bhith a’ leughadh còd stòr aon fho-shiostam kernel, le cuideam air a bhith a’ tuigsinn fiosan siostam agus bannan-cinn àite-cleachdaidh, a bharrachd air na prìomh eadar-aghaidh kernel a-staigh, leithid clàr file_operations. Tha gnìomhachd faidhle a 'toirt seachad a' phrionnsapail "tha a h-uile dad na fhaidhle", gan dèanamh gu sònraichte tlachdmhor a bhith gan riaghladh. C faidhlichean stòr kernel anns an eòlaire àrd-ìre fs/ taisbeanadh buileachadh de shiostaman faidhle brìgheil, a tha nan còmhdach fillte a bheir seachad co-chòrdalachd farsaing agus gu ìre mhath sìmplidh eadar siostaman faidhle mòr-chòrdte agus innealan stòraidh. Is e a bhith a’ ceangal agus a’ còmhdach thairis air àiteachan ainmean Linux draoidheachd VFS a tha ga dhèanamh comasach soithichean leughaidh a-mhàin agus siostaman faidhle freumh a chruthachadh. Còmhla ri sgrùdadh air a’ chòd stòr, prìomh inneal eBPF agus an eadar-aghaidh aige bcc
a’ dèanamh rannsachadh bunaiteach nas fhasa na bha e a-riamh.

A charaidean, sgrìobh, an robh an artaigil seo feumail dhut? Is dòcha gu bheil beachdan no beachdan agad? Agus thathas a’ toirt cuireadh dhaibhsan aig a bheil ùidh sa chùrsa Rianaire Linux Latha Fosgailte, a thèid a chumail air 18 Giblean.

A' chiad phàirt.

Source: www.habr.com

Cuir beachd ann