LFCS: Τρόπος ρύθμισης παραμέτρων και αντιμετώπισης προβλημάτων Grand Unified Bootloader (GRUB) - Μέρος 13


Λόγω των πρόσφατων αλλαγών στους στόχους της εξέτασης πιστοποίησης LFCS που ισχύουν από τις 2 Φεβρουαρίου 2016, προσθέτουμε τα απαραίτητα θέματα στη σειρά LFCS που δημοσιεύεται εδώ. Για να προετοιμαστείτε για αυτήν την εξέταση, ενθαρρύνεστε ιδιαίτερα να ακολουθήσετε και τη σειρά LFCE.

Σε αυτό το άρθρο θα σας παρουσιάσουμε το GRUB και θα εξηγήσουμε γιατί είναι απαραίτητος ένας φορτωτής εκκίνησης και πώς προσθέτει ευελιξία στο σύστημα.

Η διαδικασία εκκίνησης του Linux από τη στιγμή που πατάτε το κουμπί λειτουργίας του υπολογιστή σας μέχρι να αποκτήσετε ένα πλήρως λειτουργικό σύστημα ακολουθεί αυτή τη σειρά υψηλού επιπέδου:

  1. 1. Μια διαδικασία γνωστή ως POST (Power-On Self Test) εκτελεί έναν συνολικό έλεγχο στα στοιχεία υλικού του υπολογιστή σας.
  2. 2. Όταν ολοκληρωθεί το POST, μεταβιβάζει τον έλεγχο στον φορτωτή εκκίνησης, ο οποίος με τη σειρά του φορτώνει τον πυρήνα Linux στη μνήμη (μαζί με το initramfs ) και το εκτελεί. Ο πιο χρησιμοποιούμενος boot loader στο Linux είναι ο GRand Unified Boot loader ή GRUB για συντομία.
  3. 3. Ο πυρήνας ελέγχει και αποκτά πρόσβαση στο υλικό και, στη συνέχεια, εκτελεί την αρχική διαδικασία (γνωστή ως επί το πλείστον με το γενικό του όνομα "init "), η οποία με τη σειρά της ολοκληρώνει την εκκίνηση του συστήματος ξεκινώντας Υπηρεσίες.

Στο Μέρος 7 αυτής της σειράς (“SysVinit, Upstart και Systemd”) παρουσιάσαμε τα συστήματα διαχείρισης υπηρεσιών και τα εργαλεία που χρησιμοποιούνται από τις σύγχρονες διανομές Linux. Ίσως θελήσετε να αναθεωρήσετε αυτό το άρθρο πριν προχωρήσετε περαιτέρω.

Παρουσιάζουμε το GRUB Boot Loader

Δύο μεγάλες εκδόσεις 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).

Ένας από τους λόγους για τους οποίους θα σκεφτόσασταν να κάνετε εκκίνηση με έναν παλαιότερο πυρήνα είναι μια συσκευή υλικού που λειτουργούσε σωστά και άρχισε να "ενεργεί " μετά από μια αναβάθμιση (ανατρέξτε σε αυτόν τον σύνδεσμο στο 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 (4η καταχώρηση), πρέπει να ορίσουμε GRUB_DEFAULT έως 3 (οι εγγραφές αριθμούνται εσωτερικά με μηδέν) ως εξής:

GRUB_DEFAULT=3

Μια τελική μεταβλητή διαμόρφωσης GRUB που παρουσιάζει ιδιαίτερο ενδιαφέρον είναι η GRUB_CMDLINE_LINUX, η οποία χρησιμοποιείται για τη μετάδοση επιλογών στον πυρήνα. Οι επιλογές που μπορούν να περάσουν μέσω του GRUB στον πυρήνα είναι καλά τεκμηριωμένες στο αρχείο Kernel Parameters και στο 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/defalt/grub, θα χρειαστεί να εκτελέσετε το update-grub (Ubuntu) ή το grub2-mkconfig -o /boot/grub2/grub. cfg (CentOS και openSUSE) στη συνέχεια για ενημέρωση του grub.cfg (διαφορετικά, οι αλλαγές θα χαθούν κατά την εκκίνηση).

Αυτή η εντολή θα επεξεργαστεί τα αρχεία διαμόρφωσης εκκίνησης που αναφέρθηκαν προηγουμένως για ενημέρωση του grub.cfg. Αυτή η μέθοδος διασφαλίζει ότι οι αλλαγές είναι μόνιμες, ενώ οι επιλογές που μεταβιβάζονται μέσω του GRUB κατά την εκκίνηση θα διαρκέσουν μόνο κατά την τρέχουσα περίοδο λειτουργίας.

Διόρθωση ζητημάτων Linux GRUB

Εάν εγκαταστήσετε ένα δεύτερο λειτουργικό σύστημα ή εάν το αρχείο διαμόρφωσης GRUB καταστραφεί λόγω ανθρώπινου λάθους, υπάρχουν τρόποι με τους οποίους μπορείτε να επαναφέρετε το σύστημά σας στα πόδια του και να μπορέσετε να εκκινήσετε ξανά.

Στην αρχική οθόνη, πατήστε c για να λάβετε μια γραμμή εντολών GRUB (θυμηθείτε ότι μπορείτε επίσης να πατήσετε e για να επεξεργαστείτε τις προεπιλεγμένες επιλογές εκκίνησης) και χρησιμοποιήστε τη βοήθεια για να φέρετε τις διαθέσιμες εντολές στη γραμμή εντολών GRUB:

Θα επικεντρωθούμε στα ls, τα οποία θα απαριθμούν τις εγκατεστημένες συσκευές και συστήματα αρχείων και θα εξετάσουμε τι βρίσκει. Στην παρακάτω εικόνα μπορούμε να δούμε ότι υπάρχουν 4 σκληροί δίσκοι (hd0 έως hd3).

Μόνο το hd0 φαίνεται να έχει χωριστεί (όπως αποδεικνύεται από τα msdos1 και msdos2, όπου 1 και 2 είναι οι αριθμοί διαμερισμάτων και το msdos είναι το σχήμα διαμερισμάτων).

Ας εξετάσουμε τώρα το πρώτο διαμέρισμα στο hd0 (msdos1) για να δούμε αν μπορούμε να βρούμε το GRUB εκεί. Αυτή η προσέγγιση θα μας επιτρέψει να εκκινήσουμε το Linux και να χρησιμοποιήσουμε εκεί άλλα εργαλεία υψηλού επιπέδου για να επιδιορθώσουμε το αρχείο διαμόρφωσης ή να επανεγκαταστήσουμε το GRUB εντελώς εάν χρειάζεται:

ls (hd0,msdos1)/

Όπως μπορούμε να δούμε στην επισημασμένη περιοχή, βρήκαμε τον κατάλογο grub2 σε αυτό το διαμέρισμα:

Μόλις βεβαιωθούμε ότι το GRUB βρίσκεται στο (hd0,msdos1), ας πούμε στο GRUB πού να βρει το αρχείο διαμόρφωσής του και, στη συνέχεια, ας το ζητήσουμε να προσπαθήσει να ξεκινήσει το μενού του:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

Στη συνέχεια, στο μενού GRUB, επιλέξτε μια καταχώρηση και πατήστε Enter για εκκίνηση χρησιμοποιώντας την. Μετά την εκκίνηση του συστήματος, μπορείτε να εκδώσετε την εντολή grub2-install /dev/sdX (αλλαγή sdX με τη συσκευή στην οποία θέλετε να εγκαταστήσετε το GRUB). Στη συνέχεια, οι πληροφορίες εκκίνησης θα ενημερωθούν και όλα τα σχετικά αρχεία θα αποκατασταθούν.

grub2-install /dev/sdX

Άλλα πιο σύνθετα σενάρια τεκμηριώνονται, μαζί με τις προτεινόμενες διορθώσεις τους, στον οδηγό αντιμετώπισης προβλημάτων του Ubuntu GRUB2. Οι έννοιες που εξηγούνται εκεί ισχύουν και για άλλες διανομές.

Περίληψη

Σε αυτό το άρθρο σας παρουσιάσαμε το GRUB, υποδείξαμε πού μπορείτε να βρείτε τεκμηρίωση τόσο στο διαδίκτυο όσο και εκτός σύνδεσης και εξηγήσαμε πώς να προσεγγίσετε ένα σενάριο όπου ένα σύστημα έχει σταματήσει να εκκινεί σωστά λόγω ενός ζητήματος που σχετίζεται με τον φορτωτή εκκίνησης.

Ευτυχώς, το GRUB είναι ένα από τα εργαλεία που είναι καλύτερα τεκμηριωμένα και μπορείτε εύκολα να βρείτε βοήθεια είτε στα εγκατεστημένα έγγραφα είτε στο διαδίκτυο χρησιμοποιώντας τους πόρους που έχουμε μοιραστεί σε αυτό το άρθρο.

Έχετε ερωτήσεις ή σχόλια; Μη διστάσετε να μας ενημερώσετε χρησιμοποιώντας την παρακάτω φόρμα σχολίων. Ανυπομονούμε να ακούσουμε από εσάς!