LFCS: Cum să configurați și să depanați Grand Unified Bootloader (GRUB) - Partea 13


Datorită modificărilor recente aduse obiectivelor examenului de certificare LFCS, în vigoare începând cu 2 februarie 2016, adăugăm subiectele necesare la seria LFCS publicată aici. Pentru a vă pregăti pentru acest examen, sunteți foarte încurajat să urmați și seria LFCE.

În acest articol vă vom prezenta GRUB și vă vom explica de ce este necesar un încărcător de pornire și cum adaugă versatilitate sistemului.

Procesul de pornire Linux din momentul în care apăsați butonul de pornire al computerului până când obțineți un sistem complet funcțional urmează această secvență de nivel înalt:

  1. 1. Un proces cunoscut sub numele de POST (Power-On Self Test) efectuează o verificare generală a componentelor hardware ale computerului dvs.
  2. 2. Când se finalizează POST, acesta transmite controlul către încărcătorul de pornire, care la rândul său încarcă nucleul Linux în memorie (împreună cu initramfs ) și îl execută. Cel mai folosit încărcător de pornire în Linux este GRand Unified Bootloader sau, pe scurt, GRUB.
  3. 3. Nucleul verifică și accesează hardware-ul, apoi rulează procesul inițial (cunoscut în principal sub numele său generic „init ”) care, la rândul său, completează pornirea sistemului pornind Servicii.

În Partea 7 a acestei serii („SysVinit, Upstart și Systemd”) am prezentat sistemele și instrumentele de management al serviciilor utilizate de distribuțiile Linux moderne. Poate doriți să examinați articolul respectiv înainte de a continua.

Vă prezentăm GRUB Boot Loader

Două versiuni majore de GRUB (v1 numite uneori GRUB Legacy și v2) pot fi găsite în sistemele moderne, deși majoritatea distribuțiile folosesc v2 în mod implicit în cele mai recente versiuni. Doar Red Hat Enterprise Linux 6 și derivatele sale mai folosesc v1 astăzi.

Astfel, ne vom concentra în primul rând pe caracteristicile v2 în acest ghid.

Indiferent de versiunea GRUB, un încărcător de pornire permite utilizatorului să:

  1. 1). modificați modul în care se comportă sistemul specificând diferite nuclee de utilizat,
  2. 2). alegeți între sisteme de operare alternative pentru a porni și
  3. 3). adăugați sau editați strofe de configurare pentru a schimba opțiunile de pornire, printre altele.

Astăzi, GRUB este întreținut de proiectul GNU și este bine documentat pe site-ul lor. Sunteți încurajat să utilizați documentația oficială GNU în timp ce parcurgeți acest ghid.

Când sistemul pornește, vi se prezintă următorul ecran GRUB în consola principală. Inițial, vi se solicită să alegeți între nuclee alternative (în mod implicit, sistemul va porni folosind cel mai recent nucleu) și vi se permite să introduceți o linie de comandă GRUB (cu c) sau editați opțiunile de pornire (apăsând tasta e).

Unul dintre motivele pentru care ați lua în considerare pornirea cu un nucleu mai vechi este un dispozitiv hardware care obișnuia să funcționeze corect și a început să „acționeze ” după o actualizare (consultați acest link în AskUbuntu forumuri de exemplu).

Configurația GRUB v2 este citită la pornire de pe /boot/grub/grub.cfg sau /boot/grub2/grub.cfg, în timp ce /boot/grub/grub.conf sau /boot/grub/menu.lst sunt folosite în v1. Aceste fișiere NU trebuie editate manual, ci sunt modificate pe baza conținutului /etc/default/grub și a fișierelor găsite în /etc/grub.d.

Într-un CentOS 7, iată fișierul de configurare care este creat la prima instalare a sistemului:

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"

Pe lângă documentația online, puteți găsi și manualul GNU GRUB folosind informații după cum urmează:

info grub

Dacă sunteți interesat în mod special de opțiunile disponibile pentru /etc/default/grub, puteți invoca direct secțiunea de configurare:

info -f grub -n 'Simple configuration'

Folosind comanda de mai sus veți afla că GRUB_TIMEOUT setează timpul dintre momentul în care apare ecranul inițial și începe pornirea automată a sistemului, dacă nu este întreruptă de utilizator. Când această variabilă este setată la -1, boot-ul nu va fi pornit până când utilizatorul face o selecție.

Când mai multe sisteme de operare sau nuclee sunt instalate în aceeași mașină, GRUB_DEFAULT necesită o valoare întreagă care indică ce sistem de operare sau intrare de nucleu din ecranul inițial GRUB ar trebui să fie selectată pentru a porni implicit. Lista intrărilor poate fi vizualizată nu numai în ecranul de deschidere prezentat mai sus, ci și folosind următoarea comandă:

În CentOS și openSUSE:

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

În Ubuntu:

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

În exemplul prezentat în imaginea de mai jos, dacă dorim să pornim cu versiunea de kernel 3.10.0-123.el7.x86_64 (a patra intrare), trebuie să setăm GRUB_DEFAULT la 3 (înregistrările sunt numerotate intern începând cu zero) după cum urmează:

GRUB_DEFAULT=3

O ultimă variabilă de configurare GRUB care prezintă un interes deosebit este GRUB_CMDLINE_LINUX, care este folosită pentru a transmite opțiuni nucleului. Opțiunile care pot fi transmise prin GRUB către nucleu sunt bine documentate în fișierul Kernel Parameters și în man 7 bootparam.

Opțiunile curente de pe serverul meu CentOS 7 sunt:

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"

De ce ați dori să modificați parametrii impliciti ai nucleului sau să treceți opțiuni suplimentare? În termeni simpli, pot exista momente când trebuie să spuneți nucleului anumiți parametri hardware pe care s-ar putea să nu-i poată determina singur, sau să înlocuiți valorile pe care le-ar detecta.

Acest lucru mi s-a întâmplat nu cu mult timp în urmă când am încercat Vector Linux, un derivat al Slackware, pe laptopul meu vechi de 10 ani. După instalare, nu a detectat setările corecte pentru placa mea video, așa că a trebuit să modific opțiunile de kernel transmise prin GRUB pentru a o face să funcționeze.

Un alt exemplu este atunci când trebuie să aduceți sistemul în modul utilizator unic pentru a efectua sarcini de întreținere. Puteți face acest lucru adăugând cuvântul single la GRUB_CMDLINE_LINUX și repornind:

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"

După editarea /etc/defalt/grub, va trebui să rulați update-grub (Ubuntu) sau grub2-mkconfig -o /boot/grub2/grub. cfg (CentOS și openSUSE) pentru a actualiza ulterior grub.cfg (în caz contrar, modificările se vor pierde la pornire).

Această comandă va procesa fișierele de configurare de pornire menționate mai devreme pentru a actualiza grub.cfg. Această metodă asigură că modificările sunt permanente, în timp ce opțiunile trecute prin GRUB la momentul pornirii vor dura doar în timpul sesiunii curente.

Remedierea problemelor Linux GRUB

Dacă instalați un al doilea sistem de operare sau dacă fișierul dvs. de configurare GRUB este corupt din cauza unei erori umane, există modalități prin care vă puteți restabili sistemul și puteți porni din nou.

În ecranul inițial, apăsați c pentru a obține o linie de comandă GRUB (rețineți că puteți apăsa și pe e pentru a edita opțiunile implicite de pornire) și utilizați ajutorul pentru a aduce cele disponibile comenzi în promptul GRUB:

Ne vom concentra pe ls, care va enumera dispozitivele și sistemele de fișiere instalate și vom examina ce găsește. În imaginea de mai jos putem vedea că există 4 hard disk-uri (hd0 prin hd3).

Doar hd0 pare să fi fost partiționat (după cum demonstrează msdos1 și msdos2, unde 1 și 2 sunt numerele partițiilor și msdos este schema de partiționare).

Să examinăm acum prima partiție de pe hd0 (msdos1) pentru a vedea dacă putem găsi GRUB acolo. Această abordare ne va permite să pornim Linux și să folosim alte instrumente de nivel înalt pentru a repara fișierul de configurare sau a reinstala GRUB cu totul dacă este necesar:

ls (hd0,msdos1)/

După cum putem vedea în zona evidențiată, am găsit directorul grub2 în această partiție:

Odată ce suntem siguri că GRUB se află în (hd0,msdos1), să îi spunem lui GRUB unde să-și găsească fișierul de configurare și apoi să îi spunem să încerce să-și lanseze meniul:

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

Apoi, în meniul GRUB, alegeți o intrare și apăsați pe Enter pentru a porni folosind-o. Odată ce sistemul a pornit, puteți lansa comanda grub2-install /dev/sdX (schimbați sdX cu dispozitivul pe care doriți să instalați GRUB). Informațiile de pornire vor fi apoi actualizate și toate fișierele asociate vor fi restaurate.

grub2-install /dev/sdX

Alte scenarii mai complexe sunt documentate, împreună cu remediile lor sugerate, în ghidul de depanare Ubuntu GRUB2. Conceptele explicate acolo sunt valabile și pentru alte distribuții.

rezumat

În acest articol, v-am prezentat GRUB, a indicat unde puteți găsi documentație atât online, cât și offline și v-am explicat cum să abordați un scenariu în care un sistem a încetat să pornească corect din cauza unei probleme legate de bootloader.

Din fericire, GRUB este unul dintre instrumentele cel mai bine documentate și puteți găsi cu ușurință ajutor fie în documentele instalate, fie online, folosind resursele pe care le-am împărtășit în acest articol.

Aveți întrebări sau comentarii? Nu ezitați să ne anunțați folosind formularul de comentarii de mai jos. Asteptam sa auzim de tine!