LFCS: Com configurar i solucionar problemes del carregador d'arrencada de Grand Unified (GRUB) - Part 13


A causa dels canvis recents en els objectius de l'examen de certificació LFCS amb efectes a partir del 2 de febrer de 2016, també estem afegint els temes necessaris a la sèrie LFCE.

En aquest article us presentarem GRUB i explicarem per què és necessari un carregador d'arrencada i com afegeix versatilitat al sistema.

El procés d'arrencada de Linux des que premeu el botó d'engegada de l'ordinador fins que obteniu un sistema totalment funcional segueix aquesta seqüència d'alt nivell:

  1. 1. Un procés conegut com a POST (Power-On Self Test) realitza una comprovació global dels components de maquinari de l'ordinador.
  2. 2. Quan es completa el POST, passa el control al carregador d'arrencada, que al seu torn carrega el nucli de Linux a la memòria (juntament amb initramfs) i l'executa. El carregador d'arrencada més utilitzat a Linux és el carregador d'arrencada unificat GRand, o per abreujar GRUB.
  3. 3. El nucli comprova i accedeix al maquinari, i després executa el procés inicial (conegut principalment pel seu nom genèric \init) que, al seu torn, completa l'arrencada del sistema iniciant els serveis.

A la part 7 d'aquesta sèrie (\sistemes i eines de gestió de serveis utilitzats per les distribucions de Linux modernes. És possible que vulgueu revisar aquest article abans de continuar.

Presentació del carregador d'arrencada GRUB

Es poden trobar dues versions principals de GRUB (v1 de vegades anomenada GRUB Legacy i v2) als sistemes moderns, encara que la majoria de distribucions utilitzen la v2 de manera predeterminada en les seves últimes versions. Només el Red Hat Enterprise Linux 6 i els seus derivats encara fan servir la v1 avui dia.

Per tant, ens centrarem principalment en les característiques de v2 en aquesta guia.

Independentment de la versió de GRUB, un carregador d'arrencada permet a l'usuari:

  1. 1). modificar la manera com es comporta el sistema especificant diferents nuclis per utilitzar,
  2. 2). triar entre sistemes operatius alternatius per arrencar i
  3. 3). afegir o editar estrofes de configuració per canviar les opcions d'arrencada, entre altres coses.

Avui, GRUB és mantingut pel projecte GNU i està ben documentat al seu lloc web. Us recomanem que utilitzeu la documentació oficial de GNU mentre reviseu aquesta guia.

Quan el sistema arrenca, se us presenta la següent pantalla de GRUB a la consola principal. Inicialment, se us demanarà que escolliu entre nuclis alternatius (per defecte, el sistema arrencarà amb l'últim nucli) i se't permetrà introduir una línia d'ordres GRUB (amb c) o editar les opcions d'arrencada (mitjançant prement la tecla e).

Una de les raons per les quals hauríeu de considerar arrencar amb un nucli antic és un dispositiu de maquinari que solia funcionar correctament i que ha començat a \actuar després d'una actualització (consulteu aquest enllaç als fòrums d'AskUbuntu per obtenir un exemple).

La configuració de GRUB v2 es llegeix a l'arrencada des de /boot/grub/grub.cfg o /boot/grub2/grub.cfg, mentre que /boot/grub/ grub.conf o /boot/grub/menu.lst s'utilitzen a la v1. Aquests fitxers NO s'han d'editar a mà, sinó que es modifiquen en funció del contingut de /etc/default/grub i dels fitxers que es troben a /etc/grub.d.

En un CentOS 7, aquí teniu el fitxer de configuració que es crea quan s'instal·la el sistema per primera vegada:

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"

A més de la documentació en línia, també podeu trobar el manual de GNU GRUB fent servir la informació de la següent manera:

# info grub

Si esteu interessats específicament en les opcions disponibles per a /etc/default/grub, podeu invocar directament la secció de configuració:

# info -f grub -n 'Simple configuration'

Utilitzant l'ordre anterior, descobrireu que GRUB_TIMEOUT estableix el temps entre el moment en què apareix la pantalla inicial i l'arrencada automàtica del sistema, tret que l'usuari l'interromp. Quan aquesta variable s'estableix a -1, l'arrencada no s'iniciarà fins que l'usuari faci una selecció.

Quan s'instal·len diversos sistemes operatius o nuclis a la mateixa màquina, GRUB_DEFAULT requereix un valor enter que indiqui quin sistema operatiu o entrada del nucli a la pantalla inicial de GRUB s'ha de seleccionar per arrencar de manera predeterminada. La llista d'entrades es pot veure no només a la pantalla de presentació que es mostra a dalt, sinó també mitjançant l'ordre següent:

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

A l'exemple que es mostra a la imatge següent, si volem arrencar amb la versió del nucli 3.10.0-123.el7.x86_64 (4a entrada), hem d'establir GRUB_DEFAULT a 3 (les entrades estan numerades internament comencen per zero) de la següent manera:

GRUB_DEFAULT=3

Una darrera variable de configuració de GRUB que té un interès especial és GRUB_CMDLINE_LINUX, que s'utilitza per passar opcions al nucli. Les opcions que es poden passar a través de GRUB al nucli estan ben documentades al param d'arrencada man 7.

Les opcions actuals del meu servidor CentOS 7 són:

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"

Per què voleu modificar els paràmetres predeterminats del nucli o passar opcions addicionals? En termes simples, pot haver-hi moments en què necessiteu indicar al nucli determinats paràmetres de maquinari que potser no pot determinar per si mateix, o anul·lar els valors que detectaria.

Això em va passar no fa gaire quan vaig provar Vector Linux, un derivat de Slackware, al meu portàtil de 10 anys. Després de la instal·lació, no va detectar la configuració adequada per a la meva targeta de vídeo, així que vaig haver de modificar les opcions del nucli passades per GRUB per tal que funcionés.

Un altre exemple és quan cal portar el sistema al mode d'usuari únic per realitzar tasques de manteniment. Podeu fer-ho afegint la paraula single a GRUB_CMDLINE_LINUX i reiniciant:

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"

Després d'editar /etc/defalt/grub, haureu d'executar update-grub (Ubuntu) o grub2-mkconfig -o /boot/grub2/grub. cfg (CentOS i openSUSE) després per actualitzar grub.cfg (en cas contrari, els canvis es perdran a l'arrencada).

Aquesta ordre processarà els fitxers de configuració d'arrencada esmentats anteriorment per actualitzar grub.cfg. Aquest mètode garanteix que els canvis siguin permanents, mentre que les opcions passades per GRUB en el moment de l'arrencada només duraran durant la sessió actual.

Solucionant problemes de Linux GRUB

Si instal·leu un segon sistema operatiu o si el vostre fitxer de configuració GRUB es corromp a causa d'un error humà, hi ha maneres de recuperar el vostre sistema i tornar-lo a arrencar.

A la pantalla inicial, premeu c per obtenir una línia d'ordres GRUB (recordeu que també podeu prémer e per editar les opcions d'arrencada predeterminades) i utilitzeu l'ajuda per portar les opcions disponibles. ordres a l'indicador de GRUB:

Ens centrarem en ls, que enumerarà els dispositius i sistemes de fitxers instal·lats, i examinarem què troba. A la imatge següent podem veure que hi ha 4 discs durs (hd0 a hd3).

Només hd0 sembla haver estat particionat (com ho demostren msdos1 i msdos2, on 1 i 2 són els números de partició i msdos és l'esquema de particions).

Examinem ara la primera partició a hd0 (msdos1) per veure si hi podem trobar GRUB. Aquest enfocament ens permetrà arrencar Linux i utilitzar altres eines d'alt nivell per reparar el fitxer de configuració o reinstal·lar GRUB del tot si és necessari:

# ls (hd0,msdos1)/

Com podem veure a l'àrea destacada, hem trobat el directori grub2 en aquesta partició:

Quan estiguem segurs que GRUB resideix a (hd0,msdos1), diguem a GRUB on trobar el seu fitxer de configuració i després li indiquem que intenti iniciar el seu menú:

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

A continuació, al menú GRUB, trieu una entrada i premeu Intro per arrencar-la. Un cop el sistema s'hagi arrencat, podeu emetre l'ordre grub2-install /dev/sdX (canvieu sdX amb el dispositiu on voleu instal·lar GRUB). Aleshores s'actualitzarà la informació d'arrencada i es restauraran tots els fitxers relacionats.

# grub2-install /dev/sdX

Altres escenaris més complexos es documenten, juntament amb les seves solucions suggerides, a la guia de resolució de problemes d'Ubuntu GRUB2. Els conceptes que s'hi expliquen també són vàlids per a altres distribucions.

Resum

En aquest article us hem presentat GRUB, us hem indicat on podeu trobar documentació tant en línia com fora de línia, i us hem explicat com abordar un escenari en què un sistema ha deixat d'arrencar correctament a causa d'un problema relacionat amb el carregador d'arrencada.

Afortunadament, GRUB és una de les eines que es documenten millor i podeu trobar ajuda fàcilment als documents instal·lats o en línia mitjançant els recursos que hem compartit en aquest article.

Tens preguntes o comentaris? No dubteu a fer-nos-ho saber mitjançant el formulari de comentaris a continuació. Esperem amb interès tenir notícies teves!