Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 2-qism

Hammaga salom, biz siz bilan "Linux-dagi virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi?" nashrining ikkinchi qismini siz bilan baham ko'ramiz. Birinchi qismni o'qishingiz mumkin shu yerda. Eslatib o‘tamiz, ushbu nashrlar turkumi kurs bo‘yicha yangi oqim boshlanishiga to‘g‘ri keladi "Linux administratori", bu juda tez orada boshlanadi.

eBPF va bcc vositalaridan foydalangan holda VFSni qanday kuzatish mumkin

Yadro fayllarda qanday ishlashini tushunishning eng oson yo'li sysfs buni amalda ko'rish va ARM64 ni tomosha qilishning eng oson yo'li eBPF dan foydalanishdir. eBPF (Berkeley Packet Filterning qisqartmasi) ishlayotgan virtual mashinadan iborat yadro, qaysi imtiyozli foydalanuvchilar talab qilishi mumkin (query) buyruq satridan. Yadro manbalari o'quvchiga yadro nima qilishi mumkinligini aytadi; yuklangan tizimda eBPF vositalarini ishga tushirish yadro aslida nima qilayotganini ko'rsatadi.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 2-qism

Yaxshiyamki, asboblar yordamida eBPF-dan foydalanishni boshlash juda oson yashirin, ular umumiy tarqatishdan paketlar sifatida mavjud Linux va batafsil hujjatlashtirilgan Bernard Gregg. Asboblar bcc Bu Python skriptlari bo'lib, kichik C kodlari kiritiladi, bu ikkala tilni yaxshi biladigan har bir kishi ularni osongina o'zgartirishi mumkinligini anglatadi. IN bcc/tools 80 ta Python skripti mavjud, ya'ni ishlab chiquvchi yoki tizim ma'muri muammoni hal qilish uchun mos keladigan narsani tanlashi mumkin.
VFSlar ishlaydigan tizimda qanday ishlarni bajarishi haqida hech bo'lmaganda yuzaki tasavvurga ega bo'lish uchun harakat qilib ko'ring vfscount yoki vfsstat. Bu, aytaylik, o'nlab qo'ng'iroqlarni ko'rsatadi vfs_open() va "uning do'stlari" tom ma'noda har soniyada sodir bo'ladi.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 2-qism

vfsstat.py Bu oddiygina VFS funksiya chaqiruvlarini hisoblaydigan C kodli qo'shimchali Python skriptidir.

Keling, oddiyroq misol keltiramiz va USB flesh-diskini kompyuterga joylashtirganda va tizim uni aniqlaganimizda nima bo'lishini ko'rib chiqamiz.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 2-qism

eBPF-dan foydalanib, nima sodir bo'layotganini ko'rishingiz mumkin /sysUSB flesh haydovchi kiritilganda. Bu erda oddiy va murakkab misol ko'rsatilgan.

Yuqorida ko'rsatilgan misolda, bcc asbob trace.py buyruq bajarilganda xabarni chop etadi sysfs_create_files(). Biz buni ko'ramiz sysfs_create_files() yordamida ishga tushirildi kworker flesh-disk kiritilganiga javoban oqim, lekin qanday fayl yaratilgan? Ikkinchi misol eBPF kuchini ko'rsatadi. Bu yerga trace.py Yadroning orqa izi (-K opsiyasi) va yaratilgan fayl nomini chop etadi sysfs_create_files(). Yagona bayonot kiritish - bu LLVM bilan ishlaydigan Python skripti tomonidan taqdim etilgan osongina tanib olinadigan format qatorini o'z ichiga olgan C kodi. o'z vaqtida kompilyator. U ushbu qatorni kompilyatsiya qiladi va uni yadro ichidagi virtual mashinada bajaradi. To'liq funktsiya imzosi sysfs_create_files () format satri parametrlardan biriga murojaat qilishi uchun ikkinchi buyruqda takrorlanishi kerak. C kodining ushbu qismidagi xatolar C kompilyatoridan tanib olinadigan xatolarga olib keladi. Misol uchun, agar -l parametri o'tkazib yuborilsa, siz "BPF matnini kompilyatsiya qilish muvaffaqiyatsiz tugadi" ni ko'rasiz. C va Python bilan tanish bo'lgan dasturchilar asboblarni topadilar bcc kengaytirish va o'zgartirish oson.

USB drayveri o'rnatilganda, yadro orqa izi PID 7711 ip ekanligini ko'rsatadi. kworkerfaylni yaratgan «events» в sysfs. Shunga ko'ra, dan qo'ng'iroq sysfs_remove_files() drayverni olib tashlash faylni o'chirishga olib kelganligini ko'rsatadi events, bu mos yozuvlar hisoblashning umumiy kontseptsiyasiga mos keladi. Shu bilan birga, ko'rish sysfs_create_link () eBPF bilan USB drayverni o'rnatishda kamida 48 ta ramziy havola yaratilganligini ko'rsatadi.

Xo'sh, voqealar faylining maqsadi nima? Foydalanish cscope Qidiruv uchun __device_add_disk(), nima sabab bo'lishini ko'rsatadi disk_add_events (), va ikkalasi ham "media_change", yoki "eject_request" voqea faylida qayd etilishi mumkin. Bu erda yadro bloki qatlami foydalanuvchi maydoniga "disk" paydo bo'lganligi va chiqarilganligi haqida xabar beradi. Ishlarning faqat manbadan qanday ishlashini aniqlashga urinish bilan solishtirganda, USB drayverini o'rnatish orqali ushbu tadqiqot usuli qanchalik ma'lumotli ekanligiga e'tibor bering.

Faqat o'qish uchun mo'ljallangan ildiz fayl tizimlari o'rnatilgan qurilmalarni faollashtiradi

Albatta, hech kim vilkasini rozetkadan tortib, serverni yoki kompyuterni o'chirmaydi. Lekin nima uchun? Buning sababi shundaki, jismoniy xotira qurilmalariga o'rnatilgan fayl tizimlari kechikkan yozishga ega bo'lishi mumkin va ularning holatini qayd qiluvchi ma'lumotlar tuzilmalari xotiraga yozish bilan sinxronlashtirilmasligi mumkin. Bu sodir bo'lganda, tizim egalari yordamchi dasturni ishga tushirish uchun keyingi yuklashgacha kutishlari kerak. fsck filesystem-recovery va, eng yomon holatda, ma'lumotlarni yo'qotish.

Biroq, barchamiz bilamizki, ko'plab IoT qurilmalari, shuningdek, marshrutizatorlar, termostatlar va avtomobillar endi Linuxda ishlaydi. Ushbu qurilmalarning ko'pchiligi foydalanuvchi interfeysiga ega emas va ularni "toza" o'chirishning hech qanday usuli yo'q. Tasavvur qiling-a, boshqaruv blokiga quvvat yoqilganda, batareyasi o'chib qolgan mashinani ishga tushiring Linux doimo yuqoriga va pastga sakrash. Qanday qilib tizim uzoq vaqt davomida yuklanadi fsckmotor nihoyat qachon ishlay boshlaydi? Va javob oddiy. O'rnatilgan qurilmalar ildiz fayl tizimiga tayanadi faqat o'qish uchun (qisqartirilgan shaklda ro-rootfs (faqat o'qish uchun ildiz fayl tizimi)).

ro-rootfs haqiqiylikdan kamroq ravshan bo'lgan ko'plab imtiyozlarni taklif qiladi. Bir afzalligi shundaki, zararli dastur unga yoza olmaydi /usr yoki /lib, agar u erda hech qanday Linux jarayoni yoza olmasa. Yana bir narsa shundaki, asosan o'zgarmas fayl tizimi masofaviy qurilmalarni dala qo'llab-quvvatlashi uchun juda muhimdir, chunki qo'llab-quvvatlash xodimlari dala tizimlari bilan nominal jihatdan bir xil bo'lgan mahalliy tizimlarga tayanadi. Ehtimol, eng muhim (lekin eng makkor) foyda shundaki, ro-rootfs dasturchilarni tizimni loyihalash bosqichida qaysi tizim ob'ektlari o'zgarmas bo'lishini hal qilishga majbur qiladi. Ro-rootflar bilan ishlash noqulay va og'riqli bo'lishi mumkin, chunki const o'zgaruvchilari ko'pincha dasturlash tillarida bo'ladi, ammo ularning afzalliklari qo'shimcha xarajatlarni osongina oqlaydi.

yaratilish rootfs Faqat o'qish uchun o'rnatilgan ishlab chiquvchilar uchun qo'shimcha harakatlar talab etiladi va bu erda VFS rasmga tushadi. Linux fayllarning ichida bo'lishini talab qiladi /var yozilishi mumkin edi va bundan tashqari, o'rnatilgan tizimlar bilan ishlaydigan ko'plab mashhur ilovalar konfiguratsiya yaratishga harakat qiladi dot-files в $HOME. Uy katalogidagi konfiguratsiya fayllari uchun bir yechim odatda ularni oldindan yaratish va yaratishdir rootfs. uchun /var Mumkin bo'lgan yondashuvlardan biri uni alohida yoziladigan bo'limga o'rnatishdir / faqat o'qish uchun o'rnatilgan. Yana bir mashhur muqobil - bog'lash yoki qoplamali o'rnatishlardan foydalanish.

Bog'lanadigan va stackable o'rnatish, ularni konteynerlar tomonidan ishlatish

Buyruqni bajarish man mount ishlab chiquvchilar va tizim ma'murlariga fayl tizimini bir yo'lda yaratish va keyin uni boshqa yo'lda ilovalarga ko'rsatish imkoniyatini beradigan bog'lanishi mumkin bo'lgan va qo'shilishi mumkin bo'lgan ulanishlarni o'rganishning eng yaxshi usuli. O'rnatilgan tizimlar uchun bu fayllarni saqlash qobiliyatini anglatadi /var faqat o'qish uchun mo'ljallangan flesh-diskda, lekin ustki qatlam yoki bog'lanadigan o'rnatish yo'li tmpfs в /var yuklaganda, u ilovalarga eslatmalarni yozishga imkon beradi (scrawl). Keyingi safar o'zgarishlarni yoqsangiz /var yo'qoladi. Qoplama o'rnatish o'rtasida birlik hosil qiladi tmpfs va asosiy fayl tizimi va mavjud fayllarga ko'rinadigan o'zgartirishlar kiritish imkonini beradi ro-tootf bog'lab qo'yiladigan o'rnatish esa yangilarini bo'sh qilishi mumkin tmpfs papkalar yozilishi mumkin ro-rootfs yo'llari. Vaholanki overlayfs bu to'g'ri (proper) fayl tizimi turi, bog'lanadigan o'rnatish amalga oshiriladi VFS nom maydoni.

Qoplama va bog'lanadigan o'rnatish tavsifiga asoslanib, hech kim ajablanmaydi Linux konteynerlari ulardan faol foydalaniladi. Keling, biz foydalanganda nima bo'lishini ko'rib chiqaylik systemd-nspawn asbob yordamida konteynerni ishga tushirish uchun mountsnoop от bcc.

Qiyinchilik system-nspawn ishlayotgan vaqtda konteynerni ishga tushiradi mountsnoop.py.

Keling, nima bo'lganini ko'rib chiqaylik:

Ishga tushish mountsnoop konteyner "yuklash" paytida konteynerning ish vaqti bog'langan o'rnatishga juda bog'liqligini ko'rsatadi (Faqat uzun chiqishning boshlanishi ko'rsatilgan).

u systemd-nspawn ichida tanlangan fayllarni taqdim etadi procfs и sysfs xostni konteynerga yo'l sifatida rootfs. Tashqari MS_BIND bog'lovchi o'rnatishni o'rnatuvchi bayroq, tog'dagi ba'zi boshqa bayroqlar xost va konteyner nom maydonlariga o'zgartirishlar o'rtasidagi munosabatni belgilaydi. Masalan, bog'langan o'rnatish o'zgarishlarni o'tkazib yuborishi mumkin /proc и /sys konteynerga soling yoki qo'ng'iroqqa qarab ularni yashiring.

xulosa

Linuxning ichki ishini tushunish imkonsiz bo'lib tuyulishi mumkin, chunki yadroning o'zi juda ko'p kodni o'z ichiga oladi, Linux foydalanuvchi maydoni ilovalari va C kutubxonalarida tizim qo'ng'iroqlari interfeyslarini chetga surib qo'yadi. glibc. Taraqqiyotga erishishning usullaridan biri bu bitta yadro quyi tizimining manba kodini o'qish, asosiy e'tibor tizim chaqiruvlari va foydalanuvchi-bo'shliq sarlavhalarini, shuningdek, jadval kabi asosiy ichki yadro interfeyslarini tushunishdir. file_operations. Fayl operatsiyalari "hamma narsa fayl" tamoyilini ta'minlaydi, bu ularni boshqarishni ayniqsa yoqimli qiladi. Yuqori darajadagi katalogdagi C yadrosi manba fayllari fs/ mashhur fayl tizimlari va saqlash qurilmalari o'rtasida keng va nisbatan sodda muvofiqlikni ta'minlovchi o'rash qatlami bo'lgan virtual fayl tizimlarining amalga oshirilishini taqdim etadi. Linux nom maydonlari orqali bog'lash va o'rnatish VFS sehridir, bu faqat o'qish uchun konteynerlar va ildiz fayl tizimlarini yaratishga imkon beradi. Manba kodini, eBPF asosiy vositasini va uning interfeysini tekshirish bilan birgalikda bcc
yadro kashfiyoti har qachongidan ham oson.

Do'stlar, yozing, ushbu maqola siz uchun foydalimi? Ehtimol, sizda biron bir izoh yoki mulohaza bordir? Linux Administrator kursiga qiziquvchilar esa taklif etiladi ochiq kun, bu 18 aprel kuni bo'lib o'tadi.

Birinchi qism.

Manba: www.habr.com

a Izoh qo'shish