Kernel modullari
Linux kerneli monolit bo'lsa ham, uning katta qismi — ayniqsa uskuna drayverlari — faqat kerak bo'lganda yuklanadigan alohida bo'laklar sifatida qurilgan. Bu kernel har qanday tasavvur qilinadigan qurilma uchun drayverni doim xotirada saqlab turishi shart emasligini anglatadi: modul faqat mos uskuna aniqlanganda yoki foydalanuvchi yoxud boshqa modul uni aniq so'raganda yuklanadi.
Bu maqola to'g'ridan-to'g'ri Boot jarayoni va GRUB maqolasining davomi: kernel ishga tushgach, uning ichki, almashtirsa bo'ladigan bo'laklari aynan shunday boshqariladi.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
- kernel moduli nima ekanini va nega u umuman alohida fayl sifatida mavjudligini tushuntirish;
- hozir yuklangan modullar ro'yxatini
lsmodbilan o'qish; modprobevainsmod/rmmodo'rtasidagi farqni tushuntirish;- modulni har bir boot’da avtomatik yuklanadigan qilib sozlash yoki uning yuklanishini butunlay to'sib qo'yish;
- modul bilan bog'liq muammoni
dmesgvamodinfoyordamida aniqlash.
Modul nima
Kernel moduli — ishlab turgan kernelga qo'shish yoki undan olib tashlash mumkin bo'lgan, .ko (kernel object) kengaytmali fayl. Tarmoq kartasi drayverlari, fayl tizimlari implementatsiyalari (vfat, nfs) va virtualizatsiya komponentlari (kvm) deyarli hammasi to'g'ridan-to'g'ri kernel image’iga kompilyatsiya qilingan kod sifatida emas, aynan shu yo'l bilan — modul sifatida yetkaziladi.
Bu hozir ishlab turgan kernel uchun mavjud modul fayllaridan bir nechtasini ro'yxatlaydi. $(uname -r) ishlab turgan kernel versiyasi qatoriga aylanadi — modullar aynan shu versiyaga bog'langan katalogda saqlanadi, chunki bitta kernel versiyasi uchun yig'ilgan modul odatda boshqa versiyaga yuklanmaydi.
Yuklangan modullarni ko'rish
Namunaviy chiqish:
- Module — modul nomi;
- Size — u hozir qancha xotira egallayotgani;
- Used by — unga bog'liq boshqa modullar yoki jarayonlar soni va nomlari.
fatuchun ko'rsatilgan1 vfatvfatmodulifatga bog'liqligini bildiradi, shuning uchunvfatyuklangan ekan,fatni olib tashlab bo'lmaydi.
Muayyan modul haqida batafsil ma’lumot olish uchun:
modinfo modul faylining joylashuvi, versiyasi, bog'liqliklari va qo'llab-quvvatlanadigan parametrlari haqida xabar beradi. U hech narsani yuklamaydi va o'zgartirmaydi, shuning uchun modulga tegishdan oldin uni ko'zdan kechirishning xavfsiz usuli.
Modulni yuklash: modprobe va insmod
| Buyruq | Nima qiladi | Bog'liqliklarni hal qiladimi |
|---|---|---|
modprobe <name> |
Modulni nomi bo'yicha topadi va yuklaydi | Ha — o'zi bog'liq bo'lgan har qanday modulni avval avtomatik yuklaydi |
insmod <path>.ko |
Modulni aniq ko'rsatilgan fayl yo'lidan to'g'ridan-to'g'ri yuklaydi | Yo'q — bog'liqlik oldindan yuklanmagan bo'lsa, xato beradi |
Amalda deyarli faqat modprobe ishlatiladi, chunki u /lib/modules/$(uname -r)/modules.dep dagi bog'liqliklar ro'yxatiga murojaat qiladi va kerakli har bir modulni to'g'ri tartibda avtomatik yuklaydi.
insmod asosan maxsus holatlar uchun qoldirilgan — masalan, yangi drayverni ishlab chiqish yoki debug qilishda bitta .ko faylni to'g'ridan-to'g'ri sinab ko'rish uchun.
Modulni olib tashlash
yoki
modprobe -r modulni va endi hech narsaga kerak bo'lmagan bog'liq modullarni birga olib tashlashga urinadi. rmmod esa faqat nomlangan modulni olib tashlaydi, boshqa hech narsani emas.
Warning
Faol ishlatilayotgan modulni — masalan, hozir mount qilingan fayl tizimi ortidagi drayverni — olib tashlashga urinish "Module is in use" xatosini beradi yoki ayrim hollarda tizim barqarorligiga ta’sir qilishi mumkin. Avval lsmod dagi Used by ustunini tekshiring.
Modulni boot paytida avtomatik yuklash
Har bir boot’da avtomatik yuklanishi kerak bo'lgan modul /etc/modules-load.d/ ostidagi .conf faylda ko'rsatiladi:
Bu bitta modul nomini o'z ichiga olgan oddiy matn fayli. systemd-modules-load xizmati boot paytida shu kataloglarni o'qiydi va u yerda ko'rsatilgan hamma narsani yuklaydi.
Modulga parametr berish
Ko'p modullar o'z xatti-harakatini o'zgartiradigan sozlamalarni qabul qiladi — modinfo -p <name> muayyan modul qo'llab-quvvatlaydigan parametrlarni ro'yxatlaydi. Parametrni joriy yuklash uchun to'g'ridan-to'g'ri modprobe buyruq qatorida o'rnatish mumkin:
Parametrni doimiy qilish uchun uni /etc/modprobe.d/ ostidagi options qatoriga yozing:
Yuklangan modul uchun haqiqatan amal qilayotgan qiymatni sysfs’dan o'qish mumkin:
Warning
modprobe <module> param=value faqat modul hali yuklanmagan bo'lsa kuchga kiradi — modul allaqachon mavjud bo'lsa, modprobe hech narsa qilmaydi va parametr indamay e’tiborsiz qoldiriladi. Yuklangan modulning parametrini o'zgartirish uchun uni olib tashlab, qayta yuklang (modprobe -r, so'ng modprobe). initramfs ichiga joylangan modul uchun esa options qatorini yozing va boot paytida modul yuklanishidan oldin qiymat joyida bo'lishi uchun update-initramfs -u bilan qayta yig'ing.
Modulni to'sib qo'yish (blacklist)
Ba’zan muayyan modulning avtomatik yuklanishiga yo'l qo'ymaslik kerak bo'ladi — masalan, mos kelmaydigan drayver muammo tug'dirayotganda. Blacklist mexanizmi aynan shu uchun:
Danger
Blacklist modulning bundan keyin avtomatik yuklanishini to'xtatadi, lekin ayni paytda allaqachon yuklangan modulni olib tashlamaydi — u faqat kelajakdagi yuklashlarga ta’sir qiladi. Video yoki tarmoq drayverini blacklist qilishdan oldin oqibatlarini (masalan, konsolga kirish imkonini yo'qotish) tushunib oling; production serverda bunday o'zgarishni faqat muqobil konsol yo'li (masalan, IPMI) mavjud bo'lganda sinab ko'ring.
Blacklist ba’zan initramfs’ni ham yangilashni talab qiladi, chunki ayrim modullar to'g'ridan-to'g'ri uning ichiga joylangan:
Modul muammosini aniqlash
dmesg kernelning xabarlar halqa buferini (ring buffer) ko'rsatadi — agar modulni yuklash muvaffaqiyatsiz bo'lsa (uskuna yo'q, versiya mos kelmaydi), sababi odatda shu yerda ko'rinadi.
Muayyan modulga oid kernel xabarlarini filtrlash:
Keng tarqalgan xatolar
modprobe o'rniga insmod ishlatish
insmod bog'liqliklarni hal qilmaydi. Agar modul oldindan yuklanmagan boshqa modulga bog'liq bo'lsa, insmod "unknown symbol" xatosi bilan yiqiladi. Oddiy ishlatish uchun doim modprobe sukut bo'yicha tanlov bo'lishi kerak.
Used by ni tekshirmasdan modulni olib tashlash
Agar boshqa modul yoki faol mount unga bog'liq bo'lsa, olib tashlash yo butunlay muvaffaqiyatsiz bo'ladi yoki ayrim hollarda kutilmagan xatti-harakatga olib keladi.
Blacklist qilingan modulning baribir yuklanishi
Modul allaqachon initramfs ichiga joylangan bo'lishi mumkin. Bunday holatda faqat /etc/modprobe.d/ ga yozish yetarli emas — update-initramfs -u ham kerak.
Mashqlar
lsmodchiqishidan uchta modulni tanlang vamodinfoyordamida har birining tavsifi va bog'liqliklarini aniqlang.- O'chirib tashlasa bo'ladigan VM’da zararsiz modulni (masalan,
vfat)modprobe -rbilan olib tashlang,lsmodbilan tasdiqlang, so'ngmodprobebilan qayta yuklang. - O'sha modul uchun
/etc/modules-load.d/ostida doimiy yuklash faylini yarating va qayta yuklashdan keyinlsmodbilan tasdiqlang (faqat sinov VM’ida). dmesgchiqishidan "module" so'zi tilga olingan so'nggi xabarlarni qidiring va har biri qaysi modulga tegishli ekanini aniqlang.
Mashqni bajardim deyish uchun: hozir lsmod da turgan istalgan modul uchun uni olib tashlashdan oldin nimani tekshirish kerakligini tushuntira olishingiz kerak.
Xulosa
Kernel modullari drayverlar va fayl tizimlarini qo'llab-quvvatlash kabi imkoniyatlarni ishlab turgan kernelga qo'shish yoki undan olib tashlash imkonini beradi. lsmod joriy holatni, modinfo esa muayyan modul haqida tafsilotlarni ko'rsatadi; modprobe bog'liqliklarni hal qilgan holda modullarni yuklaydi yoki olib tashlaydi, insmod/rmmod esa to'g'ridan-to'g'ri aniq fayl ustida ishlaydi. Avtomatik yuklash /etc/modules-load.d/ orqali, to'sib qo'yish esa /etc/modprobe.d/ orqali sozlanadi. Boot bilan bog'liq chuqurroq nosozliklar uchun keyingi tegishli maqola — Rescue va emergency mode.