Kernel modullari
Linux kernel monolit bo'lsa-da, uning ko'p qismi — ayniqsa apparat drayverlari — alohida, kerak bo'lganda yuklanadigan modullar shaklida ishlaydi. Bu tufayli har bir mumkin bo'lgan qurilma uchun drayverni doim xotirada saqlash shart emas: modul faqat mos apparat topilganda yoki foydalanuvchi so'raganda yuklanadi.
Bu maqola boot jarayoni va GRUB davomi — kernel yuklangandan keyin uning ichki tarkibi qanday boshqarilishini ko'rsatadi.
O'quv maqsadlari
Maqolani tugatgach:
- kernel moduli nima ekanini va nega alohida fayl sifatida saqlanishini tushunasiz;
lsmodbilan joriy yuklangan modullar ro'yxatini o'qiy olasiz;modprobevainsmod/rmmodorasidagi farqni bilasiz;- modulni doimiy yuklash yoki bloklashni sozlay olasiz;
- modul bilan bog'liq muammoni
dmesgvamodinfoyordamida diagnostika qila olasiz.
Modul nima
Kernel moduli — .ko (kernel object) kengaytmali fayl bo'lib, kernelga ishlayotgan holatda qo'shilishi yoki undan olib tashlanishi mumkin. Tarmoq kartasi drayveri, fayl tizimi implementatsiyasi (masalan, vfat, nfs) yoki virtualizatsiya komponenti (kvm) — bularning aksariyati modul sifatida taqdim etiladi.
Bu buyruq joriy kernel versiyasi uchun mavjud modul fayllaridan bir nechtasini ko'rsatadi. $(uname -r) joriy ishlayotgan kernel versiyasini qaytaradi — modullar aynan shu versiyaga mos katalogda saqlanadi.
Yuklangan modullarni ko'rish
Namunaviy natija:
- Module — modul nomi;
- Size — xotirada egallagan joyi;
- Used by — modulga bog'liq bo'lgan boshqa modullar yoki jarayonlar soni va nomi.
fatustunidagi1 vfat—vfatmodulifatga bog'liq ekanini bildiradi, ya'nifatni avval olib tashlab bo'lmaydi.
Muayyan modul haqida batafsil:
modinfo modul fayli qayerdaligini, versiyasini, bog'liqliklarini va qo'llab-quvvatlanadigan parametrlarini ko'rsatadi — hech narsani yuklamaydi yoki o'zgartirmaydi, shuning uchun xavfsiz tekshiruv vositasi.
Modulni yuklash: modprobe vs insmod
| Buyruq | Nima qiladi | Bog'liqliklarni hisobga oladimi |
|---|---|---|
modprobe <nom> |
Modulni nomi bo'yicha topib yuklaydi | Ha — kerakli bog'liq modullarni ham avtomatik yuklaydi |
insmod <yo'l>.ko |
Aniq fayl yo'lidan modulni to'g'ridan-to'g'ri yuklaydi | Yo'q — bog'liq modul oldindan yuklanmagan bo'lsa xato beradi |
Amalda deyarli har doim modprobe ishlatiladi, chunki u /lib/modules/$(uname -r)/modules.dep faylidagi bog'liqlik ro'yxatiga qarab kerakli barcha modullarni to'g'ri tartibda yuklaydi.
insmod odatda faqat aniq bitta .ko faylni sinash kerak bo'lgan maxsus holatlarda (masalan, yangi drayverni test qilishda) ishlatiladi.
Modulni olib tashlash
yoki
modprobe -r modulni va unga endi hech kim muhtoj bo'lmagan bog'liq modullarni ham birga olib tashlashga urinadi. rmmod faqat ko'rsatilgan modulni olib tashlaydi.
Warning
Faol ishlatilayotgan modulni (masalan, mount qilingan fayl tizimi ishlatayotgan drayverni) olib tashlashga urinish "Module is in use" xatosini beradi yoki tizim barqarorligiga ta'sir qilishi mumkin. Avval lsmod dagi Used by ustunini tekshiring.
Modulni doimiy yuklash
Har bir boot vaqtida avtomatik yuklanishi kerak bo'lgan modul /etc/modules-load.d/ katalogidagi .conf faylga yoziladi:
Bu — bitta modul nomini o'z ichiga olgan oddiy matn fayli. systemd-modules-load xizmati boot vaqtida shu kataloglarni o'qib, ro'yxatdagi modullarni yuklaydi.
Modulni bloklash (blacklist)
Ma'lum bir modulning avtomatik yuklanishini oldini olish kerak bo'lsa (masalan, mos kelmaydigan drayver muammo yaratayotganda), blacklist mexanizmi ishlatiladi:
Danger
Blacklist qilish modulni kernel darajasida taqiqlaydi, lekin allaqachon yuklangan modulni darhol olib tashlamaydi — bu faqat keyingi yuklashlarga ta'sir qiladi. Video yoki tarmoq drayverini blacklist qilishdan oldin, buning oqibatini (masalan, konsolga kirish yo'qolishi) tushunib oling; production serverda bunday o'zgarishni faqat konsolga muqobil kirish yo'li (masalan, IPMI) mavjud bo'lganda sinab ko'ring.
O'zgarishdan keyin initramfs ni yangilash kerak bo'lishi mumkin (ba'zi modullar initramfs ichiga oldindan kiritilgan bo'ladi):
Modul bilan bog'liq muammoni diagnostika qilish
dmesg kernel xabarlar bufferini ko'rsatadi — modul yuklanishida xatolik yuz bersa (masalan, apparat topilmadi yoki versiya mos kelmadi), sabab odatda shu yerda ko'rinadi.
Muayyan modul haqidagi kernel xabarlarini filtrlash:
Ko'p uchraydigan xatolar
insmod bilan modprobe o'rniga foydalanish
insmod bog'liqliklarni hisobga olmaydi. Modul boshqa modulga tayansa, insmod "unknown symbol" xatosi bilan muvaffaqiyatsiz tugaydi. Oddiy holatlarda har doim modprobe ishlatilishi kerak.
Used by ustunini tekshirmasdan modulni olib tashlash
Boshqa modul yoki faol mount unga bog'liq bo'lsa, olib tashlash xato beradi yoki, ba'zi hollarda, kutilmagan xatti-harakatga olib kelishi mumkin.
Blacklist qilingandan keyin modul hamon yuklanib turishi
Modul allaqachon initramfs ichiga kiritilgan bo'lishi mumkin. Bunday holatda faqat /etc/modprobe.d/ ga yozish yetarli emas — update-initramfs -u ham kerak.
Amaliy mashqlar
lsmodnatijasidan uchta modulni tanlang va har biri uchunmodinfobilan tavsifi va bog'liqliklarini toping.- Disposable VM'da zararsiz modulni (masalan,
vfat)modprobe -rbilan olib tashlang,lsmodbilan tasdiqlang, so'ng qaytamodprobebilan yuklang. /etc/modules-load.d/ichida shu modul uchun doimiy yuklash faylini yarating va reboot'dan so'nglsmodbilan tekshiring (faqat test VM'da).dmesgchiqishida "module" so'zi bilan bog'liq oxirgi xabarlarni toping va ular qaysi modulga tegishli ekanini aniqlang.
Xulosa
Kernel modullari drayver va fayl tizimi kabi funksionallikni kernelga ishlayotgan holatda qo'shish yoki olib tashlash imkonini beradi. lsmod joriy holatni, modinfo modul haqidagi ma'lumotni ko'rsatadi; modprobe bog'liqliklarni hisobga olib yuklaydi/olib tashlaydi, insmod/rmmod esa aniq faylga to'g'ridan-to'g'ri ishlaydi. Doimiy yuklash /etc/modules-load.d/, bloklash esa /etc/modprobe.d/ orqali sozlanadi. Tizim yuklanishi bilan bog'liq jiddiyroq muammolar uchun keyingi rescue va emergency mode maqolasiga qarang.