Gestors d'arrencada a Linux

El primer software que s’executa en encendre un ordinador és el carregador d’arrencada. Aquest té com a propòsit carregar el nucli del sistema operatiu, que carregarà els controladors, inicialitzarà el hardware i carregarà la resta del sistema.

La majoria de distribucions Linux utilitzen GRUB (GRUB 2) com a carregador d’arrencada.

Avui dia utilitzem GRUB 2, que com hauràs pogut deduir pel nom, no és la primera versió d’aquest software.

La versió original de GRUB (GRand Unified Bootloader), que ara es coneix com GRUB Legacy, es va desenvolupar l’any 1995 i va reemplaçar altres gestors d’arrencada com LILO.

GRUB 2 és una reescriptura de GRUB, per fer-lo més segur, robust, net i potent. Algunes de les diferències clau entre les dues versions són:

  • GRUB 2 suporta UEFI.
  • GRUB Legacy utilitza lletres de dispositiu (com hd0) mentre que GRUB 2 utilitza UUIDs.
  • GRUB Legacy emmagatzema la configuració en diferents fitxers, mentre que GRUB 2 ho fa en un de sol.
  • Grub Legacy es basa en una arquitectura monolítica, mentre que GRUB 2 és modular i extensible.
  • GRUB 2 és customitzable i suporta temes.

GRUB Legacy ja no està en desenvolupament actiu.

En esquemes de particions MBR, el codi d’arrencada de GRUB es troba al sector MBR. Això carrega i dona el control a una imatge “nucli” entre l’MBR i la primera partició. Des d’aqui, GRUB pot carregar la resta de recursos necessaris des del disc.

En discos amb particions GPT, GRUB s’emmagatzema en una partició especial d’arrencada BIOS (ESP).

A Linux, els arxius necessaris per arrencar normalment es troben a la partició /boot.

En els sistemes actuals, aquesta partició no és necessària ja que els carregadors d’arrencada solen muntar el sistema d’arxius arrel i buscar els arxius necessaris al directori boot. Tot i això, separar aquest directori /boot és una bona pràctica.

En cas de trobar-nos en un sistema que ho requereixi, la partició boot sovint és la primera del disc per raons històriques (BIOS original va dissenyar els discos utilitzant cilindres, caps i sectors CHS, i si la partició estés massa lluny de l’MBR, podria no ser accessible).

La mida recomanada d’aquesta partició és d’unes 300MB.

El contingut dins /boot por variar segons l’arquitectura del sistema i el carregador d’arrencada, però en x86 normalment tindrà:

  • Arxiu de configuració
  • Mapa del sistema
  • Kernel de Linux
  • Disc RAM inicial
  • Arxius relacionats amb el carregador d’arrencada

Es pot instal·lar amb la comanda grub-install. A aquesta comanda podem passar-li paràmetres, com el directori boot, i hem d’especificar-li el dispositiu on el volem instal·lar.

L’arxiu de configuració és /boot/grub/grub.cfg. És un arxiu generat automàticament i no es recomana editar-lo manualment. Per editar-lo, podem fer-ho editant /etc/default/grub i executar l’ordre update-grub per generar un arxiu compatible.

update-grub sol ser una drecera a grub-mkconfig -o /boot/grub/grub.cfg.

Opcions importants de /etc/default/grub

  • GRUB_DEFAULT=

    Entrada de menú per defecte. Pot ser un valor numèric, el nom d’una entrada de menú o saved (que s’utilitza amb GRUB_SAVEDEFAULT=).

  • GRUB_SAVEDEFAULT=

    Si s’estableix a true i GRUB_DEFAULT=saved, la opció d’entrada per defecte serà la última seleccionada.

  • GRUB_TIMEOUT=

    Temps d’espera (en segons) abans que se seleccioni l’entrada de menú predeterminada (-1 per desactivar).

  • GRUB_CMDLINE_LINUX=

    Enumera les opcions de CLI que s’agregaran a les entrades per al kernel de Linux.

  • GRUB_CMDLINE_LINUX_DEFAULT=

    Per defecte, per cada nucli Linux es generen dues entrades de menú (normal i recuperació). Amb aquesta opció es poden afegir paràmetres adicionals per la entrada predeterminada.

  • GRUB_ENABLE_CRYPTODISK

    Si s’estableix en “y”, les comandes grub-mkconfig, update-grub i grub-install buscaran discos xifrats i agregaran les comandes per accedir-hi durant l’arrencada. Desactiva l’arrencada automàtica, ja que requereix d’una contrasenya.

Al executar update-grub, GRUB 2 buscarà nuclis i SO a la màquina, i generarà les entrades de menú corresponents a /boot/grub/grub.cfg. Es poden afegir entrades manualment als arxius d’script dins /etc/grub.d. Han de ser arxius executables i es processen en ordre numèric per update-grub. La sintaxi bàsica és:

bash

menuentry "Default 05" {
   set root=(hd,01)
   linux /vmlinuz root=/dev/sda1 ro quiet splash
   initrd /initrd.img
}

Al aparèixer el menú de GRUB 2, tenim opcions a més d’entrar als sistemes operatius.

Si, sobre una entrada, pressionem “E”, mostrarà una finestra de l’editor amb el contingut menuentry associat a la opció seleccionada.

Per entrar al shell de GRUB 2, pressionarem “C” a la pantalla del menú. Allà, ens mostrarà un prompt com grub:>. Per veure les comandes disponibles, podem escriure help.

Per arrencar per comandes amb GRUB 2, primer entrarem a la seva shell (pressionant “C” com explicat abans).

Primer haurem d’identificar la partició d’arrencada. Això ho farem amb la comanda ls. Un cop executada, fem ls de les diferents particions per veure’n el contingut.

bash

grub> ls
(proc) (hd0) (hd0, msdos1)

grub> ls (hd0, msdos1)/
lost+found/ swapfile/ etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/

En aquest exemple veiem que hi ha un disc hd0 amb una partició hd0,msdos1. Li fem ls per llistar-ne els arxius i veiem que conté els arxius per arrencar (kernel i initrd).

Un cop fet, configurarem la partició d’arrencada.

bash

grub> set root=(hd0, msdos1)

Carreguem el kernel amb la comanda linux, la ruta del kernel i la opció root= per dir on es troba el sistema d’arxius arrel.

bash

grub> linux /vmlinuz root=/dev/sda1

I per últim carregarem el disc RAM inicial amb initrd i la ruta a l’arxiu.

bash

grub> initrd /initrd.img

Ara iniciem el sistema amb boot i ja carregarà.

Quan GRUB 2 falla, sovint carrega un shell de rescat amb el prompt grub rescue>. Per arreglar això, seguirem les següents passes:

  • Trobar quina és la partició d’arrencada (procès mostrat abans).

  • Utilitzar la comanda set prefix amb la ruta al directori que conté els arxius GRUB 2 (normalment /boot/grub).

    nil

      grub rescue> set prefix=(hd0,msdos1)/boot/grub
  • Carreguem els mòduls normal i linux amb insmod:

    bash

      grub rescue> insmod normal
      grub rescue> insmod linux
  • Confirmem la partició d’arrencada amb set root=, carreguem el kernel de Linux, el disc RAM inicial (initrd) i arrenquem amb boot.

Per instal·lar GRUB Legacy, utilitzarem grub-install, especificant el dispositiu on instal·lar-lo.

Com abans, també tenim la opció –boot-directory per especificar el directori de boot.

Si s’ha de reinstal·lar GRUB Legacy i no es pot iniciar el sistema, es pot fer des de la consola de GRUB en un disc d’inici de GRUB Legacy.

Des de la shell GRUB, haurem de fer el següent:

  • Configurar el dispositiu d’arrencada que conté el directori boot.

    bash

      grub> root (hd0, 0)

    Si no sabem quin és el dispositiu que conté /boot, GRUB el pot buscar amb la comanda find:

    find /boot/grub/stage1 (hd0, 0)

  • Configurarem la partició d’arrencada (com indicat abans) i amb la comanda setup instal·larem GRUB Legacy a l’MBR i copiarem els arxius necessaris al disc:

    shell

      grub> setup (hd0)

    Al acabar, reiniciem el sistema i ja hauria d’arrencar.

Les entrades i configuracions del menú de GRUB Legacy es troben a /boot/grub/menu.lst, que pot editar-se directament.

Una entrada de menú té, com a mínim, tres comandes:

  • title

    Estableix el títol del sistema operatiu a la pantalla del menú.

  • root

    Diu a GRUB Legacy des de quin dispositiu o partició arrencar.

  • kernel

    Especifica la ruta completa a la imatge del nucli del sistema.

A més, GRUB Legacy té un disseny modular, on els mòduls (normalment guardats com arxius .mod a /boot/grub/i386-pc) es poden carregar per afegir funcions adicionals.

Per carregar mòduls, s’utilitza la comanda module seguida de la ruta completa a l’arxiu .mod.

GRUB Legacy també pot carregar sistemes no compatibles (com Windows) mitjançant un procès chainloading. Primer es carrega GRUB Legacy i, quan se selecciona la opció corresponent, es carrega el gestor d’arrencada del sistema especificat. Una entrada d’aquest tipus seria:

bash

title Windows XP
root (hd0, 1)
makeactive
chainload +1
boot

Paràmetres:

  • makeactive

    Establirà una flag que indica que és una partició activa.

  • chainload +1

    Diu a GRUB que carregui el primer sector de la partició d’arrencada.

  • boot

    Executarà el gestor d’arrencada i carregarà el sistema corresponent.

Fins aqui el post d’avui. Espero que t’hagi estat útil. En cas que si, pots compartir o deixar un comentari. Ens veiem al següent!