LFCS: كيفية تكوين وحل مشاكل جهاز التمهيد الموحد الكبير (GRUB) – الجزء 13

بسبب التغييرات الأخيرة في أهداف امتحان شهادة LFCS الفعّالة ابتداءً من 2 فبراير 2016، نحن نضيف المواضيع اللازمة إلى سلسلة LFCS المنشورة هنا. للتحضير لهذا الامتحان، ننصحك بشدة بمتابعة سلسلة LFCE أيضًا.

LFCS: Configure and Troubleshoot Grub Boot Loader – Part 13

في هذه المقالة سنقدم لك GRUB ونشرح لماذا يعتبر محمل التمهيد ضروريًا، وكيف يضيف مرونة إلى النظام.

عملية تمهيد Linux من وقت الضغط على زر تشغيل الكمبيوتر حتى الحصول على نظام يعمل بشكل كامل تتبع هذا التسلسل على مستوى عالٍ:

  1. 1. يقوم عمل يعرف باسم POST (Power-On Self Test) بإجراء فحص شامل على مكونات الأجهزة في كمبيوترك.
  2. 2. عند اكتمال عملية POST، ينقل التحكم إلى محمل التمهيد، الذي بدوره يحمل نواة Linux في الذاكرة (بالإضافة إلى initramfs) وينفذها. أكثر محمل تمهيد استخدامًا في Linux هو GRand Unified Boot loader، أو GRUB للإختصار.
  3. 3. يقوم النواة بفحص والوصول إلى الأجهزة، ثم يقوم بتشغيل العملية الأولية (المعروفة بشكل عام بـ “init”) التي بدورها تكمل تشغيل النظام من خلال بدء الخدمات.

في الجزء 7 من هذه السلسلة (“SysVinit، Upstart، and Systemd”) قد قمنا بتقديم أنظمة إدارة الخدمات والأدوات المستخدمة في توزيعات لينكس الحديثة. قد ترغب في مراجعة تلك المقالة قبل المتابعة.

تقديم مشغل الإقلاع GRUB

يمكن العثور على نسختين رئيسيتين من GRUB (الإصدار v1 المعروف أحيانًا بـ GRUB Legacy والإصدار v2) في الأنظمة الحديثة، على الرغم من أن معظم التوزيعات تستخدم v2 كإصدار افتراضي في أحدث إصداراتها. تستخدم فقط Red Hat Enterprise Linux 6 ومشتقاتها الإصدار v1 حتى اليوم.

لذا، سنركز في هذا الدليل بشكل أساسي على ميزات v2.

بغض النظر عن إصدار GRUB، يسمح مشغل الإقلاع للمستخدم ب:

  1. 1). تعديل طريقة سلوك النظام عن طريق تحديد مشغلات النواة المختلفة للاستخدام،
  2. 2). اختيار بين أنظمة تشغيل بديلة للإقلاع، و
  3. 3). إضافة أو تعديل مقاطع التكوين لتغيير خيارات الإقلاع، وغير ذلك.

اليوم ، يتم الاعتناء بـ GRUB من قبل مشروع GNU ويتم وثائقته بشكل جيد في موقعهم على الويب. يُشجع على استخدام وثائق GNU الرسمية أثناء قراءة هذا الدليل.

عندما يقوم النظام بالتمهيد ، يتم عرض شاشة GRUB التالية في وحدة التحكم الرئيسية. في البداية ، يُطلب منك اختيار النوى البديلة (بشكل افتراضي ، سيقوم النظام بالتمهيد باستخدام أحدث نواة) ويُسمح لك بإدخال سطر أوامر GRUB (باستخدام c) أو تحرير خيارات التمهيد (من خلال الضغط على مفتاح e).

GRUB Boot Screen

أحد الأسباب التي قد تفكر في التمهيد باستخدام نواة أقدم هو جهاز هاردوير كان يعمل بشكل صحيح وبدأ في ” التصرف بشكل غير صحيح ” بعد الترقية (راجع هذا الرابط في منتديات AskUbuntu كمثال).

يتم قراءة تكوين GRUB v2 عند التمهيد من /boot/grub/grub.cfg أو /boot/grub2/grub.cfg ، بينما يتم استخدام /boot/grub/grub.conf أو /boot/grub/menu.lst في v1. لا ينبغي تحرير هذه الملفات يدويًا ، ولكن يتم تعديلها استنادًا إلى محتويات /etc/default/grub والملفات الموجودة داخل /etc/grub.d.

في CentOS 7 ، إليك ملف التكوين الذي يتم إنشاؤه عند تثبيت النظام لأول مرة:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

بالإضافة إلى الوثائق عبر الإنترنت، يمكنك أيضًا العثور على دليل GNU GRUB باستخدام معلومات كالتالي:

# info grub

إذا كنت مهتمًا بشكل خاص بالخيارات المتاحة لـ /etc/default/grub، يمكنك استدعاء القسم التكويني مباشرة:

# info -f grub -n 'Simple configuration'

باستخدام الأمر أعلاه ستكتشف أن GRUB_TIMEOUT يحدد الوقت بين لحظة ظهور الشاشة الأولية وبدء التمهيد التلقائي للنظام ما لم يتم تقطيعه من قبل المستخدم. عندما يتم تعيين هذه المتغيرة إلى -1، لن يتم بدء التمهيد حتى يقوم المستخدم بعمل اختيار.

عندما يتم تثبيت أنظمة تشغيل أو نوى متعددة على نفس الجهاز، يتطلب GRUB_DEFAULT قيمة صحيحة تشير إلى أي من دخول أنظمة التشغيل أو النوى في الشاشة الأولية لـ GRUB يجب تحديده بشكل افتراضي للتمهيد. يمكن عرض قائمة الدخولات ليس فقط في الشاشة الأولية المبينة أعلاه، ولكن أيضًا باستخدام الأمر التالي:

في CentOS و openSUSE:

# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg

في Ubuntu:

# awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

في المثال الموضح في الصورة أدناه، إذا أردنا التمهيد باستخدام إصدار النواة 3.10.0-123.el7.x86_64 (الدخول الرابع)، يجب علينا تعيين GRUB_DEFAULT إلى 3 (يتم ترقيم الدخولات داخليًا بدءًا من الصفر) على النحو التالي:

GRUB_DEFAULT=3
Boot System with Old Kernel Version

أحد المتغيرات النهائية في تكوين GRUB التي تثير اهتمامًا خاصًا هو GRUB_CMDLINE_LINUX، والتي تُستخدم لتمرير الخيارات إلى النواة. الخيارات التي يمكن تمريرها من خلال GRUB إلى النواة موثقة توثيقًا جيدًا في ملف معلمات النواة وفي man 7 bootparam.

الخيارات الحالية في خادم CentOS 7 الخاص بي هي:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"

لماذا ترغب في تعديل معلمات النواة الافتراضية أو تمرير خيارات إضافية؟ ببساطة، قد تكون هناك أوقات تحتاج فيها إلى إخبار النواة ببعض معلمات الأجهزة التي قد لا تكون قادرة على تحديدها بمفردها، أو تجاوز القيم التي ستكتشفها.

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

مثال آخر هو عندما تحتاج إلى جلب النظام إلى وضع المستخدم الفردي لأداء المهام الصيانية. يمكنك القيام بذلك عن طريق إضافة كلمة single إلى GRUB_CMDLINE_LINUX وإعادة التشغيل:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"

بعد تحرير /etc/default/grub، ستحتاج إلى تشغيل update-grub (Ubuntu) أو grub2-mkconfig -o /boot/grub2/grub.cfg (CentOS و openSUSE) بعد ذلك لتحديث grub.cfg (وإلا، ستفقد التغييرات عند التمهيد).

سيقوم هذا الأمر بمعالجة ملفات تكوين الإقلاع المذكورة سابقًا لتحديث grub.cfg. تضمن هذا الأسلوب أن التغييرات ستكون دائمة، في حين أن الخيارات الممررة من خلال GRUB أثناء تشغيل النظام ستستمر فقط خلال الجلسة الحالية.

إصلاح مشكلات GRUB في نظام Linux

إذا قمت بتثبيت نظام تشغيل ثانٍ أو إذا تلف ملف تكوين GRUB بسبب خطأ بشري، فهناك طرق يمكنك من خلالها إعادة النظام إلى الوضع الطبيعي وتمكينه من الإقلاع مرة أخرى.

في الشاشة الأولية، اضغط على c للحصول على سطر أوامر GRUB (تذكر أنه يمكنك أيضًا الضغط على e لتعديل خيارات الإقلاع الافتراضية)، واستخدم الأمر help لعرض الأوامر المتاحة في سطر الأوامر GRUB:

Fix Grub Configuration Issues in Linux

سنركز على ls، الذي سيقوم بسرد الأجهزة ونظم الملفات المثبتة، وسنقوم بفحص ما يجده. في الصورة أدناه، يمكننا رؤية وجود 4 أقراص صلبة (hd0 إلى hd3).

يبدو أن hd0 فقط تم تقسيمها (كما يظهر من msdos1 و msdos2، حيث 1 و 2 هما أرقام التقسيم و msdos هو نظام التقسيم).

لنقم الآن بفحص القسم الأول على hd0 (msdos1) لنرى ما إذا كنا نستطيع العثور على GRUB هناك. سيتيح لنا هذا النهج تشغيل Linux واستخدام أدوات عالية المستوى أخرى لإصلاح ملف التكوين أو إعادة تثبيت GRUB تمامًا إذا كان ذلك ضروريًا:

# ls (hd0,msdos1)/

كما نرى في المنطقة المظللة، وجدنا دليل grub2 في هذا القسم:

Find Grub Configuration

بمجرد التأكد من أن GRUB موجود في (hd0,msdos1), دعونا نخبر GRUB أين يمكنه العثور على ملف تكوينه ومن ثم نوجهه لمحاولة تشغيل قائمته:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal
Find and Launch Grub Menu

ثم في قائمة GRUB، اختر إدخالًا واضغط على Enter للتمهيد باستخدامه. بمجرد أن يتم تمهيد النظام يمكنك إصدار الأمر grub2-install /dev/sdX (قم بتغيير sdX بالجهاز الذي تريد تثبيت GRUB عليه). سيتم تحديث معلومات التمهيد ثم يتم استعادة جميع الملفات ذات الصلة.

# grub2-install /dev/sdX

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

الملخص

في هذه المقالة قدمنا لك GRUB، وأشرنا إلى أين يمكنك العثور على الوثائق سواء عبر الإنترنت أو دون اتصال، وشرحنا كيفية التعامل مع سيناريو حيث توقف النظام عن التمهيد بشكل صحيح بسبب مشكلة متعلقة ببرنامج التمهيد.

لحسن الحظ، GRUB هو أحد الأدوات التي تم وثائقتها بشكل جيد ويمكنك بسهولة العثور على المساعدة سواء في الوثائق المثبتة أو عبر الإنترنت باستخدام الموارد التي قمنا بمشاركتها في هذا المقال.

هل لديك أسئلة أو تعليقات؟ لا تتردد في إخبارنا باستخدام نموذج التعليق أدناه. نتطلع إلى سماع أفكارك!

Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/