12.3. Il Boot Manager e le Fasi di Boot
Indietro | Capitolo 12. La Procedura di Avvio di FreeBSD | Avanti

## 12.3. Il Boot Manager e le Fasi di Boot

### 12.3.1. Il Boot Manager

Il codice nel MBR o nel boot manager è solitamente riferito alla fase zero del processo di boot. Questa sezione discute dei due boot manager menzionati in precedenza: boot0 e LILO.

Il Boot Manager boot0: Il MBR installato dall'installer di FreeBSD o da boot0cfg(8), di default, si basa su `/boot/boot0`. (Il programma boot0 è molto semplice, poichè il programma nel MBR può essere al più di 446 byte a causa della tabella della slice e dell'identificatore `0x55AA` alla fine del MBR.) Se hai installato boot0 e hai più di un sistema operativo sui tuoi dischi, allora vedrai una schermata simile alla seguente nella fase di avvio:

Esempio 12.1. Screenshot di `boot0`

    F1 DOS
    F2 FreeBSD
    F3 Linux
    F4 ??
    F5 Drive 1

    Default: F2

Altri sistemi operativi, in particolare Windows®, sono noti per l'abitudine di sovrascrivere l'MBR esistente con il proprio. Se accade questo, o se vuoi rimpiazzare l'MBR pre-esistente con quello di FreeBSD puoi usare il seguente comando:

    # fdisk -B -b /boot/boot0 dispositivo

dove `dispositivo` è il dispositivo dal quale vuoi avviare, come `ad0` per il primo disco IDE, `ad2` per il primo disco ide sul secondo canale, `da0` per il primo disco SCSI, e così via. Se vuoi una configurazione ad hoc dell'MBR, usa boot0cfg(8).

Il Boot Manager LILO: Per installare questo boot manager affinchè possa avviare anche FreeBSD, avvia Linux e aggiungi le seguenti cose nel tuo file di configurazione `/etc/lilo.conf`:

    other=/dev/hdXY
    table=/dev/hdX
    loader=/boot/chain.b
    label=FreeBSD

Specifica la partizione primaria di FreeBSD e il disco usando le direttive di Linux, rimpiazzando `X` con la lettera del dispositivo di Linux e `Y` con il numero della partizione primaria di Linux. Se stai usando un dispositivo SCSI, devi modificare `/dev/hd` in qualcosa simile a `/dev/sd`. La linea `loader=/boot/chain.b` può essere omessa se hai entrambi i sistemi operativi sullo stesso disco. Esegui `/sbin/lilo -v` per apportare le modifiche al sistema; verificando il relativo messaggio a video.

### 12.3.2. Stadio Uno, `/boot/boot1`, e Stadio Due, `/boot/boot2`

Concettualmente il primo ed il secondo stadio sono parte dello stesso programma, sulla stessa area del disco. Per limitazioni di spazio sono stati divisi in due, ma li installerai sempre insieme. Sono copiati dal file `/boot/boot` dall'installer o da bsdlabel (vedi sotto).

Questi sono posizionati fuori dai file system, nella prima traccia della slice di boot, a partire dal primo settore. Questo è il posto dove boot0, o qualsiasi altro boot manager, si aspetta di trovare un programma da avviare per continuare il processo di boot. Il numero di settori usati è facilmente determinabile dalla dimensione di `/boot/boot`.

`boot1` è molto semplice, poiché può essere lungo solo 512 byte, e conosce solo lo stretto necessario del bsdlabel di FreeBSD, il quale memorizza le informazioni sulle slice, per trovare ed eseguire `boot2`.

`boot2` è leggermente più sofisticato, e conosce il file system di FreeBSD abbastanza da potervi trovare dei file, e può fornire una semplice interfaccia per scegliere quale kernel o loader eseguire.

Poiché il loader è molto più complesso, e fornisce una gradevole interfaccia di facile utilizzo alla configurazione di avvio, `boot2` in genere lo esegue, ma in precedenza era incaricato di lanciare il kernel direttamente.

Esempio 12.2. Screenshot di `boot2`

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/boot/loader
    boot:

Se mai avrai bisogno di rimpiazzare il `boot1` ed il `boot2` installati, usa bsdlabel(8):

    # bsdlabel -B discoslice

dove `discoslice` sono il disco e la slice dal quale vuoi effettuare l'avvio, come ad esempio `ad0s1` per la prima slice sul primo disco IDE.

### Modalità Pericolosamente Dedicata:

Se nella sintassi del comando bsdlabel(8) usi solo il nome del disco, come `ad0`, creerai un disco pericolosamente dedicato, senza slice. Quasi sicuramente non è questo quello che vuoi fare, quindi controlla due volte il comando bsdlabel(8) prima di premere Invio.

### 12.3.3. Stadio Tre, `/boot/loader`

Il loader è l'ultimo stadio della procedura di avvio divisa in tre, e si trova sul file system, generalmente come `/boot/loader`.

Il loader deve essere inteso come un metodo user-friendly per la configurazione di avvio, tramite l'uso di un insieme di comandi integrati facili da usare, sostenuto da un potente interprete, con un insieme di comandi più complessi.

#### 12.3.3.1. Sequenza di Operazioni del Loader

Durante l'inizializzazione, il loader controllerà la console e i dischi, e cercherà di capire da quale disco si stia avviando. Imposterà le variabili di conseguenza, ed avvierà un interprete al quale potranno essere passati i comandi dell'utente in maniera interattiva o attraverso uno script.

Poi il loader leggerà `/boot/loader.rc`, che di default legge i settaggi di `/boot/defaults/loader.conf` il quale imposta dei valori di default ragionevoli per le variabili e inoltre `/boot/loader.rc` legge `/boot/loader.conf` per i cambiamenti locali a quelle variabili. In base a queste variabili `loader.rc` carica i moduli ed il kernel prescelti.

Infine, di default, il loader attende per 10 secondi la pressione di un tasto, ed avvia il kernel se non viene interrotto. Se invece viene interrotto, viene presentato all'utente un prompt in grado di comprendere un semplice insieme di comandi, dal quale l'utente può impostare precisamente le variabili, scaricare dalla memoria tutti i moduli, o caricarli, ed infine avviare o ri-avviare.

#### 12.3.3.2. Comandi Integrati nel Loader

Questi sono i comandi usati più comunemente. Per una discussione completa su tutti i comandi disponibili, guarda loader(8).

autoboot `secondi`

  Procede all'avvio del kernel se non viene interrotto nell'intervallo di tempo specificato, in secondi. Mostra un conto alla rovescia, e l'intervallo predefinito è di 10 secondi.

boot [-opzioni] [nomekernel]

  Procede immediatamente all'avvio del kernel, con le opzioni date, se ce ne sono, e con il nome del kernel specificato, se fornito.

boot-conf

  Va avanti con la stessa configurazione automatica di moduli basati sulle variabili come accade al boot. Questo ha senso solo se prima usi `unload`, e cambi delle variabili, in generale `kernel`.

help [argomento]

  Mostra un messaggio d'aiuto letto da `/boot/loader.help`. Se l'argomento dato è `index`, allora elenca tutti gli argomenti disponibili.

include `nomefile` ...

  Processa il file specificato. Il file viene letto, e interpretato riga per riga. Un errore blocca il comando include immediatamente.

load [-t tipo] `nomefile`

  Carica il kernel, il modulo del kernel, o il file del tipo specificato, con il nome specificato. Ogni argomento dopo `nomefile` viene passato al file.

ls [-l] [percorso]

  Mostra un elenco dei file nel percorso dato, o nella directory root, se non ne viene specificato uno. Se è specificato `-l`, verranno mostrate anche le dimensioni dei file.

lsdev [-v]

  Elenca tutti i dispositivi dai quali potrebbe essere possibile caricare moduli. Se viene specificata l'opzione `-v`, verranno stampati dettagli maggiori.

lsmod [-v]

  Mostra i moduli caricati. Se viene specificato `-v`, verranno stampati dettagli maggiori.

more `nomefile`

  Mostra i file specificati, con una pausa ad ogni pagina visualizzata.

reboot

  Riavvia immediatamente il sistema.

set `variabile`, set `variabile`=`valore`

  Imposta le variabili di ambiente del loader.

unload

  Rimuove tutti i moduli caricati.

#### 12.3.3.3. Esempi sul Loader

Qui ci sono alcuni esempi pratici sull'uso del loader:

- Per avviare semplicemente il vostro kernel abituale, ma in modalità singolo utente:

      boot -s

- Per scaricare dalla memoria i moduli e il kernel usuali, e poi caricare solo il vecchio (o un altro) kernel:

      unload
      load kernel.old

  Puoi usare `kernel.GENERIC` per riferirti al kernel generico che viene fornito nel disco d'installazione, o `kernel.old` per riferirti al kernel installato precedentemente (quando hai aggiornato o configurato il kernel, ad esempio).

  ### Nota:

  Usa il comando seguente per caricare i tuoi soliti moduli con un altro kernel:

      unload
      set kernel="kernel.old"
      boot-conf

- Per caricare uno script di configurazione del kernel (uno script automatizzato che faccia le cose che faresti tu normalmente configurando il kernel all'avvio):

      load -t userconfig_script /boot/kernel.conf

Indietro | Risali | Avanti
12.2. Il Problema dell'Avvio | Partenza | 12.4. Interazione con il Kernel Durante l'Avvio

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.