Arch boot process (العربية)
من أجل إقلاع آرتش لينكس، يجب إعداد محمل إقلاع (Boot loader) قادر على تشغيل لينكس. محمل الإقلاع مسؤول عن تحميل النواة (kernel) وصورة initramfs قبل بدء عملية الإقلاع. تختلف هذه العملية بشكل كبير بين أنظمة BIOS وأنظمة UEFI.
أنواع البرامج الثابتة (Firmware)
البرنامج الثابت (Firmware) هو أول برنامج يتم تنفيذه بمجرد تشغيل الجهاز.
- غالباً ما تُستخدم كلمتي BIOS و UEFI بدلاً من كلمة البرامج الثابتة (firmware).
- لا تخلط بينها وبين البرامج الثابتة الخاصة بلينكس (Linux firmware) التي تخص عتاد الجهاز.
UEFI
تمتلك واجهة البرامج الثابتة الممتدة الموحدة (Unified Extensible Firmware Interface) دعماً لقراءة جدول الأقسام (partition table) بالإضافة إلى أنظمة الملفات. لا يقوم UEFI بتشغيل أي كود إقلاع من سجل الإقلاع الرئيسي (MBR) سواء كان موجوداً أم لا، بل يعتمد الإقلاع بدلاً من ذلك على إدخالات الإقلاع (boot entries) الموجودة في الذاكرة غير المتطايرة (NVRAM).
تلزم مواصفات UEFI بدعم أنظمة ملفات FAT12 و FAT16 و FAT32 (انظر مواصفات UEFI الإصدار 2.11، القسم 13.3.1.1)، ولكن يمكن لأي مُصنّع متوافق إضافة دعم لأنظمة ملفات إضافية اختيارياً؛ على سبيل المثال، HFS+ أو APFS في بعض البرامج الثابتة الخاصة بشركة آبل. تدعم تطبيقات UEFI أيضاً معيار ISO 9660 للأقراص الضوئية.
يقوم UEFI بتشغيل تطبيقات EFI، مثل محملات الإقلاع (boot loaders)، ومديري الإقلاع (boot managers)، و صدفة UEFI، وما إلى ذلك. تُخزن هذه التطبيقات عادةً كملفات في قسم نظام EFI. يمكن لكل مُصنّع تخزين ملفاته في قسم نظام EFI تحت مجلد /EFI/vendor_name. يمكن تشغيل التطبيقات عن طريق إضافة إدخال إقلاع إلى الـ NVRAM أو من خلال صدفة UEFI.
تحتوي مواصفات UEFI على دعم لإقلاع BIOS القديم (legacy) من خلال وحدة دعم التوافق (CSM). إذا تم تفعيل CSM في UEFI، سيقوم UEFI بتوليد إدخالات إقلاع CSM لجميع الأقراص. إذا تم اختيار إدخال إقلاع CSM للإقلاع منه، سيحاول CSM الخاص بـ UEFI الإقلاع من كود إقلاع MBR الخاص بالقرص.
BIOS
في معظم الحالات، يُخزن نظام الإدخال والإخراج الأساسي (BIOS) في ذاكرة وميضية (flash memory) على اللوحة الأم نفسها وهو مستقل عن وحدة تخزين النظام. تم إنشاؤه في الأصل لأجهزة IBM PC للتعامل مع تهيئة العتاد وعملية الإقلاع، وتم استبداله تدريجياً منذ عام 2010 بـ UEFI الذي لا يعاني من نفس القيود التقنية.
تهيئة النظام
عند تشغيل النظام، يتم تنفيذ الفحص الذاتي عند التشغيل (POST). انظر أيضاً المعالجات الحديثة تمتلك طاقم كواليس بقلم Hugo Landau.
UEFI
- بعد اختبار POST، يقوم UEFI بتهيئة العتاد اللازم للإقلاع (القرص، متحكمات لوحة المفاتيح، إلخ).
- يقرأ البرنامج الثابت إدخالات الإقلاع في الـ NVRAM لتحديد تطبيق EFI الذي يجب تشغيله ومن أين (أي من أي قرص وقسم).
- قد يكون إدخال الإقلاع ببساطة عبارة عن قرص. في هذه الحالة يبحث البرنامج الثابت عن قسم نظام EFI على ذلك القرص ويحاول العثور على تطبيق EFI في مسار الإقلاع الاحتياطي
\EFI\BOOT\BOOTx64.EFI(أوBOOTIA32.EFIعلى الأنظمة ذات UEFI بـ 32 بت IA32). هكذا تعمل وسائط النقل القابلة للإقلاع عبر UEFI.
- قد يكون إدخال الإقلاع ببساطة عبارة عن قرص. في هذه الحالة يبحث البرنامج الثابت عن قسم نظام EFI على ذلك القرص ويحاول العثور على تطبيق EFI في مسار الإقلاع الاحتياطي
- يقوم البرنامج الثابت بتشغيل تطبيق EFI.
- قد يكون هذا محمل إقلاع أو نواة آرتش نفسها باستخدام EFI boot stub.
- قد يكون تطبيق EFI آخر مثل صدفة UEFI أو مدير إقلاع مثل systemd-boot أو rEFInd.
إذا كان الإقلاع الآمن (Secure Boot) مفعلاً، فستتحقق عملية الإقلاع من موثوقية ملف EFI التنفيذي عن طريق التوقيع.
الإقلاع المتعدد (Multibooting)
بما أن كل نظام تشغيل أو مُصنّع يمكنه الاحتفاظ بملفاته الخاصة داخل قسم نظام EFI دون التأثير على الآخر، فإن الإقلاع المتعدد باستخدام UEFI هو ببساطة مسألة تشغيل تطبيق EFI مختلف يتوافق مع محمل إقلاع نظام التشغيل المعين. هذا يزيل الحاجة للاعتماد على آليات التحميل المتسلسل (chain loading) لمحمل إقلاع معين لتحميل نظام تشغيل آخر.
انظر أيضاً الإقلاع المزدوج مع ويندوز.
BIOS
- بعد اختبار POST، يقوم BIOS بتهيئة العتاد اللازم للإقلاع (القرص، متحكمات لوحة المفاتيح، إلخ).
- يقوم BIOS بتشغيل أول 440 بايت (منطقة كود الإقلاع في سجل الإقلاع الرئيسي MBR) من القرص الأول حسب ترتيب أقراص BIOS.
- تقوم المرحلة الأولى لمحمل الإقلاع في كود إقلاع MBR بتشغيل كود المرحلة الثانية (إن وُجد) من إما:
- قطاعات القرص التالية بعد الـ MBR، أي ما يسمى فجوة ما بعد الـ MBR (فقط على جدول أقسام MBR).
- قسم أو قرص بدون أقسام يحتوي على سجل إقلاع وحدة التخزين (VBR).
- بالنسبة لـ GRUB على قرص مقسم بنظام GPT — قسم إقلاع BIOS مخصص لـ GRUB (يُستخدم بدلاً من فجوة ما بعد الـ MBR التي لا توجد في نظام GPT).
- يتم تشغيل محمل الإقلاع الفعلي.
- يقوم محمل الإقلاع بعد ذلك بتحميل نظام التشغيل إما عن طريق التحميل المتسلسل (chain-loading) أو التحميل المباشر لنواة نظام التشغيل.
محمل الإقلاع
محمل الإقلاع (Boot loader) هو جزء من البرمجيات يبدأ تشغيله بواسطة البرنامج الثابت (Firmware) — سواء كان UEFI أو BIOS. وهو مسؤول عن تحميل النواة مع عوامل النواة المطلوبة وأي صور initramfs خارجية.
مدير الإقلاع (boot manager) يعرض قائمة بخيارات الإقلاع، أو يوفر طريقة أخرى للتحكم في عملية الإقلاع — أي أنه ببساطة يقوم بتشغيل ملفات EFI التنفيذية الأخرى.
في حالة UEFI، يمكن تشغيل النواة نفسها مباشرة بواسطة UEFI باستخدام EFI boot stub. ومع ذلك، لا يزال من الممكن استخدام محمل إقلاع أو مدير إقلاع منفصل بغرض تعديل عوامل النواة قبل الإقلاع.
الأنظمة التي تحتوي على UEFI بـ 32-بت IA32 تتطلب محمل إقلاع يدعم الإقلاع بالوضع المختلط (mixed mode booting).
/boot. هذا يعني أن محمل الإقلاع يجب أن يدعم كل شيء بدءاً من أجهزة الكتل (block devices)، أجهزة الكتل المكدسة (LVM، RAID، dm-crypt، LUKS، إلخ) وصولاً إلى نظام الملفات الذي توجد عليه النواة وصورة initramfs.
نظراً لأن معظم محملات الإقلاع تقريباً لا تدعم أجهزة الكتل المكدسة هذه، ولأن أنظمة الملفات قد تُدخل ميزات جديدة ربما لا تكون مدعومة بعد من قِبل أي محمل إقلاع (مثل archlinux/packaging/packages/grub#7، FS#79857، FS#59047، FS#58137، FS#51879، FS#46856، FS#38750، FS#21733 ومجلدات مشفرة بـ fscrypt)، فإن استخدام قسم /boot منفصل مع نظام ملفات مدعوم عالمياً، مثل FAT32، يكون في كثير من الأحيان الخيار الأفضل والعملي أكثر.
مقارنة الميزات
- بما أن GPT هو جزء من مواصفات UEFI، فإن جميع محملات إقلاع UEFI تدعم أقراص GPT. دعم GPT على أنظمة BIOS ممكن، باستخدام "الإقلاع الهجين" مع Hybrid MBR، أو بروتوكول GPT-only الجديد. قد يسبب هذا البروتوكول مشاكل مع بعض تطبيقات BIOS؛ راجع موقع rodsbooks للتفاصيل.
- بما أن الإقلاع الآمن (Secure Boot) هو جزء من مواصفات UEFI، فإن جميع محملات إقلاع UEFI تدعمه، على الرغم من أن بعضها لديه قيود.
| الاسم | البرنامج الثابت (Firmware) | جدول الأقسام | إقلاع متعدد | أنظمة الملفات | ملاحظات | ||
|---|---|---|---|---|---|---|---|
| BIOS | UEFI | MBR | GPT | ||||
| Clover | Yes | Yes | No | Yes | Yes | قابلة للتوسيع2,5 | يمكنه محاكاة UEFI على أنظمة BIOS القديمة. |
| EFI boot stub | – | Yes1 | Yes | Yes | – | موروثة من البرنامج الثابت2 | النواة هي ملف EFI تنفيذي صالح يمكن تشغيله مباشرة من UEFI أو من محمل إقلاع UEFI آخر. |
| GRUB | Yes | Yes3 | Yes | Yes | Yes | مدمجة | يدعم RAID، و LUKS (ولكن ليس Argon2 PBKDFs) و LVM (ولكن ليس thin provisioned volumes). انظر GRUB لقيود خاصة بالإعداد. |
| Limine | Yes | Yes3 | Yes | Yes | Yes | محدودة | |
| rEFInd | No | Yes | Yes | Yes | Yes4 | قابلة للتوسيع2,5 | يدعم الاكتشاف التلقائي للأنوية وعواملها دون إعدادات صريحة، ويدعم الإقلاع السريع (fastboot) [٢]. |
| Syslinux | Yes | جزئي1 | Yes | Yes | جزئي | محدودة | لا يدعم ميزات معينة لأنظمة الملفات. يمكنه فقط الوصول لنظام الملفات الذي تم تثبيته عليه. |
| systemd-boot | No | Yes3 | يدوي | Yes | Yes4 | قابلة للتوسيع2,5 | يمكنه تشغيل الملفات التنفيذية فقط من الـ ESP الذي تم تثبيته عليه أو من Extended Boot Loader Partition (قسم XBOOTLDR) على نفس القرص. يكتشف تلقائياً صور النواة الموحدة (UKI) الموجودة في esp/EFI/Linux/.
|
| صورة النواة الموحدة | – | Yes3 | Yes | Yes | – | موروثة من البرنامج الثابت2 | systemd-stub(7)، نواة، و initramfs، وسطر أوامر النواة معبأة في ملف EFI تنفيذي ليتم تحميله مباشرة من البرامج الثابتة لـ UEFI أو محمل إقلاع آخر. |
| GRUB Legacy | Yes | No | Yes | No | Yes | محدودة | توقف دعمه لصالح GRUB. |
| LILO | Yes | No | Yes | جزئي | Yes | محدودة | توقف دعمه بسبب القيود (مثل مع Btrfs، GPT، RAID، التشفير). |
- بالرغم من أنه يمكن توقيع الملف التنفيذي من أجل الإقلاع الآمن (Secure Boot)، إلا أنه لا يقوم بأي تحقق لاحق، مما يكسر سلسلة الثقة (chain of trust).
- دعم أنظمة الملفات موروث من البرنامج الثابت. مواصفات UEFI تلزم بدعم أنظمة ملفات FAT12 و FAT16 و FAT32 [٣]، ولكن يمكن للشركات المصنعة اختيارياً إضافة دعم لأنظمة ملفات إضافية؛ على سبيل المثال، البرامج الثابتة في أجهزة Mac من آبل تدعم نظام ملفات HFS+. إذا كان البرنامج الثابت يوفر واجهة لتحميل تعريفات UEFI عند بدء التشغيل، يمكن إضافة دعم لأنظمة ملفات إضافية عبر تحميل تعريفات أنظمة ملفات (يتم الحصول عليها بشكل مستقل).
- يدعم الإقلاع بالوضع المختلط (mixed mode booting). أي أنه يمكنه إقلاع نواة لينكس 64-بت x86_64 على UEFI بـ 32-بت IA32.
- مدير إقلاع (boot manager). يمكنه فقط تشغيل تطبيقات EFI الأخرى، على سبيل المثال، صور نواة لينكس المبنية بـ
CONFIG_EFI_STUB=yومدير إقلاع ويندوز Windows Boot Manager (وهوbootmgfw.efi). - يدعم تحميل تعريفات أنظمة ملفات UEFI.
انظر أيضاً مقارنة بين محملات الإقلاع.
النواة (Kernel)
يقوم محمل الإقلاع بتشغيل صورة vmlinux التي تحتوي على النواة.
تعمل النواة على مستوى منخفض (مساحة النواة - kernelspace) لتتفاعل بين عتاد الجهاز والبرامج. تقوم النواة في البداية بحصر العتاد وتهيئته قبل المتابعة إلى مساحة المستخدم (userspace). انظر النواة (نظام تشغيل) و نواة لينكس للحصول على شرح مفصل.
initramfs
صورة الـ initramfs (وهي اختصار لـ initial RAM file system - نظام ملفات الذاكرة العشوائية الأولي) هي أرشيف cpio يوفر الملفات الضرورية لـ مساحة المستخدم المبكرة (انظر أدناه) لبدء مساحة المستخدم المتأخرة بنجاح. وهذا يعني في الغالب توفير جميع وحدات النواة (kernel modules)، أدوات مساحة المستخدم، المكتبات المرتبطة بها، الملفات الداعمة مثل قواعد udev، إلخ.. اللازمة لتحديد موقع نظام ملفات الجذر والوصول إليه وتركيبه. من خلال مفهوم initramfs، يصبح من الممكن التعامل مع إعدادات أكثر تعقيداً، مثل الإقلاع من قرص خارجي، أجهزة مكدسة (الأقسام المنطقية LVM، مصفوفات RAID البرمجية، الضغط، التشفير) أو تشغيل خادم SSH صغير في مساحة المستخدم المبكرة لفك التشفير عن بُعد أو لمهام صيانة نظام ملفات الجذر.
سيتم تحميل غالبية وحدات النواة خلال المراحل اللاحقة من عملية init بواسطة udev بعد تبديل الجذر (switch root) إلى نظام ملفات الجذر الفعلي.
تسير العملية على النحو التالي:
- يبدأ نظام ملفات الجذر عند
/كـ rootfs فارغ، وهو حالة خاصة من tmpfs أو ramfs. هذا هو نظام ملفات الجذر المؤقت الذي سيتم فك ضغط صور initramfs إليه. - تفك النواة ضغط الـ initramfs المدمج (builtin) الخاص بها إلى الجذر المؤقت. تستخدم أنوية آرتش لينكس المدعومة رسمياً أرشيفاً فارغاً لـ initramfs المدمج، وهو الإعداد الافتراضي عند بناء لينكس.
- تفك النواة ضغط صور initramfs الخارجية بالترتيب المحدد عبر سطر الأوامر المُمرر بواسطة محمل الإقلاع، وتقوم بالكتابة فوق (overwriting) أي ملفات من initramfs المدمج أو الملفات التي فُكت مسبقاً. لاحظ أنه يمكن دمج عدة صور initramfs في ملف واحد وستقوم النواة بمعالجتها حسب ترتيبها في الملف.
- إذا كانت أول صورة initramfs غير مضغوطة، بعد فك ضغطها، ستبحث النواة عن تحديثات المايكروكود للمعالج وتحديثات جدول ACPI في
/kernel/x86/microcode/و/kernel/firmware/acpi/على التوالي. - بعد معالجة تحديثات مايكروكود المعالج وجدول ACPI، ستشرع النواة في فك ضغط باقي صور initramfs، إن وُجدت.
- إذا كانت أول صورة initramfs غير مضغوطة، بعد فك ضغطها، ستبحث النواة عن تحديثات المايكروكود للمعالج وتحديثات جدول ACPI في
صور Initramfs هي الطريقة المفضلة في آرتش لينكس لإعداد مساحة المستخدم المبكرة ويمكن توليدها باستخدام mkinitcpio، أو dracut، أو booster.
التشغيل بدون initramfs
منذ الإصدار 6.13.8 تمتلك الأنوية المدعومة رسمياً تعريفات مدمجة لـ Btrfs و Ext4 [٤].
هذا يجعل من الممكن للنواة استخدام قسم الجذر مع هذه الأنظمة للملفات مباشرةً وتحميل بقية الوحدات الخارجية اللازمة من هناك. بالرغم من ذلك، هناك بعض التفاصيل التي يجب وضعها في الاعتبار:
- لا يمكن استخدام التركيب التلقائي لأقسام GPT، لذلك عامل النواة
rootمطلوب دائماً. - تقتصر الأسماء الثابتة لأجهزة الكتل لعامل
rootعلىPARTUUIDوPARTLABELفقط [٥]. - خيارات التركيب لـ
rootflagsمحدودة، على سبيل المثال، خيارnoatimeلن يعمل [٦]. لتخفيف الآثار الجانبية المحتملة، يمكنك جعل التركيب الأولي للقراءة فقط باستخدامrootflags=ro. الخيارات المطلوبة يمكن تطبيقها لاحقاً عند إعادة التركيب (remount) عبر fstab. - استخدام systemd-gpt-auto-generator(8) غير مجدٍ بدون initramfs ولديه مشاكل [٧]، قم بتعطيله بضبط
systemd.gpt_auto=no.
شيء آخر تحتاجه فعلياً من أجل الـ initramfs هو التحميل المبكر للمايكروكود. ولكن ليس من الضروري بناء صورة كاملة لذلك، يوفر آرتش مايكروكود في ملفات initramfs منفصلة، والتي يمكن استخدامها بشكل مستقل.
إذا لم يتم توفير صورة initramfs، فإن النواة تحتوي دائماً على صورة فارغة للبدء منها [٨]. لذلك لا ينبغي أن تكون هناك مشكلات تتعلق بتثبيت (pinning) قسم الجذر [٩].
مساحة المستخدم المبكرة (Early userspace)
تحدث مرحلة مساحة المستخدم المبكرة، المعروفة أيضاً بمرحلة الـ initramfs، في rootfs يتكون من الملفات المقدمة بواسطة #initramfs. تبدأ مساحة المستخدم المبكرة عندما تقوم النواة بتنفيذ الملف الثنائي /init كعملية رقم PID 1.
وظيفة مساحة المستخدم المبكرة قابلة للتخصيص والإعداد، لكن غرضها الرئيسي هو تجهيز النظام لدرجة تمكنه من الوصول إلى نظام ملفات الجذر الفعلي. هذا يشمل:
- يقوم systemd-modules-load(8) بتحميل وحدات النواة، مثل أي وحدات لأجهزة الكتل اللازمة لتركيب نظام ملفات الجذر الحقيقي.
- إعداد مكدس التخزين (storage stack) الذي قد يوجد عليه نظام ملفات الجذر، مثلاً عبر dm-crypt، أو dm-verity، أو mdadm، أو LVM، أو systemd-repart، إلخ.
- التعامل مع فك تشفير نظام ملفات الجذر الحقيقي، إن وُجد.
- حل وربط الأسماء الثابتة لأجهزة الكتل بالأجهزة الفعلية من خلال udev.
- تحميل وحدة DRM، حيث أن البدء المبكر لـ KMS مفعل افتراضياً.
لاحظ أن مساحة المستخدم المبكرة تخدم أكثر من مجرد إعداد نظام ملفات الجذر. هناك مهام لا يمكن القيام بها إلا قبل تركيب نظام ملفات الجذر، مثل فحص الأقراص بـ fsck والاستئناف من وضع الإسبات (hibernation).
في المرحلة النهائية من مساحة المستخدم المبكرة، يتم تركيب الجذر الحقيقي في مسار /sysroot/ (في حال استخدام initramfs مبني على systemd) أو في /new_root/ (في حال استخدام initramfs مبني على busybox)، ثم يتم التبديل إليه باستخدام الأمر systemctl switch-root عند استخدام initramfs المبني على systemd أو switch_root(8) عند استخدام initramfs المبني على busybox. تبدأ مساحة المستخدم المتأخرة (late userspace) بتشغيل برنامج init من نظام ملفات الجذر الحقيقي.
مساحة المستخدم المتأخرة (Late userspace)
يتم تنفيذ بدء تشغيل مساحة المستخدم المتأخرة بواسطة عملية init. يستخدم آرتش رسمياً systemd الذي يُبنى على مفهوم الوحدات (units) والخدمات (services)، لكن الوظيفة الموضحة هنا تتداخل بشكل كبير مع أنظمة init الأخرى.
getty
تستدعي عملية init برنامج getty مرة واحدة لكل طرفية افتراضية (عادةً ما تكون ستة). يقوم getty بتهيئة كل طرفية وحمايتها من الوصول غير المصرح به. عندما يتم إدخال اسم المستخدم وكلمة المرور، يتحقق getty منهما مقابل ملفات /etc/passwd و /etc/shadow، ثم يستدعي login(1).
تسجيل الدخول (Login)
يبدأ برنامج تسجيل الدخول (login) جلسة للمستخدم عن طريق ضبط متغيرات البيئة وتشغيل الصدفة (shell) الخاصة بالمستخدم، بناءً على /etc/passwd. يعرض برنامج login محتويات ملف /etc/motd (رسالة اليوم) بعد تسجيل الدخول بنجاح، قبل تنفيذ صدفة تسجيل الدخول مباشرة. هذا مكان جيد لعرض شروط الخدمة الخاصة بك لتذكير المستخدمين بالسياسات المحلية أو أي شيء ترغب في إخبارهم به.
الصدفة (Shell)
بمجرد بدء صدفة المستخدم، فإنها عادةً ستقوم بتشغيل ملف إعدادات وقت التشغيل، مثل bashrc، قبل تقديم موجه الأوامر للمستخدم. إذا كان الحساب معداً لـ بدء تشغيل X عند تسجيل الدخول، سيقوم ملف إعدادات وقت التشغيل باستدعاء startx أو xinit. انتقل إلى قسم #الجلسة الرسومية (Xorg) للنهاية.
مدير العرض (Display manager)
بالإضافة إلى ذلك، يمكن إعداد init لبدء مدير عرض بدلاً من getty على طرفية افتراضية معينة. يتطلب هذا تفعيل ملف خدمة systemd الخاص به يدوياً. يقوم مدير العرض بعد ذلك ببدء جلسة رسومية.
الجلسة الرسومية (Xorg)
يقوم xinit بتشغيل ملف إعدادات وقت التشغيل xinitrc الخاص بالمستخدم، والذي يبدأ عادةً تشغيل مدير نوافذ أو بيئة سطح مكتب. عندما ينتهي المستخدم ويخرج، سيتم إنهاء كل من xinit و startx والصدفة وبرنامج تسجيل الدخول بهذا الترتيب، ليعود إلى getty أو مدير العرض.
انظر أيضاً
- عملية إقلاع لينكس
- نظرة داخل عملية إقلاع لينكس
- إدارة محملات إقلاع EFI للينكس - بقلم Rod Smith
- عملية إقلاع BIOS/MBR
- أقسام إقلاع لينكس وكيفية إعدادها - بقلم Lennart Poettering
- initramfs
- مساحة المستخدم المبكرة في آرتش لينكس
- ركن المبتدئين في النواة: initrd و initramfs
- bootup(7) (معظمه حول جزء مساحة المستخدم في systemd initramfs)