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:
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.
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.
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.
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.
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.
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.
Questi sono i comandi usati più comunemente. Per una discussione completa su tutti i comandi disponibili, guarda loader(8).
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.
Procede immediatamente all'avvio del kernel, con le opzioni date, se ce ne sono, e con il nome del kernel specificato, se fornito.
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
.
Mostra un messaggio d'aiuto letto da
/boot/loader.help
. Se l'argomento dato
è index
, allora elenca tutti gli
argomenti disponibili.
nomefile
...Processa il file specificato. Il file viene letto, e interpretato riga per riga. Un errore blocca il comando include immediatamente.
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.
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.
Elenca tutti i dispositivi dai quali potrebbe essere
possibile caricare moduli. Se viene specificata l'opzione
-v
, verranno stampati dettagli maggiori.
Mostra i moduli caricati. Se viene specificato
-v
, verranno stampati dettagli maggiori.
nomefile
Mostra i file specificati, con una pausa ad ogni pagina visualizzata.
Riavvia immediatamente il sistema.
variabile
, set
variabile
=valore
Imposta le variabili di ambiente del loader.
Rimuove tutti i moduli caricati.
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).
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>.