Linux əməliyyat sisteminin yüklənməsi, öz təcrübəmdən, sadə dildə izah edirəm
Linux adminləri üçün müsahibələrdə tez-tez verilən məşhur bir sual var:Linux-un boot prosesi necə işləyir?
Bu mövzu, əslində, çox praktikdir. Xüsusilə də VM miqrasiyası edəndə, server diskini dəyişəndə və ya sistem nəsə olub boot etməyəndə. Bu ardıcıllığı anlamadan problemi tapmaq çətin olur. Aşağıda mən bunu necə anlayıram və real işdə nələrlə qarşılaşmışam, onları danışacam.
BIOS və ya UEFI
Server və ya VM start aldığı anda idarəetmə ilk olaraq firmware-ə, yəni BIOS və ya UEFI-yə ötürülür
BIOS
MBR-i tapır, oradan da bootloader-i işə salır. Çox sadə mexanizmdir: MBR -> Bootloader -> Kernel.
UEFI
UEFI: müəyyən .efi fayllarını oxuyur, özündə boot entry-lər saxlayır və bu, həm rahatlıq yaradır, həm də bəzən problemlər.
Praktikadan bir nüans:
Bir hypervisor-dan digərinə VM köçürəndə, UEFI/BİOS fərqi çox zaman gözlənilməz xəta yaradır. VM əvvəlcə UEFI ilə yaradılıbsa, yeni hypervisor-da da eyni şəkildə konfiqurasiya etmək lazımdır. Dəfələrlə görmüşəm ki, disk sağlamdır, OS sağlamdır, amma UEFI mismatch olduğu üçün VM açılmır.
Sonra səhnəyə bootloader çıxır, adətən GRUB
Firmware işini bitirəndən sonra növbə bootloader-ə keçir. Linux sistemlərdə bunun 99%-i GRUB2 olur.
Nə iş görəcək:
- menyunu göstərmək
- kernel seçmək
- kernel və initramfs-i yaddaşa yükləmək
Bir dəfə GRUB yeni diski görmədiyi üçün sistemi yalnız manual şəkildə qaldıra bilmişdim.
RAID olan sistemlərdə vacib detal
Əgər mdadm RAID istifadə edirsinizsə, GRUB hər bir fiziki diskə ayrıca yazılmalıdır. RAID data-nı qoruyur, amma bootloader-i yox.
Bu səhvi yeni başlayanlar çox edir: bir disk ölür -> sistem boot etmir > "Axı RAID var?! " Cavab: GRUB RAID-in xaricindədir.
Kernel və initramfs: boot prosesinin ürəyi
Bootloader işi kernel-ə ötürəndə, əsas proses başlayır.
Kernel:
- hardware-i initialize edir
- initramfs-i RAM-a açır
- root filesystem-ə qədər olan bütün "keçid hissəsi" ni hazırlayır
[b]Bu, RAM-da yaşayan kiçik müvəqqəti mini-Linux-dur:
- disk controller driver-ləri
- LVM/RAID dəstəyi
- şəbəkə ilə boot üçün skriptlər
- fsck və digər utilitilə
Məsələn, kernel update zamanı sistem bir neçə saniyə "donur", bu, initramfs build prosesidir. Bu mərhələ yarımçıq qalsa, kernel-lə boot etmək mümkün olmur.
Bir dəfə serverdə kernel panic məhz yarımçıq initramfs səbəbindən olmuşdu, LiveCD ilə vəziyyəti düzəltmişdim.
Başqa klassik problem:
VM başqa hypervisor-a keçir -> yeni "hardware" -> initramfs-də uyğun driver yoxdur -> sistem açılmır. Çarə: initramfs-i yenidən build etmək.
PID 1 görünəndə, systemd start götürür
Initramfs işini bitirəndə əsas init prosesi (PID 1) işə düşür. Hal-hazırda əksər distrubutivlərdə bu systemd-dir.
Systemd:
- servisləri paralel işə salır
- fayl sistemlərini mount edir
- şəbəkəni qaldırır
- lazım olsa GUI və ya getty açır
Bütün prosesi qısa şəkildə resume etsək:
BIOS/UEFI -> Bootloader -> Kernel -> Initramfs -> Systemd -> Servislər -> Login
Nəticə
Boot prosesini başa düşmək, sırf müsahibə sualı deyil, gündəlik işin bir hissəsidir.
Ən çox problem çıxan yerlər:
- GRUB + RAID kombinasiyası
- initramfs-də çatışmayan driver-lər
- VM-lərdə UEFI/BİOS uyğunluğunun pozulması