[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Il caricamento di un sistema operativo avviene perché, all'atto dell'accensione di un elaboratore, il firmware (il BIOS degli elaboratori i386) si occupa di leggere ed eseguire un piccolo programma residente all'inizio del disco fisso o di un dischetto. Negli elaboratori i386 questa parte iniziale del disco fisso è l'MBR, o il Master boot record, costituito da un solo settore (512 byte). Quando si fa riferimento a un dischetto, si parla di settore di avvio o di boot. Questo piccolo programma iniziale si occupa a sua volta di avviare il kernel.
Nei sistemi con architettura i386 esistono almeno cinque modi per effettuare il caricamento di GNU/Linux: un dischetto di avvio, GRUB, LILO, Loadlin e SYSLINUX. In questo capitolo si trattano i metodi di avvio più facili da comprendere; in capitoli separati viene descritto l'uso di GRUB e di LILO, che sono invece i sistemi di avvio più importanti per un sistema GNU/Linux.
Dal punto di vista tecnico, il modo più semplice di avviare GNU/Linux è quello di creare un disco di avvio contenente solo il kernel. Nell'esempio seguente si copia il kernel vmlinuz
nel dischetto contenuto della prima unità.(1)
#
cp vmlinuz /dev/fd0
Il kernel è così in grado di avviarsi da solo, ma può non essere stato predisposto per utilizzare esattamente il file system principale desiderato, così come altri elementi predefiniti potrebbero non corrispondere alla realtà. Si utilizza il programma rdev per alterare questi elementi direttamente nel file del kernel o nell'immagine copiata nel dischetto.
rdev [opzioni] [immagine [altre_opzioni]]
Legge o imposta i parametri di un'immagine di un kernel. L'immagine in questione può essere indicata come un nome di file, o un nome di dispositivo (tipicamente /dev/fd0
).
rdev immagine
Visualizza il nome di dispositivo corrispondente al file system principale (root) indicato attualmente nell'immagine. Si tratta di visualizzare il nome della partizione che verrà utilizzata per montare la directory radice del file system.
rdev immagine dispositivo
Specifica un nuovo nome di dispositivo da utilizzare come partizione da montare nella directory radice.
rdev -R immagine 1
Indica di attivare inizialmente in sola lettura il dispositivo da montare nella directory radice.
rdev -R immagine 0
Indica di attivare inizialmente in lettura e scrittura il dispositivo da montare nella directory radice.
rdev -s immagine dispositivo
Indica di utilizzare il dispositivo indicato come area di scambio per la memoria virtuale (swap).
#
rdev /dev/fd0 /dev/hdb1
Configura l'immagine contenuta nel dischetto inserito nella prima unità, definendo che la partizione da montare nella directory radice è la prima del secondo disco fisso.
#
rdev -R /dev/fd0 1
Definisce che al momento dell'avvio del kernel la partizione principale sia montata in sola lettura in modo che il file system possa essere controllato.
Se si utilizza ancora il Dos, si può avviare un kernel Linux attraverso il programma Loadlin, (2) quando è in funzione il Dos. Loadlin è quindi un programma Dos, che deve poter raggiungere il file del kernel all'interno di una partizione Dos.
Per conoscere i dettagli sul funzionamento di Loadlin conviene consultare la documentazione allegata al programma.
Prima di poter utilizzare Loadlin occorre almeno avere avviato una volta il sistema GNU/Linux, allo scopo di trasferire un kernel nella partizione Dos. Se in principio è stato deciso di non utilizzare sistemi come GRUB o LILO per l'avvio, l'unica possibiltà per avviare GNU/Linux è data da un dischetto di avvio, magari uno di quelli che contiene solo il kernel.
Attraverso GNU/Linux si deve copiare il programma LOADLIN.EXE nel disco Dos e con esso anche il file del kernel. Quindi si può arrestare il sistema nel modo tradizionale e riavviare l'elaboratore facendo in modo di mettere in funzione il sistema operativo Dos.
Una volta riavviato il sistema operativo Dos si dovrebbero trovare i due file copiati poco prima attraverso GNU/Linux: VMLINUZ
(o qualunque altro nome riferito al file del kernel) e LOADLIN.EXE
.
Per avviare in modo semplice il sistema GNU/Linux mentre è in funzione il Dos, dovrebbe bastare il comando seguente. Si suppone che la partizione dedicata a GNU/Linux sia la seconda del primo disco fisso ATA.
C:\>
LOADLIN C:\VMLINUZ root=/dev/hda2 ro
In pratica, si dice a LOADLIN.EXE di caricare il file del kernel C:\VMLINUZ
in modo da utilizzare la seconda partizione del primo disco fisso (/dev/hda2
) cominciando con un accesso in sola lettura (in modo da permetterne il controllo prima che il sistema sia messo completamente in funzione).
Prima di avviare LOADLIN.EXE, vale forse la pena di disattivare gli eventuali sistemi di memoria cache del disco fisso. Se si usa SMARTDRV.EXE conviene scaricare la memoria cache nel modo seguente:
C:\>
SMARTDRV /C
In generale, la cosa migliore dovrebbe essere l'inserimento della chiamata a LOADLIN.EXE all'interno di un sistema di file AUTOEXEC.BAT
e CONFIG.SYS
che permetta l'avvio di configurazioni multiple.
L'utilizzo del programma LOADLIN.EXE è il modo più ragionevole di avviare un sistema GNU/Linux installato in un file system UMSDOS. Ciò proprio perché un file system UMSDOS si trova nella stessa partizione utilizzata per il Dos.
C:\>
LOADLIN C:\VMLINUZ root=/dev/hda1 rw
In questo caso, si dice a LOADLIN.EXE di caricare il file del kernel C:\VMLINUZ
in modo da utilizzare la prima partizione del primo disco fisso (/dev/hda1
) cominciando con un accesso sia in lettura che in scrittura.
SYSLINUX (3) è un sistema di avvio di GNU/Linux basato fondamentalmente su dischetti con file system Dos-FAT. A prima vista può sembrare qualcosa di superfluo, come una sorta di tentativo ulteriore di far convivere Dos e GNU/Linux in un uno stesso disco. In realtà non è così: si tratta di un sistema che facilita notevolmente la realizzazione di dischetti di avvio, tanto che quasi tutte le distribuzioni di GNU/Linux utilizzano dischetti di questo tipo.
SYSLINUX mette a disposizione un programma Dos, SYSLINUX.EXE, e un programma per GNU/Linux, syslinux, che predispone un dischetto, inizializzato precedentemente, con un file system Dos-FAT in modo che questo possa avviare un kernel Linux. Si procede nel modo seguente per creare un dischetto di avvio nella prima unità a dischetti:
C:\>
SYSLINUX A:
oppure
#
syslinux /dev/fd0
Quello che si ottiene è l'inserimento nel dischetto del programma LDLINUX.SYS e la creazione di un settore di avvio opportuno, che si occupa di avviarlo. Il minimo indispensabile per avviare il sistema è l'aggiunta nel dischetto (nella directory radice) di un kernel Linux denominato convenzionalmente LINUX
. Tuttavia, è conveniente predisporre un file di configurazione, SYSLINUX.CFG
, in modo da poter sfruttare effettivamente i vantaggi di questo sistema di avvio.
Una volta creato il dischetto, il kernel può essere sostituito quanto si vuole e così anche la configurazione nel file SYSLINUX.CFG
. Il settore di avvio del dischetto si limita ad avviare il programma LDLINUX.SYS, il quale provvede poi a leggere la configurazione e ad avviare il kernel.
Il file SYSLINUX.CFG
, che serve alla configurazione di questo sistema di avvio, è un file di testo normale, in cui le righe sono terminate indifferentemente con il carattere <LF> o con la sequenza <CR><LF> (in pratica, si può creare sia utilizzando strumenti Dos che Unix).
Concettualmente assomiglia al file /etc/lilo.conf
di LILO, con il vantaggio, rispetto a questo, di non dover creare un collegamento tra: settore di avvio, configurazione e kernel. Qui tutto viene gestito dal programma LDLINUX.SYS che si occupa di leggere la configurazione all'avvio e di agire di conseguenza.
L'esempio seguente mostra le caratteristiche principali di questo file di configurazione. In particolare permette di avviare il kernel contenuto nel file LINUX
, con diversi comandi di avvio.
DEFAULT linux TIMEOUT 0 DISPLAY INTRO.TXT PROMPT 1 F1 INTRO.TXT F2 VARIE.TXT LABEL linux KERNEL LINUX LABEL floppy KERNEL LINUX APPEND "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1" LABEL hda1 KERNEL LINUX APPEND "root=/dev/hda1 ro"
Segue la descrizione delle direttive che appaiono nell'esempio.
DEFAULT linux
Specifica di utilizzare in modo predefinito l'impostazione identificata dall'etichetta linux. Se questa non fosse stata specificata, significherebbe che si vuole avviare il kernel contenuto nel file linux
.(4)
TIMEOUT 50
Dopo 50 decimi di secondo (cinque secondi), senza che sia stato selezionato alcunché, viene avviato il sistema predefinito (in questo caso linux). Volendo fare in modo che sia obbligatorio l'intervento dell'utente, si può porre questo valore a zero.
DISPLAY INTRO.TXT
Visualizza il contenuto del file INTRO.TXT
che si deve trovare nella directory radice del dischetto. Attraverso questo sistema, si possono dare delle istruzioni all'utente sulla scelta delle varie voci di avvio, o sul modo di comporre un comando per il kernel.
PROMPT 1
Fa in modo che venga visualizzato l'invito all'utente a inserire qualcosa: boot:. Se il valore abbinato fosse zero, questo invito non verrebbe visualizzato.
F1 INTRO.TXT
Abbina la visualizzazione del contenuto del file INTRO.TXT
attraverso la pressione del tasto [F1].
F2 VARIE.TXT
Abbina la visualizzazione del contenuto del file VARIE.TXT
attraverso la pressione del tasto [F2].
LABEL linux
Definisce il nome dell'etichetta linux utilizzata in questo caso per fare riferimento all'avvio predefinito.
KERNEL LINUX
Indica di utilizzare il file LINUX
, collocato nella directory radice del dischetto, quando si seleziona l'etichetta linux.
LABEL floppy
Definisce il nome dell'etichetta floppy utilizzata in questo caso per fare avviare un sistema a partire da un'immagine contenuta in un dischetto, caricandola in un disco RAM. Come è già stato visto, viene sempre utilizzato il kernel contenuto nel file LINUX
; ma qui si definiscono alcuni parametri di avvio, specifici per il caricamento in un disco RAM, attraverso l'istruzione APPEND.
LABEL hda1
Definisce il nome dell'etichetta hda1 utilizzata in questo caso per fare avviare un sistema a partire dalla prima partizione del primo disco fisso. Come è già stato visto, viene sempre utilizzato il kernel contenuto nel file LINUX
; ma qui si definiscono i parametri di avvio necessari al caricamento del file system principale da /dev/hda1
, in sola lettura.
SYSLINUX ha una caratteristica importante: consente di predisporre diversi file di aiuto selezionabili dall'utente, prima dell'avvio del kernel. Questi file possono essere visualizzati premendo i tasti funzionali, secondo quanto definito all'interno del file di configurazione.
Dal momento che SYSLINUX non visualizza l'elenco dei tasti utilizzabili, è opportuno che uno di questi file sia visualizzato inizialmente, attraverso l'istruzione DISPLAY; inoltre è opportuno che in tutti questi file ci sia il riepilogo dei vari tasti che possono essere premuti.
Dischetto di avvio multiuso. "linux" avvia il kernel nel modo predefinito "floppy" avvia un dischetto come ramdisk "hda1" avvia il filesystem contenuto nella partizione /dev/hda1 Per ulteriori informazioni si può leggere la guida abbinata al tasto F2. F1=INTRO F2=VARIE
Il kernel non è sempre in grado di individuare da solo tutti i dispositivi fisici installati e a volte si desidera comunque di potergli dare delle istruzioni prima del suo avvio. Si tratta di parametri che gli possono essere passati in vari modi:
per mezzo dell'invito di avvio (boot prompt) quando si avvia attraverso LILO o SYSLINUX;
per mezzo di un'istruzione append, contenuta nel file /etc/lilo.conf
quando si avvia attraverso LILO, oppure nel file SYSLINUX.CFG
quando si avvia attraverso SYSLINUX;
attraverso l'aggiunta di argomenti finali nel comando kernel di GRUB.
Questi parametri, quando sono forniti, vengono indicati tutti insieme, separati tra loro da uno spazio. Ogni parametro non può contenere spazi.
Nella sezione seguente vengono indicati solo alcuni tipi di questi parametri. In particolare, non vengono descritti quelli specifici per i vari tipi di hardware. Il capitolo 30 raccoglie più dettagli sui parametri di avvio.
Si tratta di indicazioni date al kernel senza riferimenti a tipi particolari di hardware.
root=dispositivo
Permette di indicare un dispositivo differente da quello predefinito per montare il file system principale.
ro
Permette di definire un accesso iniziale al file system principale in sola lettura. Questa è la condizione necessaria per poter eseguire un controllo dell'integrità del file system prima di passare alla gestione normale.
rw
Permette di definire un accesso iniziale al file system principale in lettura e scrittura.
mem=dimensione
In caso di necessità, permette di definire la dimensione di memoria RAM che si ha a disposizione effettivamente. Si può indicare un numero esadecimale nella forma 0x..., oppure un numero decimale normale, seguito eventualmente dalla lettera k, che sta a indicare kibibyte (simbolo: Kibyte), oppure dalla lettera M, che sta a indicare mebibyte (simbolo: Mibyte).
init=programma_iniziale
Permette di definire il nome, completo di percorso, del programma che deve svolgere le funzioni di «processo iniziale» (Init). Il kernel provvede da solo a cercare /sbin/init
e in alternativa /etc/init
. Come ultima risorsa tenta di avviare /bin/sh
. Se per qualunque motivo non funziona il programma Init standard, si può tentare di avviare il sistema facendo partire la shell al suo posto.
reserve=indirizzo_i/o,estensione[,indirizzo_i/o,estensione]...
Permette di isolare una o più zone di indirizzi di I/O in modo che il kernel non esegua alcun tentativo di identificazione di componenti in quella zona. Di solito, dopo un'opzione del genere, si inseriscono le dichiarazioni esplicite dei dispositivi che ci sono effettivamente. Il primo valore, quello che esprime l'indirizzo, viene espresso attraverso una notazione esadecimale del tipo consueto (0x...), mentre il secondo è un numero decimale.
Come è stato accennato nella sezione 16.4, esistono diversi modi per fornire al kernel delle opzioni di avvio. Questi esempi dovrebbero chiarire le possibilità che ci sono a disposizione.
boot:
linux1 root=/dev/hda1 ro
Attraverso la riga di comando di avvio di LILO, oppure di SYSLINUX, si avvia la configurazione identificata dal nome linux1, si indica la partizione che si vuole montare come file system principale e l'accesso iniziale in sola lettura.
grub>
kernel (hd0,0)/boot/vmlinuz-2.4.2 root=/dev/hda1 ro
[Invio]
Questo esempio riguarda il comando kernel di GRUB, con il quale si vuole avviare il kernel corrispondente al file /boot/vmlinuz-2.4.2
contenuto nella prima partizione del primo disco fisso, dando al kernel le stesse informazioni dell'esempio precedente.
C:\>
LOADLIN C:\VMLINUZ root=/dev/hda1 ro
Come nell'esempio precedente, ma si avvia il sistema attraverso il programma Loadlin utilizzando il kernel C:\VMLINUZ
.
append="reserve=0x300,64 ether=11,0x300,eth0 ether=12,0x320,eth1"
Attraverso l'istruzione append del file /etc/lilo.conf
si riserva la zona di indirizzi I/O tra 30016 e 33F16 e di seguito si specificano due schede di rete Ethernet che utilizzano proprio quella zona di indirizzi.
APPEND "reserve=0x300,64 ether=11,0x300,eth0 ether=12,0x320,eth1"
Si tratta dello stesso esempio mostrato poco sopra, utilizzando però SYSLINUX e mettendo l'istruzione nel file SYSLINUX.CFG
.
Paul Gortmaker, Linux BootPrompt HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
daniele @ swlibero.org
1) Probabilmente, questa possibilità riguarda solo gli elaboratori i386.
4) Dal momento che in un file system Dos-FAT non conta la differenza tra maiuscole e minuscole tra i nomi dei file, in pratica si tratta del file LINUX
.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome caricamento_di_gnu_linux.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]