Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 2

Halo sadayana, kami ngabagikeun ka anjeun bagian kadua tina publikasi "Sistem file virtual di Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna?" Anjeun tiasa maca bagian kahiji di dieu. Hayu urang ngingetan yén séri publikasi ieu waktosna pas sareng peluncuran aliran énggal dina kursus. "Linux Administrator", nu dimimitian pisan geura-giru.

Kumaha ngawas VFS nganggo alat eBPF sareng bcc

Cara panggampangna pikeun ngartos kumaha kernel beroperasi dina file sysfs nyaeta ningali eta dina prakna, sarta cara panggampangna pikeun lalajo ARM64 nyaeta ngagunakeun eBPF. eBPF (singketan pikeun Berkeley Packet Filter) diwangun ku mesin virtual anu dijalankeun inti, anu tiasa dipénta ku pangguna anu ngagaduhan hak istimewa (query) tina garis paréntah. Sumber kernel ngabejaan maca naon kernel bisa ngalakukeun; ngajalankeun parabot eBPF dina sistem dimuat nembongkeun naon kernel sabenerna lakukeun.

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 2

Kabeneran, ngamimitian nganggo eBPF cukup gampang kalayan bantosan alat bcc, anu sayogi salaku bungkusan tina distribusi umum Linux sareng didokumentasikeun sacara rinci Bernard Gregg. Parabot bcc nyaéta skrip Python kalayan sisipan leutik kode C, anu hartosna saha waé anu akrab sareng dua basa tiasa gampang ngarobihana. DI bcc/tools Aya 80 Aksara Python, nu hartina paling dipikaresep pamekar atawa administrator sistem bakal bisa milih hal cocog pikeun ngarengsekeun masalah.
Pikeun kéngingkeun ide deet ngeunaan naon anu dilakukeun ku VFS dina sistem anu ngajalankeun, cobian vfscount atawa vfsstat. Ieu bakal nunjukkeun, sebutkeun, puluhan telepon vfs_open() jeung "babaturanana" lumangsung sacara harfiah unggal detik.

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 2

vfsstat.py mangrupa Aksara Python jeung inserts kode C nu saukur cacah VFS nelepon fungsi.

Hayu urang masihan conto leuwih trivial tur tingal kumaha kajadian nalika urang nyelapkeun USB flash drive kana komputer tur sistem ngadeteksi eta.

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 2

Ngagunakeun eBPF anjeun tiasa ningali naon anu lumangsung dina /syslamun USB flash drive diselapkeun. Hiji conto basajan tur kompléks ditémbongkeun di dieu.

Dina conto ditémbongkeun di luhur, bcc alat trace.py prints pesen lamun paréntah dijalankeun sysfs_create_files(). Urang tingali éta sysfs_create_files() ieu dibuka ngagunakeun kworker stream di respon kana kanyataan yén flash drive ieu diselapkeun, tapi naon file dijieun? Conto kadua nembongkeun kakuatan eBPF. Ieuh trace.py Nyitak backtrace kernel (-K pilihan) jeung ngaran file nu dijieun sysfs_create_files(). Sisipan pernyataan tunggal nyaéta kode C anu kalebet senar format anu gampang dikenal anu disayogikeun ku skrip Python anu ngajalankeun LLVM just-in-time compiler. Ieu compiles garis ieu sarta executes eta dina mesin virtual jero kernel. Signature fungsi pinuh sysfs_create_files () kudu dihasilkeun dina paréntah kadua supados format string bisa nujul ka salah sahiji parameter. Kasalahan dina sapotong kode C ieu nyababkeun kasalahan anu tiasa dipikanyaho tina kompiler C. Salaku conto, upami parameter -l dileungitkeun, anjeun bakal ningali "Gagal nyusun téks BPF." Pamekar anu akrab sareng C sareng Python bakal mendakan alat bcc gampang dilegakeun sareng robih.

Nalika USB drive diselapkeun, backtrace kernel bakal nunjukkeun yén PID 7711 mangrupikeun benang kworkeranu nyiptakeun file «events» в sysfs. Sasuai, telepon ti sysfs_remove_files() bakal nunjukkeun yén ngahapus drive nyababkeun file dihapus events, nu pakait jeung konsép umum cacah rujukan. Dina waktos anu sami, ningali sysfs_create_link () kalawan eBPF bari inserting USB drive bakal némbongkeun yén sahanteuna 48 Tumbu simbolis geus dijieun.

Janten naon gunana file acara? Pamakéan cscope Pikeun milarian __device_add_disk(), nembongkeun naon ngabalukarkeun disk_add_events (), jeung boh "media_change"atawa "eject_request" bisa dirékam dina file acara. Di dieu lapisan blok kernel ngawartosan ruang pangguna yén "disk" parantos muncul sareng dikaluarkeun. Catetan kumaha informatif metoda ieu panalungtikan ku inserting USB drive, dibandingkeun jeung nyoba angka kaluar kumaha hal jalan murni tina sumberna.

Sistem file akar anu dibaca wungkul ngaktifkeun alat anu dipasang

Tangtosna, teu aya anu mareuman server atanapi komputerna ku cara narik colokan tina stop kontak. Tapi naha? Ieu kusabab sistem file anu dipasang dina alat panyimpen fisik mungkin gaduh tulisan anu katinggaleun, sareng struktur data anu ngarékam kaayaanana tiasa henteu disingkronkeun sareng nyerat ka panyimpenan. Nalika ieu kajantenan, pamilik sistem kedah ngantosan dugi ka boot salajengna pikeun ngaluncurkeun utiliti. fsck filesystem-recovery jeung, dina kasus awon, kaleungitan data.

Nanging, urang sadayana terang yén seueur alat IoT, ogé router, thermostat sareng mobil, ayeuna ngajalankeun Linux. Loba alat ieu boga saeutik atawa euweuh panganteur pamaké, sarta teu aya deui jalan pikeun mareuman aranjeunna "bersih". Bayangkeun ngamimitian mobil nganggo batré anu maot nalika kakuatan ka unit kontrol Linux terus luncat luhur jeung ka handap. Kumaha éta yén sistem boot tanpa panjang fsckiraha mesin tungtungna ngamimitian? Jeung jawaban anu basajan. Alat anu dipasang ngandelkeun sistem file akar ukur keur maca (disingketkeun ro-rootfs (baca-hijina root filesystem)).

ro-rootfs nawiskeun seueur kauntungan anu kirang atra tibatan kaaslianana. Hiji kaunggulan nyaeta malware teu bisa nulis ka /usr atawa /lib, lamun euweuh prosés Linux Ubuntu bisa nulis aya. Anu sanésna nyaéta yén sistem file anu teu tiasa dirobih penting pisan pikeun ngadukung lapangan alat jauh, sabab tanaga dukungan ngandelkeun sistem lokal anu nominalna sami sareng sistem lapangan. Panginten anu paling penting (tapi ogé paling insidious) nyaéta yén ro-rootfs maksakeun pamekar pikeun mutuskeun objék sistem mana anu teu tiasa dirobih dina tahap desain sistem. Gawe sareng ro-rootfs tiasa kagok sareng nyeri, sabab variabel const sering aya dina basa pamrograman, tapi mangpaatna gampang menerkeun biaya tambahan.

ciptaan rootfs Dibaca-hijina merlukeun sababaraha usaha tambahan pikeun pamekar embedded, sarta ieu mangrupa tempat VFS asalna kana gambar. Linux merlukeun file dina /var bisa ditulis, jeung sajaba ti éta, loba aplikasi populér nu ngajalankeun sistem embedded bakal nyobian nyieun konfigurasi dot-files в $HOME. Hiji leyuran pikeun file konfigurasi dina diréktori imah biasana tos ngahasilkeun sarta ngawangun kana rootfs. keur /var Hiji pendekatan mungkin mun Gunung eta dina partisi ditulis misah, bari / dipasang baca-hijina. Alternatif sejen populér nyaéta ngagunakeun beungkeutan atawa overlay mounts.

Linkable na stackable mounts, pamakéan maranéhanana ku peti

Palaksanaan paréntah man mount nyaeta cara pangalusna pikeun neuleuman ngeunaan bindable na overlayable mounts, nu masihan pamekar jeung administrator sistem kamampuhan pikeun nyieun sistem file dina hiji jalur lajeng ngalaan eta ka aplikasi dina sejen. Pikeun sistem anu dipasang, ieu hartosna kamampuan pikeun nyimpen file /var dina flash drive wungkul baca, tapi hiji overlay atawa jalur Gunung linkable tina tmpfs в /var nalika loading, éta bakal ngidinan aplikasi nulis catetan aya (scrawl). Dina waktos salajengna basa Anjeun ngahurungkeun perobahan ka /var bakal leungit. Gunung overlay nyiptakeun union antara tmpfs jeung sistem file kaayaan sarta ngidinan Anjeun pikeun nyieun parobahan ostensible kana file aya dina ro-tootf sedengkeun gunung anu tiasa dibeungkeut tiasa ngadamel anu énggal kosong tmpfs polder ditingali salaku bisa ditulis dina ro-rootfs cara. Sedengkeun overlayfs ieu nu bener (proper) tipe sistem file, bindable Gunung dilaksanakeun di VFS ngaranspasi.

Dumasar kana pedaran ngeunaan overlay na linkable Gunung, teu saurang ogé reuwas éta wadahna Linux Ubuntu aranjeunna aktip dipake. Hayu urang tingali naon anu lumangsung nalika urang ngagunakeun systemd-nspawn pikeun ngajalankeun wadahna ngagunakeun alat mountsnoop от bcc.

nelpon system-nspawn ngamimitian wadahna bari ngajalankeun mountsnoop.py.

Hayu urang tingali naon anu lumangsung:

Ngajalankeun mountsnoop bari wadahna geus "booting" nunjukeun yen runtime wadahna urang téh kacida gumantung Gunung keur numbu (Ngan mimiti kaluaran panjang ditémbongkeun).

Ieu téh systemd-nspawn nyadiakeun file dipilih di procfs и sysfs host kana wadahna salaku jalur ka dinya rootfs. Salian ti éta MS_BIND bandéra nu nyetél Gunung ngariung, sababaraha umbul séjén on Gunung ngahartikeun hubungan antara parobahan host na wadahna namespaces. Contona, hiji Gunung numbu boh bisa ngaliwatan parobahan /proc и /sys kana wadahna, atanapi nyumputkeun aranjeunna gumantung kana telepon.

kacindekan

Ngartos cara kerja jero Linux tiasa janten tugas anu mustahil, sabab kernel sorangan ngandung jumlah kode anu ageung, nyéépkeun aplikasi rohangan pangguna Linux sareng antarmuka sauran sistem di perpustakaan C sapertos. glibc. Salah sahiji cara pikeun kamajuan nyaéta maca kode sumber tina hiji subsistem kernel, kalayan tekenan kana pamahaman panggero sistem sareng lulugu ruang-pamaké, ogé antarmuka kernel internal utama, sapertos tabel. file_operations. Operasi file nyayogikeun prinsip "sagala mangrupikeun file", ngajantenkeun aranjeunna langkung pikaresepeun pikeun ngatur. C file sumber kernel dina diréktori tingkat luhur fs/ nampilkeun palaksanaan sistem file virtual, nu mangrupakeun lapisan wrapper nu nyadiakeun kasaluyuan lega tur kawilang basajan antara sistem file populér tur alat panyimpen. Ngahubungkeun sareng masang overlay via namespaces Linux mangrupikeun keajaiban VFS anu ngamungkinkeun nyiptakeun wadah baca wungkul sareng sistem file akar. Digabungkeun sareng pamariksaan kode sumber, alat inti eBPF sareng antarmukana bcc
nyieun eksplorasi inti gampang ti kantos.

Babaturan, nyerat, naha tulisan ieu mangpaat pikeun anjeun? Panginten anjeun gaduh koméntar atanapi koméntar? Sareng anu resep kana kursus Administrator Linux diondang Buka Poé, anu bakal lumangsung dina 18 April.

Bagian kahiji.

sumber: www.habr.com

Tambahkeun komentar