12.3 L'MBR, e gli Stadi di Avvio Uno, Due, e Tre

12.3.1 MBR, /boot/boot0

L'MBR di FreeBSD è posizionato in /boot/boot0. Questa è una copia dell'MBR, poiché il vero MBR deve essere posizionato su una parte speciale del disco, fuori dell'area di FreeBSD.

Siccome il programma nell'MBR può essere lungo solo 512 byte, boot0 è molto semplice. Se hai installato l'MBR di FreeBSD ed hai vari sistemi operativi installati sui tuoi dischi allora vedrai una schermata simile a questa al momento dell'accensione:

Esempio 12-1. Screenshot di boot0

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

Default: F2

Altri sistemi operativi, in particolare Windows® 95, 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.

Comunque, se sei un utente Linux e preferisci che sia LILO a controllare il processo di avvio, puoi modificare /etc/lilo.conf per avviare FreeBSD, e selezionare Leave The Master Boot Record Untouched durante il processo di installazione di FreeBSD. Se hai installato il boot manager di FreeBSD, puoi avviare Linux e modificare il file di configurazione di LILO, /etc/lilo.conf aggiungendo la seguente opzione:

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

che permetterà l'avvio di FreeBSD e Linux via LILO. Nel nostro esempio, usiamo XY per determinare quale drive e quale partizione usare. Se stai usando un drive SCSI, dovrai cambiare /dev/hdXY in qualcosa di simile a /dev/sdXY, dove viene usata ancora la sintassi XY. L'opzione loader=/boot/chain.b può essere omessa se hai entrambi i sistemi operativi sullo stesso drive. Ora puoi eseguire /sbin/lilo -v per effettuare i tuoi cambiamenti, che dovrebbero essere confermati con messaggio su schermo.

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.

Essi si trovano sul settore di avvio della slice di avvio, dove boot0, o ogni altro programma nell'MBR si aspetta di trovare il codice da eseguire per proseguire la procedura di avvio. I file nella directory /boot sono copie dei file reali, che sono immagazzinati fuori dal file system di FreeBSD.

boot1 è molto semplice, poiché può essere lungo solo 512 byte, e conosce solo lo stretto necessario del disklabel 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)/kernel
boot:

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

# disklabel -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 disklabel(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 disklabel(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
    

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>.