Mga sistema sa virtual nga file sa Linux: nganong gikinahanglan kini ug giunsa kini pagtrabaho? Bahin 2

Kumusta sa tanan, among gipaambit kanimo ang ikaduhang bahin sa publikasyon nga "Virtual file system sa Linux: nganong gikinahanglan kini ug giunsa kini pagtrabaho?" Mahimo nimong basahon ang unang bahin dinhi. Pahinumdum kami kanimo nga kini nga serye sa mga publikasyon gitakda nga motakdo sa paglansad sa usa ka bag-ong sapa sa kurso. "Linux Administrator", nga magsugod sa dili madugay.

Giunsa pag-monitor ang VFS gamit ang eBPF ug bcc nga mga himan

Ang labing kadali nga paagi aron masabtan kung giunsa ang pag-operate sa kernel sa mga file sysfs mao ang pagtan-aw niini sa praktis, ug ang pinakasayon ​​nga paagi sa pagtan-aw sa ARM64 mao ang paggamit sa eBPF. Ang eBPF (mubo alang sa Berkeley Packet Filter) naglangkob sa usa ka virtual nga makina nga nagdagan kinauyokan, nga mahimong hangyoon sa mga pribilihiyo nga tiggamit (query) gikan sa command line. Ang mga tinubdan sa kernel nagsulti sa magbabasa kung unsa ang mahimo sa kernel; Ang pagpadagan sa mga himan sa eBPF sa usa ka puno nga sistema nagpakita kung unsa ang tinuod nga gibuhat sa kernel.

Mga sistema sa virtual nga file sa Linux: nganong gikinahanglan kini ug giunsa kini pagtrabaho? Bahin 2

Suwerte, ang pagsugod sa paggamit sa eBPF dali ra sa tabang sa mga himan bcc, nga magamit isip mga pakete gikan sa kinatibuk-ang pag-apod-apod Linux ug gidokumento sa detalye Bernard Gregg. Mga galamiton bcc mao ang mga script sa Python nga adunay gamay nga pagsal-ot sa C code, nga nagpasabut nga bisan kinsa nga pamilyar sa duha nga mga sinultian dali nga mabag-o kini. SA bcc/tools Adunay 80 ka mga script sa Python, nga nagpasabut nga lagmit ang usa ka developer o system administrator makahimo sa pagpili sa usa ka butang nga angay alang sa pagsulbad sa problema.
Aron makakuha labing menos usa ka taphaw nga ideya kung unsa ang gibuhat sa mga VFS sa usa ka nagdagan nga sistema, sulayi vfscount o vfsstat. Kini magpakita, ingnon ta, nga daghang mga tawag vfs_open() ug ang "iyang mga higala" literal nga mahitabo matag segundo.

Mga sistema sa virtual nga file sa Linux: nganong gikinahanglan kini ug giunsa kini pagtrabaho? Bahin 2

vfsstat.py usa ka script sa Python nga adunay mga pagsal-ot sa C code nga nag-ihap sa mga tawag sa function sa VFS.

Hatagan ta ang usa ka labi ka gamay nga pananglitan ug tan-awon kung unsa ang mahitabo kung magsulud kita usa ka USB flash drive sa usa ka kompyuter ug ang sistema nakamatikod niini.

Mga sistema sa virtual nga file sa Linux: nganong gikinahanglan kini ug giunsa kini pagtrabaho? Bahin 2

Gamit ang eBPF imong makita kung unsa ang nahitabo sa /syssa diha nga ang usa ka USB flash drive gisal-ut. Ang usa ka yano ug komplikado nga pananglitan gipakita dinhi.

Sa pananglitan nga gipakita sa ibabaw, bcc instrumento trace.py nag-imprenta sa usa ka mensahe kung ang mando gipadagan sysfs_create_files(). Atong makita kana sysfs_create_files() gilusad gamit ang kworker stream isip tubag sa kamatuoran nga ang flash drive gisal-ut, apan unsa nga file ang gibuhat? Ang ikaduha nga pananglitan nagpakita sa gahum sa eBPF. Dinhi trace.py Nag-imprinta og kernel backtrace (-K nga opsyon) ug ang ngalan sa file nga gimugna sysfs_create_files(). Ang single statement insertion mao ang C code nga naglakip sa usa ka dali mailhan nga format string nga gihatag sa Python script nga nagpadagan sa LLVM just-in-time compiler. Gi-compile kini nga linya ug gipatuman kini sa usa ka virtual nga makina sa sulod sa kernel. Bug-os nga function nga pirma sysfs_create_files () kinahanglan nga kopyahon sa ikaduha nga mando aron ang format nga string mahimong magtumong sa usa sa mga parameter. Ang mga kasaypanan niini nga piraso sa C code moresulta sa mailhan nga mga sayop gikan sa C compiler. Pananglitan, kung ang -l parameter wala iapil, imong makita ang "Napakyas sa pag-compile sa BPF nga teksto." Ang mga nag-develop nga pamilyar sa C ug Python makit-an ang mga himan bcc sayon ​​sa pagpalapad ug pagbag-o.

Sa diha nga ang USB drive gisulod, ang kernel backtrace magpakita nga ang PID 7711 usa ka hilo kworkernga naghimo sa file «events» в sysfs. Subay niini, ang tawag gikan sa sysfs_remove_files() ipakita nga ang pagtangtang sa drive miresulta sa pagtangtang sa file events, nga katumbas sa kinatibuk-ang konsepto sa pag-ihap sa pakisayran. Sa samang higayon, ang pagtan-aw sysfs_create_link () uban sa eBPF samtang gisal-ot ang USB drive magpakita nga labing menos 48 ka simbolo nga mga link ang nahimo.

Busa unsa ang punto sa mga panghitabo nga file? Paggamit cscope Para pangitaon __device_add_disk(), nagpakita kon unsay hinungdan niini disk_add_events (), ug bisan asa "media_change", o "eject_request" mahimong irekord sa usa ka file sa panghitabo. Dinhi ang kernel block layer nagpahibalo sa userspace nga usa ka "disk" ang nagpakita ug gitangtang. Timan-i kung unsa ka informative kini nga pamaagi sa panukiduki pinaagi sa pagsal-ot sa usa ka USB drive, kung itandi sa pagsulay nga mahibal-an kung giunsa ang mga butang molihok gikan sa gigikanan.

Ang read-only nga root file system makapahimo sa mga embedded device

Siyempre, walay usa nga nagpatay sa server o sa ilang kompyuter pinaagi sa pagbira sa plug gikan sa socket. Pero ngano man? Kini tungod kay ang gi-mount nga mga sistema sa file sa pisikal nga mga aparato sa pagtipig mahimo’g adunay mga lagged nga pagsulat, ug ang mga istruktura sa datos nga nagrekord sa ilang estado mahimo’g dili ma-synchronize sa mga pagsulat sa pagtipig. Kung mahitabo kini, ang mga tag-iya sa sistema kinahanglan maghulat hangtod sa sunod nga boot aron ilunsad ang utility. fsck filesystem-recovery ug, sa pinakagrabe nga kaso, pagkawala sa datos.

Bisan pa, nahibal-an namon tanan nga daghang mga aparato sa IoT, ingon man mga router, thermostat ug mga awto, karon nagpadagan sa Linux. Daghan niini nga mga himan adunay gamay o walay user interface, ug walay paagi sa pagpalong niini nga "limpyo." Hunahunaa ang pagsugod sa usa ka awto nga adunay patay nga baterya kung ang gahum sa control unit Linux kanunay nga naglukso-lukso. Giunsa nga ang sistema nag-boot nga wala’y kadugay fsckkanus-a magsugod ang makina? Ug ang tubag yano ra. Ang mga embedded device nagsalig sa root file system para lang sa pagbasa (gipamub-an ro-rootfs (read-only root filesystem)).

ro-rootfs nagtanyag daghang mga benepisyo nga dili kaayo klaro kaysa sa pagkatinuod. Usa ka bentaha mao nga ang malware dili makasulat sa /usr o /lib, kung walay proseso sa Linux ang makasulat didto. Ang usa pa mao nga ang usa ka dili mausab nga sistema sa file hinungdanon alang sa suporta sa uma sa mga hilit nga aparato, tungod kay ang mga kawani sa suporta nagsalig sa mga lokal nga sistema nga parehas nga parehas sa mga sistema sa uma. Tingali ang labing hinungdanon (apan labi ka malimbungon) nga kaayohan mao nga ang ro-rootfs nagpugos sa mga developer sa pagdesisyon kung unsang mga butang sa sistema ang dili mabag-o sa yugto sa disenyo sa sistema. Ang pagtrabaho kauban ang mga ro-rootfs mahimong dili maayo ug sakit, tungod kay ang mga variable sa const kanunay naa sa mga sinultian nga programming, apan ang ilang mga benepisyo dali nga nagpakamatarung sa dugang nga overhead.

paglalang rootfs Ang pagbasa-lamang nanginahanglan pipila ka dugang nga paningkamot alang sa mga naka-embed nga developer, ug kini diin ang VFS moabut sa litrato. Gikinahanglan sa Linux nga ang mga file naa sa /var masulat, ug dugang pa, daghang mga sikat nga aplikasyon nga nagpadagan sa mga naka-embed nga sistema ang mosulay sa paghimo og configuration dot-files в $HOME. Ang usa ka solusyon alang sa mga file sa pag-configure sa direktoryo sa balay kasagaran ang pag-pre-generate ug paghimo niini rootfs. Alang /var Usa ka posible nga pamaagi mao ang pag-mount niini sa usa ka bulag nga partisyon nga masulat, samtang / gi-mount read-only. Ang laing popular nga alternatibo mao ang paggamit sa bind o overlay mounts.

Linkable ug stackable mounts, ang ilang paggamit sa mga sudlanan

Pagpatuman sa sugo man mount mao ang pinakamaayong paagi sa pagkat-on mahitungod sa mga bindable ug overlayable mounts, nga naghatag sa mga developers ug system administrator og abilidad sa paghimo og file system sa usa ka dalan ug dayon ibutyag kini sa mga aplikasyon sa lain. Alang sa mga naka-embed nga sistema, kini nagpasabut nga ang abilidad sa pagtipig sa mga file sa /var sa usa ka read-only flash drive, apan usa ka overlay o linkable mount path gikan sa tmpfs в /var kung nagkarga, tugotan niini ang mga aplikasyon sa pagsulat sa mga nota didto (scrawl). Sa sunod higayon nga imong i-on ang mga kausaban sa /var mawala. Ang usa ka overlay mount nagmugna og panaghiusa tali tmpfs ug ang nagpahiping sistema sa file ug nagtugot kanimo sa paghimo og mga pagbag-o sa mga kasamtangan nga mga file sa ro-tootf samtang ang usa ka mabugkos nga bukid makahimo sa mga bag-o nga walay sulod tmpfs mga folder nga makita nga masulat sa ro-rootfs mga paagi. Samtang overlayfs kini ang husto (proper) tipo sa sistema sa file, gipatuman ang bindable mount sa VFS namespace.

Base sa paghulagway sa overlay ug linkable mount, walay usa nga natingala niana Mga sudlanan sa Linux sila aktibo nga gigamit. Atong tan-awon kon unsay mahitabo sa dihang atong gamiton systemd-nspawn sa pagpadagan sa sudlanan gamit ang himan mountsnoop gikan sa bcc.

Hagit system-nspawn magsugod sa sudlanan samtang nagdagan mountsnoop.py.

Atong tan-awon kon unsay nahitabo:

Lansad mountsnoop samtang ang sudlanan "nag-boot" nagpakita nga ang runtime sa sudlanan nagsalig kaayo sa bukid nga gisumpay (Ang sinugdanan ra sa taas nga output ang gipakita).

kini mao ang systemd-nspawn naghatag ug pinili nga mga file sa procfs и sysfs host sa sudlanan ingon nga mga agianan niini rootfs... Gawas MS_BIND Ang bandila nga nagbutang sa nagbugkos nga bukid, ang uban nga mga bandila sa bukid nagpaila sa relasyon tali sa mga pagbag-o sa host ug mga namespace sa sudlanan. Pananglitan, ang usa ka nalambigit nga mount mahimong makalaktaw sa mga pagbag-o sa /proc и /sys sa sudlanan, o itago kini depende sa tawag.

konklusyon

Ang pagsabut sa sulod nga mga buhat sa Linux ingon og usa ka imposible nga buluhaton, tungod kay ang kernel mismo naglangkob sa usa ka dako nga kantidad sa code, gibiyaan ang Linux user space nga mga aplikasyon ug mga interface sa tawag sa sistema sa mga librarya sa C sama sa glibc. Usa ka paagi sa pag-uswag mao ang pagbasa sa source code sa usa ka kernel subsystem, uban ang paghatag gibug-aton sa pagsabot sa mga tawag sa sistema ug mga ulohan sa user-space, ingon man usab sa mga nag-unang internal nga kernel interface, sama sa lamesa. file_operations. Ang mga operasyon sa file naghatag sa prinsipyo nga "ang tanan usa ka file", nga naghimo kanila nga labi ka makalingaw sa pagdumala. C kernel source files sa top-level nga direktoryo fs/ ipresentar ang usa ka pagpatuman sa virtual file system, nga usa ka wrapper layer nga naghatag og lapad ug medyo simple nga compatibility tali sa popular nga file system ug storage device. Ang pag-link ug pag-overlay sa pag-mount pinaagi sa mga namespace sa Linux mao ang salamangka sa VFS nga nagpaposible sa paghimo og read-only nga mga sudlanan ug mga root filesystem. Inubanan sa pagsusi sa source code, ang eBPF core tool ug ang interface niini bcc
paghimo sa kinauyokan nga eksplorasyon nga mas sayon ​​kaysa kaniadto.

Mga higala, pagsulat, mapuslanon ba kanimo kini nga artikulo? Tingali naa kay komento o komento? Ug ang mga interesado sa kurso sa Linux Administrator gidapit sa Bukas nga Adlaw, nga mahitabo sa Abril 18.

Una nga bahin.

Source: www.habr.com

Idugang sa usa ka comment