مقدمة لعمليات التمهيد والإقلاع لـ kernel Linux

مرحبا بالجميع! لذا ، قمنا بافتتاح الدفق التالي ، الرابع على التوالي ، لدورة Linux Administrator ، التي تحتل بكل ثقة مكانها بجوار دورة devopersky. المزيد من المعلمين والمزيد من المعلومات والوقوف. حسنًا ، كما هو الحال دائمًا ، معلومات أكثر إثارة للاهتمام التقطها المعلمون.

دعنا نذهب.

هل سبق لك أن تساءلت عما يلزم لنظامك ليكون جاهزًا لتشغيل التطبيقات؟

من المهم فهم عمليات تحميل النواة وبدء نظام Linux لتكوين Linux وحل مشكلات بدء التشغيل. تقدم هذه المقالة نظرة عامة حول عملية تمهيد kernel باستخدام أداة تحميل التمهيد GRUB2 وبدء التشغيل الذي يعمل بنظام التهيئة systemd .

في الواقع ، هناك سلسلتان من الأحداث اللازمة لإدخال كمبيوتر Linux في حالة عمل: تمهيد kernel (تمهيد) وبدء تشغيل النظام (بدء التشغيل). تبدأ عملية تمهيد kernel عند تشغيل الكمبيوتر وتنتهي بتهيئة kernel وبدء تشغيل النظام d. بعد ذلك ، تبدأ عملية بدء النظام ، وهو الذي يجعل حاسوب لينكس في حالة عمل.



بشكل عام ، عملية تحميل النواة وبدء نظام لينكس بسيطة للغاية. وتتكون من الخطوات التالية ، والتي سيتم وصفها بمزيد من التفصيل في الأقسام أدناه:

  • وظيفة BIOS ؛
  • تحميل النواة (GRUB2) ؛
  • تهيئة النواة ؛
  • تشغيل systemd ، أصل كافة العمليات.

يرجى ملاحظة أن هذه المقالة تدور حول GRUB2 و systemd ، نظرًا لأنها محمل kernel وبرنامج التهيئة لمعظم التوزيعات. تم استخدام خيارات أخرى مسبقًا ، وفي بعض الأحيان لا يزال من الممكن العثور عليها في بعض التوزيعات.

عملية التمهيد Kernel

يمكن بدء عملية تمهيد النواة بعدة طرق. أولاً ، إذا تم إيقاف تشغيل الطاقة ، فسيبدأ تشغيل الكمبيوتر في عملية التمهيد. ثانيًا ، إذا كان مستخدم محلي يعمل بالفعل على جهاز الكمبيوتر ، بما في ذلك الجذر والمستخدم غير المحظوظ ، يمكن للمستخدم بدء عملية تمهيد kernel برمجيًا باستخدام واجهة المستخدم الرسومية أو سطر الأوامر لإعادة التشغيل. ستؤدي إعادة التشغيل إلى إيقاف تشغيل الكمبيوتر أولاً ثم إعادة تشغيله فقط.

وظيفة BIOS

الخطوة الأولى في عملية تمهيد نواة لينكس لا علاقة لها بنظام لينكس. هذا هو جزء الجهاز من العملية ، وهو نفس الشيء بالنسبة لجميع أنظمة التشغيل. عند توفير الطاقة للكمبيوتر ، فإن أول شيء يبدأ هو POST (Power On Self Test) ، وهو جزء من BIOS (نظام الإدخال / الإخراج الأساسي ، نظام الإدخال / الإخراج الأساسي).

عندما أطلقت شركة IBM أول حاسوب شخصي لها في عام 1981 ، تم تصميم BIOS لتهيئة مكونات الأجهزة. POST هو جزء من BIOS ، مهمته ضمان التشغيل الصحيح لمعدات الكمبيوتر. إذا فشلت وظيفة POST ، فقد يكون هناك خلل في جهاز الكمبيوتر ولن تستمر عملية التمهيد.

يتحقق BIOS POST من الأداء الأساسي للجهاز ، ثم يتسبب في مقاطعة BIOS - INT 13H ، التي تعثر على قطاعات التمهيد للنواة على جميع الأجهزة المتصلة مع إمكانية التمهيد. تم العثور على القطاع الأول ، الذي يحتوي على سجل تمهيد صالح ، في ذاكرة الوصول العشوائي ، وبعد ذلك يتم نقل عنصر التحكم إلى التعليمات البرمجية من قطاع التمهيد.
قطاع التمهيد هو المرحلة الأولى فقط. تستخدم معظم توزيعات Linux أحد خيارات برنامج bootloader الثلاثة: GRUB و GRUB2 و LILO. GRUB2 هو الأحدث ويستخدم الآن أكثر من الإصدارات القديمة.

GRUB2

يشير GRUB2 إلى "GRAND Unified Bootloader ، الإصدار 2" ، وهو الآن محمل التمهيد الرئيسي لمعظم توزيعات Linux الحديثة. GRUB2 هو برنامج يجعل الكمبيوتر ذكيًا بما يكفي حتى يتمكن من العثور على نواة نظام التشغيل وتحميله في الذاكرة. نظرًا لأن التحدث والكتابة فقط GRUB هو أسهل من GRUB2 ، فمن المحتمل أن أستخدم مصطلح GRUB في هذه المقالة ، ولكن ضمنيًا GRUB2 ما لم ينص على خلاف ذلك.

GRUB متوافق مع مواصفات التشغيل المتعدد ، والذي يسمح له بتحميل إصدارات مختلفة من Linux وأنظمة التشغيل الأخرى ؛ يمكنه أيضًا بدء سجل التمهيد لأنظمة التشغيل الخاصة في سلسلة.

يسمح GRUB أيضًا للمستخدم بالاختيار من بين العديد من تنزيلات kernel الممكنة لأي توزيع Linux متوفر. هذا يجعل من الممكن تنزيل الإصدار السابق من kernel إذا كان الإصدار المحدث لا يمكن التمهيد بشكل صحيح أو غير متوافق مع جزء هام من البرنامج. يمكن تكوين GRUB في ملف /boot/grub/grub.conf .

يعتبر GRUB1 الآن قديمًا وفي معظم التوزيعات الحديثة تم استبداله بـ GRUB2 ، وهو نسخته المعاد كتابتها. تمت ترقية التوزيعات المستندة إلى Red Hat إلى GRUB2 حول Fedora 15 و CentOS / RHEL 7. تتمتع GRUB2 بوظيفة التمهيد نفسها مثل GRUB1 ، ولكنها بالإضافة إلى ذلك توفر بيئات قائمة على أوامر تشبه الحواسيب المركزية وقبل نظام التشغيل والمزيد من المرونة في مرحلة ما قبل التمهيد. تم تكوين /boot/grub2/grub.cfg في /boot/grub2/grub.cfg .

المهمة الرئيسية لأي GRUB هي تحميل نواة Linux في الذاكرة وتشغيلها. يعمل كلا الإصدارين من GRUB بشكل مشابه في ثلاث مراحل ، ولكن في هذه المقالة سأستخدم GRUB2 لوصف كيفية عمل GRUB. تكوين GRUB و GRUB2 واستخدام أوامر GRUB2 خارج نطاق هذه المقالة.

على الرغم من أن GRUB2 رسميًا لا يستخدم ترقيم الخطوات ، من أجل الراحة ، سأستخدمه في هذه المقالة.

المرحلة 1

كما سبق ذكره في قسم POST BIOS ، في نهاية POST ، يبحث BIOS عن سجلات التمهيد على الأقراص المرفقة ، الموجودة عادةً في سجل التمهيد الرئيسي (MBR) ، وبعد ذلك يقوم بتحميل أول سجل يتم العثور عليه في الذاكرة ويبدأ في تنفيذه. يشغل رمز bootstrap ، أي المرحلة الأولى من GRUB2 ، مساحة صغيرة جدًا ، لأنه يجب أن يتناسب مع قطاع 512 بايت الأول على القرص الثابت مع جدول الأقسام. يبلغ إجمالي المساحة المخصصة لرمز التمهيد نفسه في MBR القياسي 446 بايت. يسمى ملف 446 بايت للمرحلة 1 باسم boot-img ولا يحتوي على جدول قسم - تتم إضافته إلى سجل التمهيد بشكل منفصل.

نظرًا لأن سجل التمهيد يجب أن يكون صغيرًا جدًا ، فهو ليس "ذكيًا" جدًا ولا يفهم بنية نظام الملفات. لذلك ، فإن الغرض الوحيد من الخطوة 1 هو الكشف عن الخطوة 1.5 وتحميلها. لتحقيق ذلك ، يجب وضع الخطوة 1.5 من GRUB في المسافة بين سجل التمهيد نفسه والقسم الأول على القرص. بعد تحميل المرحلة 1.5 GRUB إلى ذاكرة الوصول العشوائي (RAM) ، تتحكم المرحلة الأولى في عمليات النقل إلى المرحلة 1.5.

المرحلة 1.5

كما هو موضح أعلاه ، يجب أن تكون الخطوة 1.5 من GRUB بين سجل التمهيد والقسم الأول على القرص. تاريخيا ، لا تزال هذه المساحة غير مستخدمة لأسباب فنية. يبدأ القسم الأول على القرص الصلب في القطاع 63 ، ومع مراعاة MBR في القطاع 0 ، هناك 62 قطاعًا 512 بايت - 31744 بايت - يمكنك تخزين ملف core.img - 1.5 GRUB. يزن الملف core.img 25389 بايت ، وهي مساحة كافية لتخزينه بين MBR وقسم القرص الأول.

نظرًا لأنه يمكن استخدام المزيد من التعليمات البرمجية في الخطوة 1.5 ، فقد يكون كافيًا لاحتواء العديد من برامج تشغيل نظام الملفات الشائعة ، مثل EXT القياسي وأنظمة ملفات Linux الأخرى و FAT و NTFS. core.img في GRUB2 أكثر تعقيدًا ووظيفية من الخطوة 1.5 من GRUB1. هذا يعني أن المرحلة 2 من GRUB2 قد تكون موجودة في نظام ملفات EXT قياسي ، ولكن ليس في مجلد منطقي. لذلك ، فإن الموقع القياسي لملفات المرحلة 2 هو نظام الملفات /boot ، أو بالأحرى /boot/grub2 .

لاحظ أن دليل / boot يجب أن يكون موجودًا في نظام الملفات الذي يدعمه GRUB. ليس كل أنظمة الملفات لديها هذا الدعم. مهمة المرحلة 1.5 هي البدء ببرامج تشغيل نظام الملفات الضرورية للبحث عن ملفات المرحلة 2 في نظام الملفات / boot وتحميل برامج التشغيل اللازمة.

المرحلة 2

توجد جميع ملفات GRUB المرحلة 2 في الدليل /boot/grub2 والعديد من الأدلة الفرعية. لا يحتوي GRUB2 على ملف صورة كما هو الحال في الخطوتين 1 و 2. وبدلاً من ذلك ، فإنه يتكون في الغالب من وحدات نواة وقت التشغيل ، والتي يتم تحميلها من دليل /boot/grub2/i386-pc حسب الحاجة.

مهمة GRUB2 المرحلة 2 هي الكشف عن نواة لينكس وتحميلها في ذاكرة الوصول العشوائي ونقل التحكم في التحكم في الكمبيوتر إلى النواة. توجد النواة والملفات المرتبطة بها في الدليل /boot . من السهل التعرف على ملفات Kernel ، حيث تبدأ أسمائها بـ vmlinuz. يمكنك سرد محتويات الدليل /boot لرؤية kernels المثبتة حاليًا على نظامك.

يدعم GRUB2 ، مثل GRUB1 ، تحميل أحد نواة Linux العديدة. يدعم نظام إدارة حزم Red Hat تخزين إصدارات متعددة من kernel بحيث يمكنك تحميل الإصدار القديم من kernel في حالة حدوث مشاكل في الإصدار الأحدث. بشكل افتراضي ، يوفر GRUB قائمة محملة مسبقًا بنواة مثبتة ، بما في ذلك خيار الإنقاذ ، وبعد التكوين ، خيار الاسترداد.

تحمّل المرحلة 2 GRUB2 النواة المحددة في الذاكرة وتنقل التحكم في التحكم في الكمبيوتر إلى النواة.

النواة

جميع النوى بتنسيق مضغوط ذاتي الاستخراج لتوفير مساحة. توجد النواة في الدليل /boot مع صورة قرص ذاكرة الوصول العشوائي الأصلية وقائمة الأقسام الموجودة على الأقراص الصلبة.

بعد أن يتم تحميل النواة المحددة في الذاكرة ويبدأ تنفيذها ، أولاً ، يجب أن يستخرج نفسه من النسخة المضغوطة من الملف قبل البدء في القيام بعمل مفيد. بمجرد حدوث الاستخراج ، يتم تحميل systemd ، وهو بديل لبرنامج SysV init القديم ، وينقل التحكم إليه.

هذه هي نهاية عملية تمهيد kernel. في هذه المرحلة ، يعمل نواة Linux و systemd ، ولكن لا يمكنهما أداء أي مهام مفيدة للمستخدم النهائي ، حيث لا يوجد شيء آخر للقيام به.

عملية بدء تشغيل النظام

تتبع عملية بدء تشغيل النظام عملية تمهيد kernel وتعيد تشغيل كمبيوتر Linux.

systemd

systemd هو أصل جميع العمليات المسؤولة عن جلب مضيف Linux إلى حالة فعالة. بعض وظائفه ، الأكثر شمولاً من تلك المقدمة في برنامج التهيئة القديم ، يجب أن تدير العديد من جوانب مضيف Linux قيد التشغيل ، بما في ذلك تركيب نظام الملفات ، وبدء وإدارة خدمات النظام الضرورية لكي يعمل مضيف Linux بكفاءة. جميع مهام systemd التي لا تتعلق بعملية بدء تشغيل النظام تتجاوز نطاق المناقشة في هذه المقالة.

أولاً ، يقوم systemd بتثبيت أنظمة الملفات كما هو محدد في /etc/fstab ، بما في ذلك أي ملفات مبادلة وأقسام. في هذه المرحلة ، يمكنه الوصول إلى ملفات التكوين الموجودة في /etc ، بما في ذلك ملفاته الخاصة. ويستخدم ملف التكوين الخاص به /etc/systemd/system/default.target لتحديد الهدف الذي سيتم تحميل المضيف له. يعد ملف default.target مجرد ارتباط رمزي بالملف الهدف الحقيقي. بالنسبة لمحطة عمل سطح المكتب ، عادةً ما يكون هذا هدفًا بيانيًا ، أي ما يعادل مستوى التشغيل 5 في مُهيئ SystemV القديم. بالنسبة للخادم ، من المحتمل أن يكون الإعداد الافتراضي هو multi-user.target ، على غرار المستوى 3 في SystemV. هدف الطوارئ يشبه وضع المستخدم الواحد.

لاحظ أن الأهداف والخدمات هي وحدات systemd.

الجدول 1 أدناه هو مقارنة بين جميع أهداف systemd مع مستويات التشغيل القديمة في SystemV. يتم توفير الأسماء المستعارة المستهدفة Systemd بواسطة systemd للتوافق مع الإصدارات السابقة. تسمح الأسماء المستعارة الهدف للبرامج النصية - والعديد من مسؤول النظام ، بما في ذلك أنا - باستخدام أوامر SystemV مثل init3 لتغيير مستويات التنفيذ. بالطبع ، يتم توجيه أوامر SystemV بواسطة systemd للتفسير والتنفيذ.
مستوى التشغيل Systemvهدف systemdالأسماء المستعارة systemd المستهدفةالوصف
التوقفيوقف النظام دون فصل الطاقة
0poweroff.targetrunlevel0.targetيوقف النظام ويوقف الطاقة
قهدف الطوارئوضع مستخدم واحد. الخدمات لا تعمل ؛ لم يتم تحميل أنظمة الملفات. هذا هو المستوى الأساسي للعملية. لتفاعل المستخدم مع النظام ، يتم تشغيل غلاف الطوارئ فقط في وحدة التحكم الرئيسية.
1هدف الإنقاذrunlevel1.targetنظام القاعدة ، بما في ذلك تركيب نظام الملفات مع أبسط مجموعة من الخدمات وقذيفة الإنقاذ في وحدة التحكم الرئيسية.
2runlevel2.targetوضع Multiuser ، بدون NFS ، ولكن يتم تشغيل كافة الخدمات غير GUI.
3هدف متعدد المستخدمينrunlevel3.targetجميع الخدمات قيد التشغيل ، ولكن فقط من خلال واجهة سطر الأوامر (CLI).
4runlevel4.targetغير مستخدم.
5الهدفrunlevel5.targetوضع متعدد المستخدمين مع واجهة المستخدم الرسومية.
6reboot.targetrunlevel6.targetإعادة التشغيل
الهدف الافتراضييحتوي هذا الهدف دائمًا على ارتباط رمزي باستخدام هدف متعدد المستخدمين أو هدف رسومي. يستخدم systemd دائمًا default.target لبدء تشغيل النظام. لا يجب أن يتم ربط default.target مع halt.target أو poweroff.target أو reboot.target.

الجدول 1: مقارنة مستويات التحكم في SystemV مع أهداف النظام وبعض الأسماء المستعارة المستهدفة.

يحتوي كل هدف على مجموعة من التبعيات الموضحة في ملف التكوين. يدير systemd ما هو ضروري. هذه التبعيات هي الخدمات المطلوبة لتشغيل مضيف Linux بمستوى معين من الوظائف. عندما يتم تحميل جميع التبعيات المدرجة في ملفات التكوين الهدف وبدء تشغيلها ، يعمل النظام عند هذا المستوى الهدف.

يقوم systemd أيضًا بمسح أدلة تهيئة SystemV القديمة لملفات بدء التشغيل. إذا كانت كذلك ، يستخدمها systemd كملفات تكوين لتشغيل الخدمات الموضحة في الملفات. تعد خدمة الشبكة القديمة مثالاً جيدًا على تلك التي لا تزال تستخدم ملفات بدء تشغيل SystemV في Fedora.

يتم نسخ الشكل 1 أدناه مباشرة من الصفحة الرئيسية للتمهيد. ويبين التسلسل العام للأحداث خلال بداية النظام والمتطلبات الأساسية لضمان نجاحه.

يمكن اعتبار أهداف sysinit.target و basic.target نقطة تفتيش أثناء بدء تشغيل النظام. على الرغم من أن أحد أهداف النظام هو تشغيل خدمات النظام بالتوازي ، فهناك بعض الخدمات والأهداف الوظيفية التي يجب إطلاقها قبل غيرها. لا يمكن تمرير نقاط التحكم هذه حتى تكتمل جميع الخدمات والأهداف التي تحتاجها.

وبالتالي ، يتم تحقيق sysinit.target عند اكتمال جميع الوحدات التي تعتمد عليها. يجب إكمال جميع الوحدات التالية: تركيب أنظمة الملفات ، إعداد ملفات المبادلة ، بدء تشغيل udev ، تعيين الحالة الأولية لمولد الأرقام العشوائية ، تهيئة الخدمات ذات المستوى المنخفض ، إعداد خدمات التشفير إذا تم تشفير نظام ملفات واحد على الأقل. في sysinit.target يمكن تنفيذها بالتوازي.
تدير sysinit.target جميع الخدمات والوحدات ذات المستوى المنخفض اللازمة لأدنى وظائف النظام ، وتلك المطلوبة للانتقال إلى basic.target.


الشكل 1. الشكل 1. خريطة بدء التشغيل Systemd

بعد تنفيذ sysinit.target ، يقوم systemd بتشغيل basic.target ، بدءًا من جميع الوحدات اللازمة لتنفيذه. يوفر الهدف الأساسي وظائف إضافية من خلال إطلاق الوحدات اللازمة للهدف التالي ، بما في ذلك تعيين المسارات إلى العديد من الدلائل القابلة للتنفيذ ومآخذ التوصيل وأجهزة ضبط الوقت.

أخيرًا ، يمكنك البدء في تهيئة الأهداف على مستوى المستخدم: multi-user.target أو graphical.target. من الجدير بالذكر أنه يجب الوصول إلى الهدف متعدد المستخدمين قبل تنفيذ تبعيات الهدف الرسومي.

الأهداف التي تحتها خط في الشكل 1 هي أهداف بدء تشغيل نموذجية. يبدأ تشغيل النظام عند الوصول إلى أحدها. إذا كان multi-user.target هو الهدف الافتراضي ، فحينئذٍ سترى تسجيل الدخول في وضع النص في وحدة التحكم. إذا تم تحديد ملف رسم بياني افتراضيًا ، فسترى تسجيل دخول رسومي ؛ تعتمد واجهة المستخدم الرسومية لشاشة تسجيل الدخول على مدير الشاشة الذي تستخدمه.

المشاكل

اضطررت مؤخرًا إلى تغيير نواة التمهيد الافتراضية على كمبيوتر Linux يستخدم GRUB2. اكتشفت أن بعض الأوامر توقفت عن العمل بشكل صحيح ، أو استخدمتها بطريقة غير صحيحة. ما زلت لا أعرف ما هي المشكلة ، سيستغرق البحث عنها وقتًا أطول.

قام الأمر grub2-set-default بتكوين فهرس kernel الافتراضي بشكل غير صحيح في الملف /etc/default/grub ، لذلك لم يتم تحميل kernel البديل المطلوب. قمت بتغيير يدويًا /etc/default/grub GRUB_DEFAULT=saved في GRUB_DEFAULT=2 ، حيث 2 هو فهرس النواة المثبتة التي أردت تشغيلها. بعد ذلك ، قمت بتشغيل الأمر grub2-mkconfig > /boot/grub2/grub.cfg لإنشاء ملف تكوين grub جديد. نجحت هذه الخدعة وتم إطلاق نواة بديلة.

الاستنتاجات

GRUB2 ونظام التهيئة systemd مكونان رئيسيان لمراحل بدء تشغيل kernel وبدء تشغيل النظام لمعظم توزيعات Linux الحديثة. على الرغم من التناقضات ، خاصة حول systemd ، يعمل هذان المكونان معًا بشكل جيد لتحميل النواة وتشغيل جميع خدمات النظام اللازمة لإنشاء نظام Linux فعال.
على الرغم من أنني أعتبر GRUB2 و systemd ككل أكثر تعقيدًا من أسلافهما ، إلا أنهما ليسا أكثر صعوبة في إتقانهما وإدارتهما. تحتوي الكتيبات على الكثير من المعلومات حول systemd ، وعلى موقع freedesktop.org يتم تقديم قائمة صفحاته بالكامل. لمزيد من المعلومات ، راجع الروابط أدناه:



هذا كل شيء. نحن في انتظار الأسئلة والتعليقات هنا أو يمكن طرحها مباشرة في درس مفتوح .

Source: https://habr.com/ru/post/ar424761/


All Articles