رحلة الإقلاع (The Boot Process): من BIOS/UEFI إلى الـ Kernel وصولاً إلى الـ Target


يا هلا بالشباب! اليوم بنغوص في أعماق رحلة الإقلاع (Boot Process) لنظام Linux. من اللحظة اللي تضغط فيها زر التشغيل، لين ما تشوف شاشة تسجيل الدخول، فيه عالم كامل من الأحداث يصير تحت الكواليس. يلا نبدأ!

1. BIOS/UEFI: الشرارة الأولى

كل شيء يبدأ من هنا. لما تشغل الجهاز، أول شيء يشتغل هو الـ BIOS (Basic Input/Output System) أو الـ UEFI (Unified Extensible Firmware Interface) الحديث. هذولي يعتبرون "البرنامج الأول" اللي يشتغل على جهازك.

  • POST (Power-On Self-Test): أول خطوة هي فحص ذاتي للأجهزة. يتأكد إن الرام، الكيبورد، كرت الشاشة، وكل المكونات الأساسية شغالة صح. لو فيه مشكلة، ممكن تسمع صفارات أو تشوف رسالة خطأ.
  • Boot Device Selection: بعد الـ POST، الـ BIOS/UEFI يدور على جهاز إقلاع (Boot Device) حسب الترتيب اللي أنت محدده في إعداداته (عادةً الهارد ديسك، USB، أو الشبكة). لما يلقى الجهاز، يروح يدور على برنامج الإقلاع (Bootloader).
الفرق الأساسي: الـ BIOS قديم ومحدود (16-bit، MBR، 2TB حد أقصى للقرص)، الـ UEFI أحدث وأقوى (32/64-bit، GPT، Secure Boot، سرعة إقلاع أفضل).

2. Bootloader (GRUB2): قائد الأوركسترا

بعد ما الـ BIOS/UEFI يحدد قرص الإقلاع، يسلم التحكم لأول قطاع في القرص، وهو عادةً الـ MBR (Master Boot Record) أو الـ GPT (GUID Partition Table). هنا يجي دور الـ Bootloader، وأشهر واحد في Linux هو GRUB2 (GRand Unified Bootloader version 2).

  • GRUB Stage 1 (MBR/GPT): جزء صغير جداً من الكود موجود في الـ MBR (أول 512 بايت) أو في الـ ESP (EFI System Partition) لو كان UEFI. وظيفته الوحيدة هي إنه يعرف وين يلقى الجزء اللي بعده من GRUB.
  • GRUB Stage 1.5 (Core Image): هذا الجزء موجود بعد الـ MBR مباشرة (في المساحة بين الـ MBR وأول بارتشن) أو داخل الـ ESP. هو أكبر شوي ويحتوي على درايفرات بسيطة عشان يقدر يقرأ أنظمة الملفات زي ext4 ويقدر يوصل لملفات GRUB الكبيرة.
  • GRUB Stage 2 (Main Components): هذا هو الجزء الأكبر والأهم، موجود في مجلد /boot/grub/ أو /boot/efi/EFI/grub/ ويحتوي على كل الخيارات اللي تشوفها في قائمة GRUB (مثل اختيار نظام تشغيل، أو خيارات الإقلاع المتقدمة). هو اللي بيقوم بالآتي:
    • يقرأ ملف الإعدادات grub.cfg.
    • يعرض لك قائمة أنظمة التشغيل (لو عندك ويندوز ولينكس مثلاً).
    • يحمل صورة الـ Kernel (النواة) وملف الـ initramfs (أو initrd).
لو ما ظهرت لك قائمة GRUB، هذا يعني إن GRUB مبرمج إنه يقلع على طول للنظام الافتراضي. تقدر تعدل هذا السلوك في ملف grub.cfg أو عن طريق الأمر grub-mkconfig.

مثال على أمر تحديث GRUB بعد تعديل:

sudo update-grub
# أو في بعض التوزيعات:
sudo grub-mkconfig -o /boot/grub/grub.cfg

3. Kernel: قلب النظام ينبض

بعد ما GRUB يحمل الـ Kernel والـ initramfs في الذاكرة (RAM)، يسلم التحكم للـ Kernel. وهنا تبدأ الحياة الحقيقية للنظام:

  • Decompression: معظم صور الـ Kernel تكون مضغوطة. أول خطوة هي فك ضغطها.
  • Hardware Initialization: الـ Kernel يبدأ يتعرف على كل قطعة هاردوير في جهازك (المعالج، الذاكرة، أجهزة الـ USB، كروت الشبكة، إلخ) ويشغل الدرايفرات الأساسية لها.
  • Process 1 (init): الـ Kernel يشغل أول عملية في النظام، وهي عملية الـ init (أو systemd في معظم التوزيعات الحديثة). هذي العملية رقمها 1 (PID 1) وهي أم كل العمليات الأخرى.
  • Mount Root Filesystem (Temporarily): الـ Kernel ما يقدر يوصل لملفات نظام التشغيل الكاملة مباشرة، لأنه ما عنده كل الدرايفرات اللازمة. هنا يجي دور الـ initramfs.
الـ Kernel هو العقل المدبر لنظام التشغيل. هو اللي يدير الموارد، ينظم الوصول للهاردوير، ويتحكم في كل العمليات.

4. Initramfs/Initrd: البيئة البدائية

الـ initramfs (initial RAM filesystem) أو الـ initrd (initial RAM disk) هو نظام ملفات مؤقت وصغير جداً يتم تحميله في الذاكرة بواسطة GRUB مع الـ Kernel. وظيفته الأساسية هي توفير بيئة عمل بدائية للـ Kernel عشان يقدر يسوي الآتي:

  • Load Essential Modules: يحمل الدرايفرات الضرورية جداً عشان يقدر يوصل للهارد ديسك اللي عليه نظام الملفات الجذري (root filesystem) الحقيقي. مثلاً، درايفرات الـ SATA، SCSI، أو RAID.
  • Detect Hardware: يتعرف على الهاردوير اللي تحتاج درايفرات خاصة عشان تقدر توصل للقرص.
  • Prepare for Root Filesystem: بعد ما يحمل الدرايفرات المطلوبة، يسوي فحص لنظام الملفات الجذري الحقيقي (مثلاً /dev/sda1) ويتأكد إنه سليم.
  • Switch Root: بمجرد ما يصبح نظام الملفات الجذري الحقيقي جاهزاً ومثبتاً، الـ init يقوم بعملية "التبديل الجذري" (pivot_root أو switch_root). هنا يتم إزالة الـ initramfs من الذاكرة ويتم تسليم التحكم لنظام الملفات الجذري الحقيقي.

تقدر تشوف محتويات الـ initramfs:

ls -lh /boot/initramfs-*
# لفك الضغط واستكشاف المحتوى (مثال):
mkdir /tmp/initramfs_content
cd /tmp/initramfs_content
cp /boot/initramfs-$(uname -r).img .
mv initramfs-$(uname -r).img initramfs.gz
gunzip initramfs.gz
cpio -id < initramfs

5. Systemd (أو SysVinit): الانطلاق إلى الهدف

بعد عملية الـ "Switch Root"، الـ Kernel يشغل عملية الـ init مرة أخرى، لكن هالمرة من نظام الملفات الجذري الحقيقي. في معظم التوزيعات الحديثة، هذي العملية هي systemd.

  • PID 1: الـ systemd هو العملية رقم 1 (PID 1) وهو "الأب" لكل العمليات الأخرى في النظام.
  • Read Configuration: يقرأ ملفات الإعدادات الخاصة بالخدمات والوحدات (units) من /etc/systemd/system/ ومسارات أخرى.
  • Start Services: يبدأ بتشغيل الخدمات الضرورية (مثل الشبكة، تسجيل الدخول، الخادمات، إلخ) بناءً على التبعيات والترتيب المحدد.
  • Target/Runlevel: في الأنظمة الحديثة اللي تستخدم systemd، يتم استخدام مفهوم الـ Targets بدلاً من الـ Runlevels القديمة في SysVinit. الـ Target هو مجموعة من الخدمات والوحدات اللي لازم تشتغل عشان توصل لحالة معينة للنظام.
    • multi-user.target: وضع سطر الأوامر (بدون واجهة رسومية).
    • graphical.target: وضع الواجهة الرسومية (سطح المكتب).
    • rescue.target: وضع الإنقاذ.
    • reboot.target: لإعادة التشغيل.
    • poweroff.target: لإيقاف التشغيل.
    الهدف الافتراضي عادةً ما يكون graphical.target (لأنظمة سطح المكتب) أو multi-user.target (للخوادم).

تغيير الهدف الافتراضي أو التحقق منه:

systemctl get-default
sudo systemctl set-default multi-user.target

مشاهدة الخدمات التي يتم تشغيلها:

systemctl list-units --type=service --state=running

الخلاصة

رحلة الإقلاع تبدأ من الهاردوير (BIOS/UEFI)، تنتقل للـ Bootloader (GRUB2) اللي يحمل الـ Kernel والـ initramfs، بعدها الـ Kernel يبدأ يشتغل ويستخدم الـ initramfs كبيئة مؤقتة لين يوصل لنظام الملفات الجذري الحقيقي، وأخيراً الـ init system (systemd) يتولى زمام الأمور ويشغل كل الخدمات المطلوبة لين يوصلك لشاشة تسجيل الدخول أو بيئة العمل اللي أنت محتاجها.

فهم هذه العملية بيساعدك كثير في استكشاف الأخطاء وإصلاحها (Troubleshooting) لما تواجه مشاكل في الإقلاع. بالتوفيق!