Product SiteDocumentation Site

8.8. Configurare il bootloader

È probabilmente già funzionante ma è sempre meglio sapere come configurare ed installare il bootloader nel caso scompaia dal Master Boot Record. Questo può avvenire dopo l'installazione di un altro sistema operativo, per esempio Windows. Le seguenti informazioni possono anche aiutare a modificare la configurazione del bootloader se necessario.

8.8.1. Identificare i dischi

La configurazione del bootloader deve identificare i diversi dischi rigidi e le rispettive partizioni. Linux usa un filesystem speciale (in modalità a blocchi) conservato nella directory /dev/ a questo scopo. Storicamente /dev/hda è stato il disco primario del primo controller IDE e /dev/hdb il primo secondario, /dev/hdc e /dev/hdd erano rispettivamente i dischi primario e secondario del secondo controller IDE, e così via per tutti gli altri. /dev/sda corrispondeva al primo disco SCSI, /dev/sdb al secondo, ecc. Questo schema dei nomi è stato unificato con il kernel Linux presentato in Squeeze, e tutti i dischi rigidi (IDE/PATA, SATA, SCSI, USB, IEEE 1394) sono ora rappresentati da /dev/sd*.
Ogni partizione è rappresentata dal suo numero sul disco che la ospita: per esempio /dev/sda1 è la prima partizione nel primo disco e /dev/sdb3 è la terza partizione nel secondo disco.
L'architettura PC (o «i386») è limitata a quattro partizioni «primarie» per disco. Per superare questa limitazione una di loro deve essere creata come partizione «estesa» e può quindi contenere partizioni secondarie aggiuntive. Queste partizioni «secondarie» devono essere numerate a partire da 5. Così la prima partizione secondaria può essere /dev/sda5 seguita da /dev/sda6, ecc.
Non è sempre semplice ricordare quale disco è connesso a quale controller SATA o alla terza posizione nella catena SCSI, specialmente dato che la denominazione dei dischi rigidi collegati a caldo (che include tra gli altri la maggior parte dei dischi SATA e i dischi esterni) può cambiare tra un avvio e l'altro. Fortunatamente udev crea in aggiunta a /dev/sd* dei collegamenti simbolici con un nome fisso che è possibile usare se si desidera identificare un disco rigido in modo non ambiguo. Questi collegamenti simbolici sono conservati in /dev/disk/by-id. In una macchina con due dischi fisici, per esempio, si potrebbe trovare questo:
mirexpress:/dev/disk/by-id# ls -l
total 0
lrwxrwxrwx 1 root root  9 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP-part2 -> ../../sda2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697 -> ../../sdb
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part2 -> ../../sdb2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part2 -> ../../sda2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697 -> ../../sdb
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part2 -> ../../sdb2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part2 -> ../../sdc2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 wwn-0x5000c50015c4842f -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 wwn-0x5000c50015c4842f-part1 -> ../../sda1
[...]
mirexpress:/dev/disk/by-id# 
Si noti che alcuni dischi sono elencati più volte (poiché agiscono simultaneamente come dischi ATA e dischi SCSI), ma l'informazione rilevante principale è il modello ed il numero seriale dei dischi grazie ai quali si può individuare il file periferica.
I file di configurazione d'esempio che si trovano nelle sezioni seguenti sono basati sulla stessa configurazione: un singolo disco primario IDE dove la prima partizione è una vecchia installazione Windows e la seconda contiene Debian GNU/Linux.

8.8.2. Configurare LILO

LILO (LInux LOader) è il bootloader più vecchio: solido ma grezzo. Scrive l'indirizzo fisico del kernel da lanciare nell'MBR, per questo ogni aggiornamento di LILO (o dei suoi file di configurazione) dev'essere seguito dal comando lilo. Dimenticarsi di farlo impedisce al sistema di avviarsi se il vecchio kernel è stato rimosso o sostituito dato che quello nuovo non sarà nella stessa posizione sul disco.
Il file di configurazione di LILO è /etc/lilo.conf: un file semplice per configurazioni standard è presentato nell'esempio che segue.

Esempio 8.3. File di configurazione di LILO

# Il disco dove LILO dev'essere installato.
# Indicando il disco e non la partizione.
# ordiniamo a LILO di installarsi nell'MBR.
boot=/dev/sda
# la partizione che contiene Debian
root=/dev/sda2
# l'oggetto da caricare in via predefinita
default=Linux

# la più recente immagine kernel
image=/vmlinuz
  label=Linux
  initrd=/initrd.img
  read-only

# Vecchio kernel (in caso il nuovo kernel non parta)
image=/vmlinuz.old
  label=LinuxOLD
  initrd=/initrd.img.old
  read-only
  optional

# solo per il doppio avvio Linux/Windows
other=/dev/sda1
  label=Windows

8.8.3. Configurazione di GRUB 2

GRUB (GRand Unified Bootloader) è più recente. Non è necessario lanciarlo dopo ogni aggiornamento del kernel: GRUB sa come leggere i filesystem e trovare la posizione del kernel nel disco autonomamente. Per installarlo nell'MBR del primo disco è sufficiente digitare grub-install /dev/sda.
La configurazione di GRUB 2 è conservata in /boot/grub/grub.cfg ma questo file (in Debian) viene generato da altri. Va ricordato di non modificarlo a mano, poiché queste modifiche sarebbero perse alla successiva esecuzione di update-grub (che può avvenire durante l'aggiornamento dei vari pacchetti). Le modifiche più comuni del file /boot/grub/grub.cfg (per esempio per aggiungere parametri alla linea di comando del kernel o per cambiare la durata di visualizzazione del menu) vengono realizzate tramite variabili in /etc/default/grub. Per aggiungere voci al menu è possibile creare un file /boot/grub/custom.cfg o modificare il file /etc/grub.d/50_custom. Per configurazioni più complesse è possibile modificare i file in /etc/grub.d o aggiungerne: questi script devono restituire frammenti di configurazione, eventualmente facendo uso di programmi esterni. Questi script sono quelli che aggiornano la lista dei kernel da avviare: 10_linux prende in considerazione i kernel Linux installati, 20_linux considera i sistemi virtuali Xen e 30_os-prober elenca gli altri sistemi operativi (Windows, Mac OSX, Hurd).

8.8.4. Configurazione di GRUB Legacy

Anche la versione 1 di GRUB può leggere i filesystem. Viene installato usando il comando grub-install /dev/sda.
La configurazione di GRUB è contenuta nel file /boot/grub/menu.lst (si veda l'esempio).

Esempio 8.4. File di configurazione di GRUB

# Avvia automaticamente dopo 30 secondi
timeout 30
# Avvia in via predefinita il primo elemento
default 0
# Se questo fallisce prova il secondo
fallback 1

# Ultimo kernel installato
title GNU/Linux
root (hd0,1)
kernel /vmlinuz root=/dev/sda2
initrd /initrd.img

# Vecchio kernel (se il più recente non parte)
title GNU/Linux OLD
root (hd0,1)
kernel /vmlinuz.old root=/dev/sda2
initrd /initrd.img.old

# Solo per il doppio avvio Linux/Windows
title Microsoft Windows
rootnoverify (hd0,0)
makeactive
chainloader +1

8.8.5. Per i computer Macintosh (PowerPC): configurare Yaboot

Yaboot è il bootloader usato dai vecchi computer Macintosh che usano processori PowerPC. Questi non si avviano come i PC, ma si affidano ad una partizione di «bootstrap» da cui il BIOS (o OpenFirmware) esegue il bootloader e dove il programma ybin installa yaboot e il suo file di configurazione. Sarà necessario eseguire questo comando ogni qual volta /etc/yaboot.conf viene modificato (viene duplicato sulla partizione di bootstrap e yaboot sa come trovare la posizione dei kernel sui dischi).
Prima di eseguire ybin si deve avere un file /etc/yaboot.conf valido. Quello che segue è un esempio di configurazione minimale.

Esempio 8.5. File di configurazione di Yaboot

# partizione di bootstrap
boot=/dev/sda2
# il disco
device=hd:
# la partizione Linux
partition=3
root=/dev/sda3
# avvia dopo 3 secondi di inattività
# (timeout in 30 decimi di secondo)
timeout=30

install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot
enablecdboot

# ultimo kernel installato
image=/vmlinux
        label=linux
        initrd=/initrd.img
        read-only

# vecchio kernel
image=/vmlinux.old
        label=old
        initrd=/initrd.img.old
        read-only

# solo per doppio avvio Linux/Mac OSX
macosx=/dev/sda5

# bsd=/dev/sdaX and macos=/dev/sdaX
# è inoltre possibile