Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 2

Talofa tagata uma, matou te faʻasoa atu ia te oe le vaega lona lua o le lomiga "Virtual file system in Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue?" E mafai ona e faitau i le vaega muamua iinei. Sei matou faamanatu atu ia te oe o lenei faasologa o lomiga ua faatulagaina e fetaui ma le tatalaina o se vaitafe fou i luga o le kosi. "Linux Pule", lea e vave amata.

E faʻafefea ona mataʻituina le VFS e faʻaaoga ai meafaigaluega eBPF ma bcc

Le auala pito sili ona faigofie e malamalama ai pe faʻafefea ona galue le kernel i faila sysfs o le va'ai i le fa'atinoga, ma o le auala pito sili ona faigofie e matamata ai i le ARM64 o le fa'aogaina lea o le eBPF. eBPF (pu'upu'u mo Berkeley Packet Filter) o lo'o i ai se masini fa'apitoa o lo'o alu i totonu autu, lea e mafai e tagata fa'apitoa ona talosagaina (query) mai le laina poloaiga. E ta'u atu i le tagata faitau mea e mafai e le fatu fatu ona fai; O le faʻaogaina o meafaigaluega eBPF i luga o se faʻapipiʻiina o loʻo faʻaalia ai le mea o loʻo faia e le fatu.

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 2

O le mea e laki ai, o le amata faʻaaogaina o le eBPF e faigofie tele ma le fesoasoani a meafaigaluega faletupe, o loʻo avanoa e pei o afifi mai le tufatufaina lautele Linux ma tusia auiliili Bernard Gregg. Meafaigaluega bcc o faʻamaumauga a le Python ma faʻapipiʻi laiti o le C code, o lona uiga o soʻo se tasi e masani i gagana e lua e mafai ona faigofie ona suia. IN bcc/tools O loʻo i ai 80 Python scripts, o lona uiga e foliga mai o le a mafai e se tagata faʻapipiʻi poʻo se pule faʻatonu ona filifili se mea talafeagai mo le foia o le faʻafitauli.
Ina ia maua se manatu papaʻu o mea e fai e VFS i luga o se faiga faʻaogaina, taumafai vfscount poʻo vfsstat. O lenei mea o le a faʻaalia, seʻi tatou fai atu, o le tele o telefoni vfs_open() ma o “ana uo” e tutupu moni lava i sekone uma.

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 2

vfsstat.py o se tusitusiga Python faʻatasi ai ma faʻapipiʻi C code e naʻo le faitauina o le VFS function calls.

Seʻi o tatou tuʻuina atu se faʻataʻitaʻiga e sili atu ona le taua ma vaʻai pe o le a le mea e tupu pe a tatou tuʻuina se USB flash drive i totonu o se komepiuta ma iloa ai e le polokalama.

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 2

Fa'aaoga le eBPF e mafai ona e va'ai i mea o lo'o tupu i totonu /syspe a fa'aofi se USB flash drive. O se faʻataʻitaʻiga faigofie ma faigata o loʻo faʻaalia iinei.

I le faʻataʻitaʻiga o loʻo faʻaalia i luga, bcc mea faifaaili trace.py lolomi se fe'au pe a fa'atino le fa'atonuga sysfs_create_files(). Ua tatou vaai i ai sysfs_create_files() na faʻalauiloaina faʻaaogaina kworker vaitafe i le tali atu i le mea moni o le flash drive na faʻaofiina, ae o le a le faila na faia? O le faʻataʻitaʻiga lona lua o loʻo faʻaalia ai le malosi o le eBPF. O iinei trace.py Lolomi se kernel backtrace (-K filifiliga) ma le igoa o le faila na faia sysfs_create_files(). O le faʻaofiina o faʻamatalaga e tasi o le C code lea e aofia ai se manoa faʻapipiʻi faigofie ona iloa e saunia e le Python script lea e faʻatautaia le LLVM. sa'o-i-taimi tu'ufa'atasi. E tu'ufa'atasia lenei laina ma fa'atino i totonu o se masini masini i totonu ole fatu. Saini galuega atoatoa sysfs_create_files () e tatau ona toe faia i le poloaiga lona lua ina ia mafai ona faasino le manoa faatulagaga i se tasi o tapulaʻa. O mea sese i lenei vaega o le C code e mafua ai ni mea sese mai le C compiler. Mo se faʻataʻitaʻiga, afai e le faʻaaogaina le -l parameter, o le a e vaʻaia "Ua le mafai ona faʻapipiʻi tusitusiga BPF." O tagata atiaʻe e masani ile C ma Python o le a maua meafaigaluega bcc faigofie ona faalautele ma suia.

A faʻapipiʻi le USB drive, o le kernel backtrace o le a faʻaalia ai o le PID 7711 o se filo kworkerlea na faia ai le faila «events» в sysfs. E tusa ai, o le valaau mai sysfs_remove_files() o le a faʻaalia ai o le aveeseina o le taʻavale na mafua ai ona tape le faila events, lea e fetaui ma le manatu lautele o le faitau tusi. I le taimi lava e tasi, matamata sysfs_create_link () fa'atasi ai ma le eBPF a'o fa'aofiina le ta'avale USB o le a fa'aalia ai e le itiiti ifo i le 48 feso'ota'iga fa'atusa na faia.

O le a la le uiga o le faila faila? Fa'aoga cscope Mo su'esu'ega __device_add_disk(), o loʻo faʻaalia ai le mea e mafua ai disk_add_events (), ma a le o lea "media_change", po o "eject_request" e mafai ona faamaumauina i se faila o mea na tupu. O iinei o le kernel block layer e logoina ai le avanoa e fa'aoga ai se "disk" ua aliali mai ma aveese. Manatua le faʻamatalaga o lenei metotia suʻesuʻe e ala i le faʻaofiina o le USB drive, pe a faʻatusatusa i le taumafai e iloa pe faʻafefea ona faʻaogaina mea mai le puna.

Na'o le faitau na'o faiga faila a'a e mafai ai masini fa'apipi'i

Ioe, e leai se tasi na te tapeina le server poʻo le latou komepiuta e ala i le tosoina o le polo mai le socket. Ae aiseā? E mafua ona o le faʻapipiʻiina o faila faila i luga o masini e teu ai le tino atonu na tuai ona tusitusi, ma o faʻamaumauga faʻamaumauga e faʻamaumau ai latou setete atonu e le o faʻatasi ma tusitusiga i le teuina. A tupu lenei mea, e tatau i tagata e ona le polokalama ona faʻatali seʻia oʻo i le isi seevae e faʻalauiloa ai le aoga. fsck filesystem-recovery ma, i le tulaga sili ona leaga, leiloa faʻamatalaga.

Ae ui i lea, matou te iloa uma o le tele o masini IoT, faʻapea foʻi ma alalaupapa, thermostats ma taʻavale, o loʻo faʻatautaia nei Linux. O le tele o nei masini e itiiti pe leai se fa'aoga fa'aoga, ma e leai se auala e tape ai "mama." Vaai faalemafaufau i le amataina o se taavale i se maa ua mate pe a oo atu le malosiaga i le iunite pulea Linux oso i luga ma lalo i taimi uma. E fa'afefea le faiga o seevae e aunoa ma se umi fscko afea e amata ai le afi? Ma o le tali e faigofie. O masini fa'apipi'i e fa'alagolago i le faiga faila faila na'o le faitau (faapuupuuina ro-rootfs (faitala a'a na'o faitau)).

ro-rootfs ofoina atu le tele o faʻamanuiaga e itiiti ifo le manino nai lo le moni. O le tasi fa'amanuiaga e le mafai e malware ona tusi i ai /usr poʻo /lib, pe a leai se faiga Linux e mafai ona tusi ai iina. O le isi o le tele o faila faila e le mafai ona suia e taua tele mo le lagolago i fanua o masini mamao, talu ai o tagata lagolago e faʻalagolago i faiga faʻapitonuʻu e foliga tutusa ma le fanua. Masalo o le mea sili ona taua (ae sili ona taufaasese) o le ro-rootfs e faʻamalosia ai le au atinaʻe e filifili po o fea mea faʻaoga o le a le mafai ona suia i le mamanu o le faiga. O le galulue faatasi ma ro-rootfs e mafai ona fa'alavelave ma tiga, ona e masani ona i ai i gagana fa'apolokalame le fa'aogaina, ae o latou fa'amanuiaga e faigofie ona fa'amaonia le fa'aopoopoina o luga.

Fausia rootfs Faitau-na'o mana'omia nisi taumafaiga fa'aopoopo mo atina'e fa'apipi'i, ma o le mea lea e sau ai le VFS i le ata. E manaʻomia e Linux ia faila i totonu /var e mafai ona tusia, ma e le gata i lea, o le tele o talosaga lauiloa o loʻo faʻaogaina faiga faʻapipiʻi o le a taumafai e fai le faʻatulagaga dot-files в $HOME. O se tasi o fofo mo faila faila i totonu o le lisi o fale e masani lava ona faia muamua ma fausia i totonu rootfs. Aua /var O se tasi auala e mafai ona faʻapipiʻi i luga o se vaeluaga e mafai ona tusia, ao / fa'apipi'i na'o le faitau. O le isi filifiliga lauiloa o le faʻaaogaina o fusi poʻo faʻapipiʻi faʻamau.

Fa'apipi'i fa'apipi'i ma fa'aputu, o lo'o fa'aogaina e koneteina

Fa'atinoina o se fa'atonuga man mount o le auala sili lea e aʻoaʻo ai e uiga i faʻamau e mafai ona faʻapipiʻiina ma faʻapipiʻiina, lea e tuʻuina atu ai i tagata atinaʻe ma pule faʻatonu le tomai e fai ai se faila faila i le tasi auala ona faʻaalia lea i talosaga i le isi. Mo faiga fa'apipi'i, o lona uiga o le mafai ona teu faila i totonu /var i luga o se kiliva e faitau na'o le flash drive, ae o se fa'apipi'i pe feso'ota'i le ala mauga mai tmpfs в /var pe a utaina, o le a faʻatagaina tusi talosaga e tusi ai faʻamatalaga iina (scrawl). O le isi taimi e te ki ai suiga i /var o le a leiloa. O se fa'amau fa'apipi'i e fausia ai se fa'atasiga i le va tmpfs ma le faiga faila o loʻo i lalo ma faʻatagaina oe e faia suiga faʻaalia i faila o loʻo iai i totonu ro-tootf a o le mauga e mafai ona fusifusia e mafai ona fa'agaogaoina ai mea fou tmpfs foliga vaaia e pei ona tusia i totonu ro-rootfs auala. A o overlayfs o le mea sa'o lea (proper) ituaiga faila faila, fusifusia mauga o loʻo faʻatinoina i VFS igoa avanoa.

Faʻavae i luga o le faʻamatalaga o le faʻapipiʻi ma le faʻapipiʻiina o le mauga, e leai se tasi e ofo i lena mea Linux koneteina o lo'o fa'aaogaina malosi. Sei o tatou vaai po o le a le mea e tupu pe a tatou faaaogaina systemd-nspawn e tamo'e le koneteina e fa'aaoga ai le meafaigaluega mountsnoop от bcc.

Lui system-nspawn amata le koneteina a'o tamo'e mountsnoop.py.

Sei o tatou vaai po o le a le mea na tupu:

Tatala mountsnoop a'o le koneteina o lo'o "fa'aosoina" o lo'o fa'aalia ai e fa'alagolago tele le ta'aloga a le koneteina i luga o le mauga o lo'o feso'ota'i (Na'o le amataga o le gaosiga umi o lo'o fa'aalia).

o systemd-nspawn saunia faila filifilia i procfs и sysfs fa'afeiloa'i i pusa e fai ma ala i ai rootfs... E le gata MS_BIND fuʻa e faʻatutuina le mauga fusifusia, o isi fuʻa i luga o le mauga e faʻamalamalamaina le va o suiga i le talimalo ma le koneteina namespaces. Mo se fa'ata'ita'iga, e mafai ona fa'ase'e suiga i se mauga feso'ota'i /proc и /sys i totonu o le koneteina, pe natia e faalagolago i le valaau.

iʻuga

O le malamalama i galuega i totonu o Linux e mafai ona foliga mai o se galuega e le mafai, talu ai o le fatu lava ia o loʻo i ai le tele o tulafono laiti, ma tuʻu ese ai le faʻaogaina o avanoa mo le faʻaogaina o le Linux ma fesoʻotaʻiga telefoni i totonu o faletusi C e pei o le. glibc. O se tasi o auala e alualu ai i luma o le faitau lea o le source code o le tasi kernel subsystem, faatasi ai ma le faamamafa i le malamalama i le telefoni feaveaʻi ma faʻauluuluga o avanoa faʻaoga, faʻapea foʻi ma fesoʻotaʻiga autu i totonu ole kernel, e pei ole laulau. file_operations. O fa'agaioiga faila e tu'uina atu ai le fa'avae "o mea uma lava o se faila", e fa'afiafiaina ai le fa'afoeina. C kernel puna'oa faila i le lisi pito i luga fs/ tuʻuina atu se faʻatinoga o faiga faila faila, o se afifi afifi e maua ai le fesoʻotaʻiga lautele ma faigofie i le va o faila faila lauiloa ma masini teu. Feso'ota'i ma fa'apipi'i fa'apipi'i i luga ole igoa ole Linux ole togafiti fa'amaneta ole VFS lea e mafai ai ona faia na'o koneteina faitau ma faila faila. Fa'atasia ma se su'esu'ega o le source code, le meafaigaluega autu eBPF ma lona atina'e bcc
fa'afaigofie su'esu'ega autu nai lo se isi lava taimi.

Uo, tusi mai, pe na aoga lenei tusiga ia te oe? Masalo e i ai ni au faʻamatalaga poʻo ni faʻamatalaga? Ma oi latou e fiafia i le Linux Administrator course e valaʻaulia i Aso Tatala, lea o le a faia ia Aperila 18.

Vaega muamua.

puna: www.habr.com

Faaopoopo i ai se faamatalaga