Sistem file virtual ing Linux: kenapa dibutuhake lan kepiye cara kerjane? Bagean 2

Halo kabeh, kita bareng karo sampeyan bagean kapindho publikasi "Sistem file virtual ing Linux: kenapa dibutuhake lan kepiye cara kerjane?" Sampeyan bisa maca bagean pisanan kene. Ayo kita ngelingake sampeyan manawa seri publikasi iki dijadwalake pas karo peluncuran aliran anyar ing kursus kasebut. "Linux Administrator", sing diwiwiti banget.

Cara ngawasi VFS nggunakake alat eBPF lan bcc

Cara paling gampang kanggo mangerteni carane kernel ngoperasikake file sysfs iku kanggo ndeleng ing laku, lan cara paling gampang kanggo nonton ARM64 nggunakake eBPF. eBPF (singkatan saka Berkeley Packet Filter) kasusun saka mesin virtual sing mlaku ing inti, sing bisa dijaluk pangguna sing duwe hak istimewa (query) saka baris perintah. Sumber kernel ngandhani maca apa sing bisa ditindakake kernel; mlaku alat eBPF ing sistem dimuat nuduhake apa kernel bener mengkono.

Sistem file virtual ing Linux: kenapa dibutuhake lan kepiye cara kerjane? Bagean 2

Untunge, miwiti nggunakake eBPF cukup gampang kanthi bantuan alat Bcc, sing kasedhiya minangka paket saka distribusi umum Linux lan didokumentasikake kanthi rinci Bernard Gregg. piranti bcc yaiku skrip Python kanthi sisipan cilik kode C, sing tegese sapa wae sing ngerti basa loro kasebut bisa gampang ngowahi. ING bcc/tools Ana 80 skrip Python, sing tegese pangembang utawa administrator sistem bisa milih sing cocog kanggo ngrampungake masalah kasebut.
Kanggo entuk paling ora ide sing entheng babagan apa sing ditindakake VFS ing sistem sing mlaku, coba vfscount utawa vfsstat. Iki bakal nuduhake, ayo ngomong, sing Welasan telpon vfs_open() lan "kanca-kancane" kedadeyan saben detik.

Sistem file virtual ing Linux: kenapa dibutuhake lan kepiye cara kerjane? Bagean 2

vfsstat.py punika script Python karo sisipan kode C sing mung counts telpon fungsi VFS.

Ayo menehi conto sing luwih sepele lan ndeleng apa sing kedadeyan nalika masang USB flash drive menyang komputer lan sistem ndeteksi.

Sistem file virtual ing Linux: kenapa dibutuhake lan kepiye cara kerjane? Bagean 2

Nggunakake eBPF sampeyan bisa ndeleng apa sing kedadeyan ing /sysnalika USB flash drive dipasang. Conto prasaja lan rumit ditampilake ing kene.

Ing conto ing ndhuwur, bcc alat trace.py prints pesen nalika printah mbukak sysfs_create_files(). We ndeleng sing sysfs_create_files() dibukak nggunakake kworker stream kanggo nanggepi kasunyatan sing flash drive dipasang, nanging apa file digawe? Conto kapindho nuduhake kekuwatan eBPF. kene trace.py Nyetak backtrace kernel (-K opsi) lan jeneng file sing digawe sysfs_create_files(). Sisipan pernyataan tunggal yaiku kode C sing kalebu string format sing gampang dingerteni sing diwenehake dening skrip Python sing nganggo LLVM compiler mung-ing-wektu. Iku nyusun baris iki lan nglakokaké ing mesin virtual nang kernel. Tandha fungsi lengkap sysfs_create_files () kudu direproduksi ing printah kapindho supaya string format bisa ngrujuk menyang salah siji paramèter. Kesalahan ing potongan kode C iki nyebabake kesalahan sing bisa dingerteni saka kompiler C. Contone, yen parameter -l diilangi, sampeyan bakal weruh "Gagal nyusun teks BPF." Pangembang sing kenal karo C lan Python bakal nemokake alat kasebut bcc gampang kanggo nggedhekake lan ngganti.

Nalika drive USB dipasang, backtrace kernel bakal nuduhake yen PID 7711 minangka benang kworkersing nggawe file Β«eventsΒ» Π² sysfs. Patut, telpon saka sysfs_remove_files() bakal nuduhake yen mbusak drive nyebabake file dibusak events, sing cocog karo konsep umum ngetung referensi. Ing wektu sing padha, ndeleng sysfs_create_link () karo eBPF nalika masang USB drive bakal nuduhake yen paling 48 pranala simbolis wis digawe.

Dadi apa gunane file acara? Panggunaan cscope Kanggo nggoleki __device_add_disk(), nuduhake apa nimbulakΓ© disk_add_events (), lan salah siji "media_change", utawa "eject_request" bisa direkam ing file acara. Ing kene, lapisan blok kernel ngandhani ruang pangguna yen "disk" wis katon lan metu. Elinga carane informatif cara riset iki kanthi masang USB drive, dibandhingake karo nyoba kanggo mangerteni carane iku bisa sejatine sifate saka sumber.

Sistem file ROOT sing diwaca mung ngaktifake piranti sing dipasang

Mesthi, ora ana sing mateni server utawa komputer kanthi narik plug saka soket. Nanging kenapa? Iki amarga sistem file sing dipasang ing piranti panyimpenan fisik bisa uga wis lagged nulis, lan struktur data sing ngrekam negara kasebut bisa uga ora disinkronake karo tulisan menyang panyimpenan. Yen kedadeyan kasebut, pamilik sistem kudu ngenteni nganti boot sabanjure kanggo mbukak sarana kasebut. fsck filesystem-recovery lan, ing kasus paling awon, ilang data.

Nanging, kita kabeh ngerti manawa akeh piranti IoT, uga router, termostat lan mobil, saiki nganggo Linux. Akeh piranti kasebut ora duwe antarmuka pangguna, lan ora ana cara kanggo mateni "resik." Mbayangno miwiti mobil karo baterei mati nalika daya kanggo unit kontrol punika Linux terus-terusan mlumpat munggah lan mudhun. Carane iku sistem boot tanpa dawa fsckkapan akhire mesin mulai mlaku? Lan jawabane prasaja. Piranti semat gumantung ing sistem file root mung kanggo maca (dicekak ro-rootfs (waca-mung root filesystem)).

ro-rootfs nawakake akeh keuntungan sing kurang jelas tinimbang keasliane. Siji kauntungan yaiku malware ora bisa nulis /usr utawa /lib, yen ora ana proses Linux sing bisa nulis ing kana. Liyane yaiku sistem file sing ora bisa diganti penting banget kanggo dhukungan lapangan piranti remot, amarga personel dhukungan gumantung ing sistem lokal sing nominal identik karo sistem lapangan. Muga-muga sing paling penting (nanging uga paling insidious) yaiku ro-rootfs meksa pangembang kanggo mutusake obyek sistem sing ora bisa diganti ing tahap desain sistem. Nggarap ro-rootfs bisa dadi kikuk lan nglarani, amarga variabel const asring ana ing basa pamrograman, nanging keuntungan kasebut gampang mbenerake overhead tambahan.

nggawe rootfs Waca-mung mbutuhake sawetara gaweyan ekstra kanggo pangembang ditempelake, lan iki ngendi VFS teka menyang gambar. Linux mbutuhake file ing /var bisa ditulis, lan ing Kajaba iku, akeh aplikasi populer sing mbukak sistem ditempelake bakal nyoba kanggo nggawe konfigurasi dot-files Π² $HOME. Siji solusi kanggo file konfigurasi ing direktori ngarep biasane kanggo nggawe lan mbangun menyang rootfs. kanggo /var Salah sawijining pendekatan sing bisa ditindakake yaiku dipasang ing partisi sing bisa ditulis sing kapisah, nalika / dipasang mung diwaca. Alternatif liyane sing populer yaiku nggunakake binding utawa overlay mounts.

Gunung sing bisa disambung lan bisa ditumpuk, panggunaane ing wadhah

NglakokakΓ© dhawuh man mount minangka cara sing paling apik kanggo sinau babagan gunung sing bisa diikat lan overlayable, sing menehi pangembang lan administrator sistem kemampuan kanggo nggawe sistem file ing siji dalan lan banjur mbukak aplikasi ing liyane. Kanggo sistem sing dipasang, iki tegese kemampuan kanggo nyimpen file ing /var ing flash drive mung diwaca, nanging overlay utawa linkable gunung path saka tmpfs Π² /var nalika dimuat, bakal ngidini aplikasi nulis cathetan ing kana (scrawl). Sabanjure sampeyan nguripake owah-owahan menyang /var bakal ilang. Gunung overlay nggawe serikat antarane tmpfs lan sistem file ndasari lan ngijini sampeyan kanggo nggawe owahan ostensible kanggo file ana ing ro-tootf dene gunung sing bisa diikat bisa nggawe sing anyar kosong tmpfs folder katon minangka bisa ditulis ing ro-rootfs cara. Nalika overlayfs iki sing bener (proper) jinis sistem file, bindable mount dileksanakake ing Ruang jeneng VFS.

Adhedhasar katrangan babagan overlay lan mountable, ora ana sing kaget kontaner Linux lagi aktif digunakake. Ayo ndeleng apa sing kedadeyan nalika kita nggunakake systemd-nspawn kanggo mbukak wadhah nggunakake alat mountsnoop saka bcc.

Telpon system-nspawn miwiti wadhah nalika mlaku mountsnoop.py.

Ayo ndeleng apa sing kedadeyan:

Bukak mountsnoop nalika wadhah "booting" nuduhake yen runtime wadhah gumantung banget ing gunung sing disambung (Mung awal output dawa ditampilake).

iku systemd-nspawn nyedhiyakake file sing dipilih ing procfs ΠΈ sysfs host menyang wadhah minangka dalan menyang rootfs... kajaba MS_BIND flag sing mranata munggah gunung naleni, sawetara panji liyane ing gunung nemtokake hubungan antarane owah-owahan kanggo host lan wadhah namespaces. Contone, gunung sing disambung bisa ngliwati owah-owahan menyang /proc ΠΈ /sys menyang wadhah, utawa ndhelikake mau gumantung ing telpon.

kesimpulan

Ngerteni cara kerja internal Linux bisa katon kaya tugas sing ora mungkin, amarga kernel kasebut ngemot kode sing akeh banget, ninggalake aplikasi ruang pangguna Linux lan antarmuka panggilan sistem ing perpustakaan C kayata glibc. Salah siji cara kanggo nggawe kemajuan yaiku maca kode sumber siji subsistem kernel, kanthi penekanan kanggo mangerteni panggilan sistem lan header spasi pangguna, uga antarmuka kernel internal utama, kayata tabel. file_operations. Operasi file nyedhiyakake prinsip "kabeh iku file", dadi luwih nyenengake kanggo ngatur. File sumber kernel C ing direktori tingkat paling dhuwur fs/ saiki implementasine saka sistem file virtual, kang lapisan wrapper sing nyedhiyani kompatibilitas amba lan relatif prasaja antarane sistem file populer lan piranti panyimpenan. Nyambung lan overlay sing dipasang liwat ruang jeneng Linux minangka keajaiban VFS sing nggawe wadhah mung diwaca lan sistem file ROOT. Digabungake karo pemeriksaan kode sumber, alat inti eBPF lan antarmuka bcc
nggawe eksplorasi inti luwih gampang tinimbang sadurunge.

Kanca-kanca, tulisen, apa artikel iki migunani kanggo sampeyan? Mungkin sampeyan duwe komentar utawa komentar? Lan sing kasengsem ing kursus Administrator Linux diundang kanggo Open Day, sing bakal ditindakake tanggal 18 April.

PΓ©rangan pisanan.

Source: www.habr.com

Add a comment