La Procedura di Avvio di FreeBSDSinossiavvioavviamentoIl processo di accensione di un computer e caricamento del sistema
operativo viene detto processo di avviamento, o
semplicemente avvio. La procedura di avvio di FreeBSD
fornisce un alto grado di flessibilità nel personalizzare quello
che succede quando avvii il sistema, dandoti la possibilità di
scegliere tra diversi sistemi operativi installati sullo stesso computer,
o anche tra diverse versioni dello stesso sistema operativo o tra diversi
kernel installati.Questo capitolo fornisce i dettagli sulle opzioni di configurazione
che puoi impostare per personalizzare il processo di avvio di FreeBSD.
Ciò comprende tutto quello che avviene fino a quando il kernel
viene lanciato, vengono controllate le periferiche, e viene avviato
&man.init.8;. Se non sei sicuro di sapere quando tutto questo accada, si
tratta del momento in cui il colore del testo a video cambia da bianco
brillante a grigio.Dopo aver letto questo capitolo, saprai:Quali sono i componenti del sistema di avvio di FreeBSD, e come
interagiscono.Le opzioni che puoi impostare per i componenti durante
l'avviamento di FreeBSD per controllare il processo di avvio.Le basi dei &man.device.hints.5;.Solo per x86Questo capitolo descrive la procedura di avvio di FreeBSD su sistemi
Intel x86.Il Problema dell'AvvioAccendere un computer e far partire il sistema operativo pone un
dilemma interessante. Per definizione, il computer non sa fare
nulla finché non viene avviato il sistema operativo. Questo
include anche l'esecuzione dei programmi dal disco. Dunque se il computer
non può eseguire un programma da disco senza il sistema operativo,
ed i programmi del sistema operativo sono sul disco, come viene avviato il
sistema operativo?Questo è un problema analogo a quello descritto nel
libro Le Avventure del Barone di Munchausen. Un
personaggio era caduto in una botola, e ne era uscito tirandosi su da
sé (in inglese bootstrap), riuscendo nell'intento
solo con i propri sforzi. Nei primi giorni dei calcolatori al meccanismo
usato per caricare il sistema operativo fu applicato il termine
bootstrap, ed in seguito venne abbreviato in
booting (in italiano avvio).BIOSBasic Input/Output SystemBIOSSu sistemi con hardware x86 il BIOS (Basic Input/Output System)
è il responsabile del caricamento del sistema operativo. Per fare
ciò, il BIOS cerca nel disco rigido il Master Boot Record (MBR),
che deve essere in una specifica posizione sul disco. Il BIOS ha
abbastanza conoscenze per caricare ed eseguire l'MBR, ed assume che l'MBR
possa portare avanti il resto dei compiti relativi al caricamento del
sistema operativo, possibilmente con l'aiuto del BIOS.Master Boot Record (MBR)Boot ManagerBoot LoaderIl codice all'interno del MBR è di solito riferito come
boot manager, specialmente quando interagisce
con l'utente. In questo caso la maggior parte del suo codice è
nella prima traccia del disco o direttamente
nel file system dell'OS. (Il boot manager qualche volta viene chiamato
anche boot loader, ma gli utenti di FreeBSD
usano questo termine per una successiva fase di avvio.) Boot
manager popolari sono boot0 (a.k.a.
Boot Easy, il boot manager standard di &os;),
Grub, GAG, e
LILO.
(Solo boot0 è all'interno del
MBR.)Se hai solo un sistema operativo installato sui tuoi dischi allora
sarà sufficiente il MBR standard del PC. Questo MBR cerca la prima
slice avviabile (a.k.a. attiva) sul disco, e quindi esegue il codice
in quella slice per caricare il resto del sistema operativo. Il
MBR installato da &man.fdisk.8;, di default, è come un MBR.
È basato su /boot/mbr.Se hai installato più sistemi operativi sui tuoi dischi allora
puoi installare un boot manager diverso, che mostra una lista dei diversi
sistemi operativi, e ti permette di scegliere quale avviare. Nella
prossima sezione ne vengono presentati due.Il resto del sistema di avvio di FreeBSD è diviso in tre stadi.
Il primo stadio viene eseguito dall'MBR, che sa solo il necessario per
mettere il computer in un certo stato ed eseguire il secondo stadio.
Quest'ultimo può fare poco di più, prima di eseguire il
terzo. Il terzo stadio esaurisce il compito di caricare il sistema
operativo. Il lavoro è diviso in queste tre parti perché
gli standard dei PC pongono dei limiti alla dimensione dei programmi che
possono essere eseguiti nei primi due stadi. Concatenando i compiti
si permette a FreeBSD di fornire un loader più flessibile.kernelinitA questo punto viene avviato il kernel ed esso comincia a verificare i
dispositivi e ad inizializzarli. Una volta che la procedura di avvio del
kernel è finita, il kernel passa il controllo al processo utente
&man.init.8;, che si assicura che i dischi siano in uno stato usabile.
Poi &man.init.8; avvia la configurazione delle risorse a livello utente
che monta i file system, imposta le schede di rete per comunicare via
rete, ed in generale fa partire tutti i processi che generalmente sono in
esecuzione su un sistema FreeBSD all'avvio.Il Boot Manager e le Fasi di BootBoot ManagerIl Boot ManagerMaster Boot Record (MBR)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 &man.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:Screenshot di boot0F1 DOS
F2 FreeBSD
F3 Linux
F4 ??
F5 Drive 1
Default: F2Altri 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:&prompt.root; fdisk -B -b /boot/boot0 dispositivodove 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 &man.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=FreeBSDSpecifica 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
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.Stadio Uno, /boot/boot1, e Stadio Due,
/boot/boot2Concettualmente 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.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 &man.bsdlabel.8;:&prompt.root; bsdlabel -B discoslicedove 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 DedicataSe nella sintassi del comando &man.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
&man.bsdlabel.8; prima di premere Invio.Stadio Tre, /boot/loaderboot-loaderIl 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.Sequenza di Operazioni del LoaderDurante 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.loaderconfigurazione del loaderPoi 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.Comandi Integrati nel LoaderQuesti sono i comandi usati più comunemente. Per una
discussione completa su tutti i comandi disponibili, guarda
&man.loader.8;.autoboot secondiProcede 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
-opzioninomekernelProcede immediatamente all'avvio del kernel, con le opzioni
date, se ce ne sono, e con il nome del kernel specificato, se
fornito.boot-confVa 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
argomentoMostra 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 tiponomefileCarica 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 percorsoMostra un elenco dei file nel percorso dato, o nella
directory root, se non ne viene specificato uno. Se è
specificato , verranno mostrate anche le
dimensioni dei file.lsdev Elenca tutti i dispositivi dai quali potrebbe essere
possibile caricare moduli. Se viene specificata l'opzione
, verranno stampati dettagli maggiori.lsmod Mostra i moduli caricati. Se viene specificato
, verranno stampati dettagli maggiori.more nomefileMostra i file specificati, con una pausa ad ogni
pagina visualizzata.rebootRiavvia immediatamente il sistema.set variabileset
variabile=valoreImposta le variabili di ambiente del loader.unloadRimuove tutti i moduli caricati.Esempi sul LoaderQui ci sono alcuni esempi pratici sull'uso del loader:modalità singolo utentePer avviare semplicemente il vostro kernel abituale,
ma in modalità singolo utente:boot -sPer scaricare dalla memoria i moduli e il kernel usuali,
e poi caricare solo il vecchio (o un altro) kernel:kernel.oldunloadload kernel.oldPuoi 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:unloadset kernel="kernel.old"boot-confPer 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.confInterazione con il Kernel Durante l'Avviokernelinterazione all'avvioUna volta che il kernel è stato caricato dal loader (come di consueto) o da boot2 (scavalcando il loader), esso
esamina i suoi flag di avvio, se ce ne sono, e aggiusta il suo
comportamento come necessario.I Flag di Avvio del Kernelkernelflag di bootQui ci sono alcuni dei più comuni flag di avvio:durante l'inizializzazione del kernel, chiede il dispositivo
da montare come file system di root.avvia da CDROM.esegue UserConfig, il programma di configurazione del kernel
all'avvioavvia in modalità singolo utenteaumenta la verbosità durante l'avvio del kernelCi sono altri flag di avvio, leggi &man.boot.8; per maggiori
informazioni su di essi.TomRhodesContributo di Device Hintsdevice.hintsQuesta è una caratteristica di FreeBSD 5.0 e successive
che non esiste nelle versioni precedenti.Durante l'avvio iniziale del sistema, il boot &man.loader.8;
leggerà il file &man.device.hints.5;. Questo file contiene
informazioni di avvio per il kernel dette variabili, e talvolta indicate
come device hints, suggerimenti per i dispositivi.
Questi device hints vengono usati dai driver per la
configurazione delle varie periferiche.I device hints possono essere specificati anche nel prompt del terzo
stadio del boot loader.
Le variabili possono essere aggiunte usando il comando
set, rimosse con unset, e
visualizzate con show. Inoltre, in questo modo,
le variabili impostate nel file /boot/device.hints
possono essere scavalcate. I device hint inseriti in questo modo non sono
permanenti e verranno dimenticati al riavvio seguente.Una volta che il sistema è stato avviato, può essere
usato il comando &man.kenv.1; per mostrare tutte le variabili.La sintassi per il file /boot/device.hints
è una variabile per riga, usando il solito cancelletto
# per indicare i commenti. Le linee sono costruite come
segue:hint.driver.unit.keyword="valore"La sintassi nel terzo stadio del boot loader è:set hint.driver.unit.keyword=valoredriver è il nome del driver per il
dispositivo, unit è il numero di unità
per quel driver, e keyword è la parola chiave
per quell'hint. La parola chiave può essere:at: specifica il bus sul quale è
collegato il dispositivo.port: specifica l'indirizzo iniziale di
I/O che deve essere usato.irq: specifica il numero di interrupt request
che deve essere usato.drq: specifica il numero del canale DMA.maddr: specifica l'indirizzo di memoria fisico
occupato dal dispositivo.flags: imposta vari bit di flag per il
dispositivo.disabled: se impostato a 1 il
dispositivo è disabilitato.I driver possono accettare (o richiedere) più hints di quelli
elencati qui, si raccomanda quindi di verificare la loro pagina di
manuale. Per maggiori informazioni, consulta le pagine man
&man.device.hints.5;, &man.kenv.1;, &man.loader.conf.5;, e
&man.loader.8;.Init: Inizializzazione del Controllo dei ProcessiinitUna volta che il kernel ha finito di avviarsi, trasferisce il
controllo al processo utente init, che si trova in
/sbin/init, o al programma specificato
nella variabile init_path nel
loader.Sequenza di Riavvio AutomaticaLa sequenza di riavvio automatica assicura che i file system
disponibili sul sistema siano consistenti. Se qualcuno non lo è,
e &man.fsck.8; non può risolvere le inconsistenze, &man.init.8;
abbandona il sistema in modalità
singolo utente per permettere all'amministratore di sistema di
occuparsi dei problemi direttamente.Modalità Singolo Utentemodalità singolo utenteconsoleQuesta modalità può essere raggiunta attraverso la
sequenza di riavvio automatica,
o tramite l'avvio da parte dell'utente con l'opzione
o impostando la variabile boot_single
nel loader.Si può arrivare ad essa anche richiamando &man.shutdown.8;
senza l'opzione per il riavvio () o per l'arresto
(), dalla modalità multi utente.Se la console del sistema è settata come
insecure in /etc/ttys,
allora il sistema richiede la password di root
prima di entrare in modalità singolo utente.Una Console Insicura in /etc/ttys# name getty type status comments
#
# Se la console è settata come "insecure", allora init chiederà
# la password di root per andare in modalità singolo utente .
console none unknown off insecureAvere una console insecure significa
ritenere insicura la sicurezza fisica della console, ed assicurarsi
che solo chi conosce la password di root possa
usare la modalità singolo utente, non significa voler eseguire
la console in maniera insicura. Dunque, se vuoi avere sicurezza,
scegli insecure, non
secure.Modalità Multi Utentemodalità multi utenteSe &man.init.8; ritiene che i tuoi file system siano in ordine,
o quando l'utente ha terminato il lavoro in modalità singolo utente, il
sistema entra in modalità multi utente, nella quale inizia la
configurazione delle risorse del sistema.Configurazione delle Risorse (rc)file rcIl sistema di configurazione delle risorse legge i valori
predefiniti della configurazione da
/etc/defaults/rc.conf, e
i dettagli specifici del sistema da
/etc/rc.conf, e poi procede al montaggio dei
file system del sistema elencati in
/etc/fstab, avvia i servizi di rete,
avvia vari demoni di sistema, ed infine esegue gli script di avvio dei
pacchetti installati localmente.La pagina man di &man.rc.8; è un buon riferimento per la
configurazione delle risorse del sistema, poiché esamina gli
script stessi.Sequenza di SpegnimentospegnimentoAl momento di uno spegnimento controllato, tramite &man.shutdown.8;,
&man.init.8; cercherà di eseguire lo script
/etc/rc.shutdown, e poi procederà ad inviare
a tutti i processi il segnale TERM, e successivamente
il segnale KILL a quelli che non sono terminati in
tempo.Per spegnere una macchina FreeBSD su architetture e sistemi
che supportano la gestione dell'energia, usa semplicemente il comando
shutdown -p now per disattivare immediatamente
l'alimentazione. Per riavviare semplicemente un sistema FreeBSD, usa solo
shutdown -r now. Avrai bisogno di essere
root o un membro del gruppo
operator per eseguire &man.shutdown.8;.
Possono essere usati anche i comandi &man.halt.8; e &man.reboot.8;,
fai riferimento alle loro pagine di man ed a quella di &man.shutdown.8;
per maggiori informazioni.La gestione dell'energia richiede il supporto &man.acpi.4; nel
kernel o caricato come modulo.