Dipartimento di Informatica e Scienze dell’Informazione
Il master boot record
Il master boot record e’ completamente contenuto all’interno del primo
settore di ogni disco ed esattamente per ogni hard disk si trova
all’indirizzo: cylinder 0, head 0, sector 1.
E’ possibile creare e modificare il MBR tramite svariati programmi tra i
quali il piu’ conosciuto e’ FDISK.
Ogni MBR contiene una tabella contente 4 entry che viene chiamata
partition table.
Al completamento del POST (power on self test), il Bios chiama un INT
19, un istruzione che solitamente tenta di leggere un settore di boot
all’interno del floppy disk. E’ da notare che anche la pressione dei tasti
CTRL-ALT-DEL richiama l’esecuzione dell’ INT 19.
Se durante la lettura del floppy viene rilevato un boot sector, questo
viene copiato all’indirizzo 0000:7C00 e l’INT 19 esegue un salto (jump) a
questo indirizzo.
Se non viene trovato un settore di boot il codice contenuto all’interno dell’
INT 19 cerca di leggere l’MBR del primo hard disk
Corso di SISTEMI OPERATIVI
1
Dipartimento di Informatica e Scienze dell’Informazione
boot
Una volta trovato, l’MBR viene copiato alla locazione di memoria
0000:7C00.
Il programma che viene eseguito all’interno dell’ MBR legge la
propria partition table alla ricerca di una partizione attiva
(bootable).
Se la ricerca ha esito positivo, il boot sector di questa partizione
viene copiato alla locazione di memoria 0000:7C000 e il codice
dell’MBR esegue un salto a quel indirizzo
(perche’ questo possa avvenire una delle prime istruzioni che
esegue l’MBR consiste nello shiftarsi in avanti, eseguendo una
copia di se stesso, all’indirizzo 0000:0600 per lasciar posto al
caricamento del boot sector)
Corso di SISTEMI OPERATIVI
2
Dipartimento di Informatica e Scienze dell’Informazione
boot
Se non viene trovata nessuna partizione attiva viene
eseguito un INT 18 e il sistema si ferma.
Ogni sistema operativo ha il proprio formato di boot
sector. Generalmente il piccolo programma
all’interno del boot sector localizza la prima parte
del loader del kernel del sistema operativo oppure
direttamente il kernel stesso oppure ancora un
programma gestore di boot, e lo copia in memoria
Corso di SISTEMI OPERATIVI
3
Dipartimento di Informatica e Scienze dell’Informazione
boot
La sequenza di ricerca del boot sector, chiamata
anche sequenza di boot, generalmente e’ configurabile
tramite il setup del Bios.
Alcuni indirizzi dell’MBR
Il codice dell’ MBR inizia all’offset 0000
I messaggi dell’ MBR iniziano all’offset 008b
La partition table inizia all’offset 01be
La firma (signature)e’ all’offset 01fe
Corso di SISTEMI OPERATIVI
4
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
LInux LOader (LILO)
Lilo e’ un boot loader per linux, non dipende da uno specifico file system e
puo’ eseguire il boot dell’ immagine di un kernel linux sia da floppy disk che
da hard disk e nello stesso tempo puo’ funzionare da gestore di boot per
altri sistemi operativi
Lilo e’ un insieme di diversi programmi e file di configurazione:
-Il map installer e’ un programma che gira sotto linux e si occupa di
installare tutti i file che sono necessari affinche’ Lilo funzioni correttamente.
Solitamente il programma si trova in /sbin/lilo e occorre eseguirlo ogni volta
che vengono apportate delle modifiche alla configurazione.
-Files contenenti dati sono necessari a Lilo nel momento del boot.
Generalmente sono situati in /boot dove il piu’ importante e’ il boot loader
(descritto di seguito) e il map file /boot/map dove il map installer registra la
posizione del kernel. Il file di configurazione e’ in /etc/lilo.conf.
-boot loader e’ una parte di Lilo che e’ caricata dal bios e che ha il compito
di caricare i kernel o i boot sector di altri sistemi operativi. Inoltre fornisce
una semplice interfaccia a linea di comando che consente all’utente di
selezionare il sistema desiderato
Lilo puo’ accedere alle seguenti parti del sistema:
-la partizione di root spesso importante perche’ contenente /boot e i kernels
Corso di SISTEMI OPERATIVI
5
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
-il settore di boot contiene la prima parte del Lilo boot loader. Si occupa
di caricare , la seconda e piu’ grossa parte del loader. Tipicamente
entrambi i loaders sono contenuti in /boot/boot.b
-il kernel e’ caricato e avviato tramite il boot loader
Occorre notare che molti dei files che Lilo richiede per poter lavorare
nella fase di boot devono poter essere accessibli dal Bios. Questo e’
causa di una importante restrizione.
Il Lilo boot sector e’ progettato per essere usato come partition boot
sector, questo significa che puo’ ospitare una tabella delle partizioni,
pertanto puo’ essere installato nelle seguenti locazioni:
-nel settore di boot di floppy disk linux (/dev/fd0)
-nell’MBR del primo hard disk (/dev/hda, /dev/sda).
-nel settore di boot di una partizione primaria del primo disco contenente
un file system linux (/dev/hda1) .
-nell’MBR di una partizione estesa.
Occorre specificare che molte versioni di fdisk non consentono
l’attivazione di una partizione estesa.Per far si’ che cio’ avvenga e’
possibile utilizzare il tool activate contenuto all’interno di lilo.
Corso di SISTEMI OPERATIVI
6
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
Lilo non puo essere installato nelle seguenti locazioni:
-nel settore di boot di un floppy disk o in una partizione primaria
di un sistema diverso da linux
-nella partizione di swap di LInux
-nel settore di boot di una partizione estesa.
-su di un disco secondario.
Master boot record
Boot sector
DOS-MBR
DOS-MBR
MS-DOS
LILO
LILO
Corso di SISTEMI OPERATIVI
Operating system
COMMAND.COM
Linux
COMMAND.COM
Altri OS
Linux
Altri OS
7
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
L’ultima soluzione nella tabella precedente presenta lo svantaggio
di dover sovrascrivere il MBR originale. Per avere maggiore
sicurezza di poter ripristinare le condizioni iniziali occorre fare una
copia dell’MBR originale
I passi che occorre seguire per questa configurazione sono:
dd if= /dev/hda of=/fd/MBR bs=512 count=1
Corso di SISTEMI OPERATIVI
8
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
Un esempio di file di configurazione lilo.conf
boot=/dev/hda2
map=/boot/map
install=/boot/boot.b
#prompt
#timeout=50
restricted
password= ‘pippo'
message=/boot/message
linear
default=linux
#image=/boot/vmlinuz-2.2.16-22
image=/boot/vmlinuz-2.2.17-14
label=linux
read-only
root=/dev/hda6
image=/boot/vmlinuz-2.2.16-22
label=linux-2.2.16
read-only
root=/dev/hda6
Corso di SISTEMI OPERATIVI
9
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
Restrizioni causate dal Bios
Le piu’ comuni restrizioni che rigurdano Lilo sono la limitazione al
numero di hard disk e l’incapacita’ di gestire numeri di cilindri superiori al
1024.
Benche’ la prima restrizione sia ormai stata eliminata nella totalita’ delle
odierne versioni di bios, dove il numero di dischi gestibili e’ sempre pari a
quattro, la limitazione al numero di cilindri permane in particolare quando
si parla di dischi IDE. Lilo e’ in grado di accorgersi di questo problema e
abortire l’installazione nel caso in cui si tenti di installare al di sopra del
1024esimo cilindro.
Ci sono quattro approcci che possono risolvere questo problema:
-usare una partizione differente che e’ situata sulla prima partizione del
primo disco e sta al di sotto del 1024 cilindro. Questo e’ accettabile
anche se la partizione in questione e’ di tipo Dos.
Corso di SISTEMI OPERATIVI
10
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
-ripartizionare il disco. E’ un’operazione che causa la perdita di
tutti i dati presenti precedentemente.
-se sul sistema e’ gia’ presente un sistema operativo si puo’
provare a far gestire il boot a questo sistema. Nel caso di
Dos/W95/W98 si puo’ ricorrere all’uso di loadlin mentre nel caso
di Nt/W2k si puo’ utilizzare boot.ini.
-se tutte le precedenti procedure falliscono rimane l’installazione
di un nuovo Bios, di un differente controller o di una differente
configurazione dei dischi.
Lilo dipende dal bios nel caricamento di:
-/boot/boot.b
-/boot/map
-tutti i kernels
-i messaggi di avvio
Corso di SISTEMI OPERATIVI
11
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
Alcune configurazioni tipiche:
 Singolo hard disk, Linux installato su di una partizione primaria:
se almeno una partizione primaria e’ utilizzata come Linux file system
(/ ,/usr,/home,…,) ad eccezzione della partizione di swap ovviamente,
allora il boot sector LiLo puo’ essere installato su di una di queste
partizioni e puo’ essere “bootata” dall’ MBR originale.
 Singolo hard disk, Linux installato su di una partizione logica:
se non esiste la possibilita’ di avere una partizione primaria con file
system linux ma solamente partizioni logiche allora il boot sector LiLo
puo’ essere installato nel partition sector della partizione estesa.
Dal momento che molti programmi fdisk non sono in grado di rendere
attiva una partizione estesa, questo puo’ essere fatto tramite il
programma activate fornito appositamente con la distribuzione LiLo.
 Doppio hard disk, con linux installato sul primo disco (almeno
parzialmente:
si ricade nei casi precedenti e il secondo disco non influisce.
Corso di SISTEMI OPERATIVI
12
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo



Doppio hard disk, Linux sul secondo disco, il primo disco ha una
partizione estesa:
Lilo puo’ essere installato nel partition sector della partizione estesa
del primo hard disk.(occorre utilizzare activate)
Doppio hard disk, Linux sul secondo disco, non si hanno partizioni
estese sul primo disco:
in questo caso l’unico posto dover poter installare LiLo e’ il master
boot record del primo hard disk.
Piu’ di due hard disk:
questa situazione e’ variabile a seconda delle capacita’ del Bios di
indirizzare un numero di hard disk superiore a due. Quando si cerca
di accedere al terzo o quarto disco, LiLo visualizza un warning (BIOS
drive 0xnumber may not be accessible): se il Bios supporta piu’ di
due hard disk si puo’ proseguire, diversamente il warning viene
considerato fatal error.
Corso di SISTEMI OPERATIVI
13
Dipartimento di Informatica e Scienze dell’Informazione
Un esempio di gestore di boot: LiLo
/ boot su di una partizione Dos:
I recenti Kernels supportano la possibilita’ di installare e gestire la
partizione /boot anche all’interno di file system MS-Dos (UMSDOS)
La partizione Dos deve essere montata in modo read-write e
generalmente viene creata la partizione /dos/linux dove vengono
copiati tutti I file contenuti all’ interno di /boot e viene creato un link
simbolico che rimpiazza /boot e redireziona a /dos/linux
E’ importante notare che la deframmentazione della partizione dos
porterebbe inevitabilmente a rendere Linux o addirittura l’intero
sistema unbootable.

Corso di SISTEMI OPERATIVI
14
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
Come visto in precedenza il settore di boot viene caricato
all’indirizzo 0x07C00, in questo caso la prima istruzione muove
se stesso all’indirizzo 0x9A000 (da 0x9A000 a 0x9B000) e carica
il boot loader secondario all ‘indirizzo 0x9B000 passandogli il
controllo dell’esecuzione. In questa fase la graduale
visualizzazione a monitor della scritta “LILO:” fornisce una
diagnostica delle fasi di boot. Infatti la prima L compare dopo il
move del codice, e la I subito prima del passaggio di esecuzione
al boot loader secondario. Nel caso in cui il caricamento del boot
loader secondario incontra degli errori, viene visualizzata una
sequenza interminabile di codice esadecimale a due cifre.
Il boot loader secondario carica la descriptor table all’indirizzo
0x9D200 e il settore contenente la default command line
all’indirizzo 0x9D600 e aspetta un input dall’utente.
*se e’ stata impostata una fallback command line questa verra’
copiata sul settore della default command line
Corso di SISTEMI OPERATIVI
15
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
Se l’utente ha fornito un immagine Ram disk , questo file viene caricato
sotto la fine della memoria fisica o comunque sotto i 16 Mb. L’indirizzo
iniziale e’ abbassato al vicino inizio pagina per far in modo che l’area
occupata dal Ram disk possa, successivamente, facilmente ritornare a
far parte della memoria disponibile (free memory pool).
Il limite dei 16 MB e’ dovuto al fatto che le funzioni del Bios usate per
trasferire i dati in memoria sono limitate ad uno spazio di indirizzi di 24 bit.
Successivamente il settore di boot del floppy e’ caricato all’indirizzo
0x90000 (in realta’ verra utilizzato solo per le informazioni di setup), la
parte di setup e’ caricata all’indirizzo 0x90200 e il kernel a 0x10000.
Durante questa fase il settore del map file e’ caricato all’indirizzo
0x9D000.
Se l’immagine caricata e’ effettivamente l’immagine di un kernel, il suo
codice di setup prende il controllo.
Se invece viene caricato un differente sistema operativo le operazioni
sono un po’ piu’ complicate: il chain loader viene caricato a 0x90200 e il
settore di boot del sistema operativo viene caricato a 0x90400. Il chain
loader sposta la tabella delle partizioni (caricata a 0x903BE come parte
del chain loader) all’indirizzo 0x00600 e il settore di boot a
0x07C00.Dopodiche’ il controllo passa al settore di boot.
Corso di SISTEMI OPERATIVI
16
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
I chain loaders che consentono il boot da un secondo disco
installano anche una piccola funzione che intercetta le chiamate
del bios e modifica il numero dei dischi all’inizio della memoria.
Il boot loader secondario visualizza la seconda “L” dopo essere
partito e una “O” dopo aver caricato la descriptor table e la
default command line.
Corso di SISTEMI OPERATIVI
17
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
Vediamo i riferimanti tra i files di lilo
Default
command line
Image
descriptors
Boot sector
map
Primary
boot loader
Secondary
boot loader
boot.b
Corso di SISTEMI OPERATIVI
18
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
Il settore di boot contiene il boot loader primario,
l’indirizzo del settore contenente la linea di
comando di default, gli indirizzi della tabella di
descrizione e l’indirizzo del settore del boot loader
secondario. Il settore di boot e’ copiato dal file
boot.b
ll map file e’ costituito da sezioni e da speciali
settori di dati . Ogni sezione copre un numero
definito di settori del disco, inoltre contiene gli
indirizzi dei settori degli altri file.
I cinque settori all’inizio del map file sono speciali: il
primo settore contiene la linea di comando di
default, i due successivi settori contengono la
tavola di descrizione dell’immagine di boot, il quarto
settore contiene tutti zero e viene mappato ogni
qualvolta un file contiene una “hole”. Il quinto
settore contiene la tabella di traduzione della
tastiera.
Corso di SISTEMI OPERATIVI
linea di
comando di
default
descrittori
descrittori
zero
traduzione
tastiera
sezioni....
19
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
Un immagine del kernel
e’composta semplicemente da
una sequenza di settori che
devono essere caricati. La sezione
del map file contiene anche un
settore con una linea di comando
fallback e un settore con i
parametri delle opzioni di linea.
Un immagine Ram disk puo’
essere caricata opzionalmente
tramite una seconda map section.
descrittore
fallback
opzioni
sezione di map file
Kernel
image
Corso di SISTEMI OPERATIVI
20
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
La default command line nel map file
Il primo settore del map file e’ riservato alla linea di comando di
default. Fino a che l’utente, premendo lo shift, non invoca il
prompt o una linea di comando fornita esternamente e’ presente,
la linea di default viene interpretata come se fosse stata digitata
da tastiera.
I primi due byte del primo settore del map file devono contenere il
magic number DC_MAGIC (0xF4F2), sono seguiti da una stringa
NUL terminated della lunghezza massima di 510 byte. Occorre
notare che il boot loader limita la lunghezza delle linee di
comando, dopo aver rimosso gli spazi duplicati, a 78 caratteri.
La linea di comando puo’ essere disabilitata sia nascondendo il
Magic number sia usando un NUL byte come linea si comando.
Corso di SISTEMI OPERATIVI
21
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
Come si costruisce la linea dei parametri
Il kernel e’ in grado di processare i parametri che vengono forniti
tramite il boot loader.
La stringa dei parametri e’ una stringa NUL-terminated di tipo
ASCII che contiene parole separate da spazi o coppie del tipo
variabile=valore.
Per poter passare al kernel la stringa di parametri occorre settare
i seguenti descrittori:
0x90020 il magic number 0xA33F
0x90022 l’offset del primo byte della linea di parametri relativa a
0x90000.
Il boot loader compone la linea di parametri partendo dalla linea
di comando, dal settore delle opzioni, e da alcuni prefissi generati
internamente (tipicamente auto e BOOT_IMAGE=)
Corso di SISTEMI OPERATIVI
22
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
Linea di comando
Nome
immagine
Prefisso
Stringa di parametri
passati al kernel
Opzioni della linea di
comando
Nome
immagine
Opzioni statiche
Opzioni della linea di
Opzioni statiche
Settore delle opzioni
Esempio:
Linea di comando: vmlinuz root=802
Settore delle opzioni: root=801 ro
si ottiene: BOOT_IMAGE=vmlinuz root=801 ro root=802
dal momento che la linea delle opzioni puo’ essere sovrascritta. la prima opzione root e’
ignorata dal kernel
Corso di SISTEMI OPERATIVI
23
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
Interfaccia esterna:
Lilo e’ in grado di ricevere la propria linea di comando da un
programma che ha eseguito precedentemente il boot.
Keyboard translation
La pressione dei tasti della tastiera di un pc genera quelli che in
gergo vengono definiti “scan codes” che non sono altro che
numeri chiave. Per default il Bios assume che la tastiera abbia un
layout US e traduce lo scan codes ricevuto nel character codes
relativo al carattere che e’ stampigliato sul tasto che e’ stato
premuto. Al momento del boot, Lilo ha accesso ai servizi forniti
dal Bios e di conseguenza riceve i character codes di una tastiera
US. La keyboard translation si occupa quindi di rimappare questi
character codes con quelli relativi al layout della tastiera in uso.
Corso di SISTEMI OPERATIVI
24
Dipartimento di Informatica e Scienze dell’Informazione
Inside LiLo
LiLo ottiene le informazioni del layout della tastiera puntando alla
keyboard translation table usata da Linux (/usr/lib/kbd/keytables).
Il programma keytab-lilo.pl leggendo il file precedente e’ in grado
di generare la Keyboard translation da inserire nel map installer.
Per convenzione il file binario generato da keytab-lilo.pl e’ inserito
in /boot/nome.ktl (Keyboard Table for Linux).
Ad esempio per una tastiera italiana si puo’ procedere come
segue:
keytab-lilo.pl italian >/boot/italian.ktl
Corso di SISTEMI OPERATIVI
25
Scarica

Sisop3