Title: Il master boot record
1Il master boot record
- Il master boot record e completamente contenuto
allinterno del primo settore di ogni disco ed
esattamente per ogni hard disk si trova
allindirizzo 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
allinterno del floppy disk. E da notare che
anche la pressione dei tasti CTRL-ALT-DEL
richiama lesecuzione dell INT 19. - Se durante la lettura del floppy viene rilevato
un boot sector, questo viene copiato
allindirizzo 00007C00 e lINT 19 esegue un
salto (jump) a questo indirizzo.Se non viene
trovato un settore di boot il codice contenuto
allinterno dell INT 19 cerca di leggere lMBR
del primo hard disk
2boot
- Una volta trovato, lMBR viene copiato alla
locazione di memoria 00007C00. Il programma
che viene eseguito allinterno 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 00007C000 e il codice dellMBR esegue un
salto a quel indirizzo(perche questo possa
avvenire una delle prime istruzioni che esegue
lMBR consiste nello shiftarsi in avanti,
eseguendo una copia di se stesso, allindirizzo
00000600 per lasciar posto al caricamento del
boot sector)
3boot
- 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
allinterno 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
4boot
- La sequenza di ricerca del boot sector, chiamata
anche sequenza di boot, generalmente e
configurabile tramite il setup del Bios. - Alcuni indirizzi dellMBR
- Il codice dell MBR inizia alloffset 0000
- I messaggi dell MBR iniziano alloffset 008b
- La partition table inizia alloffset 01be
- La firma (signature)e alloffset 01fe
5Un 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 allutente 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
6Un 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) - nellMBR 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) . - nellMBR di una partizione estesa.
- Occorre specificare che molte versioni di fdisk
non consentono lattivazione di una partizione
estesa.Per far si che cio avvenga e possibile
utilizzare il tool activate contenuto allinterno
di lilo.
7Un 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 Operating system
DOS-MBR MS-DOS COMMAND.COM
DOS-MBR LILO Linux COMMAND.COM Altri OS
LILO Linux Altri OS
8Un esempio di gestore di boot LiLo
- Lultima 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 dellMBR originale - I passi che occorre seguire per questa
configurazione sono - dd if /dev/hda of/fd/MBR bs512 count1
9Un 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
- timeout50
- restricted
- password pippo'
- message/boot/message
- linear
- defaultlinux
- image/boot/vmlinuz-2.2.16-22
- image/boot/vmlinuz-2.2.17-14
- labellinux
- read-only
- root/dev/hda6
- image/boot/vmlinuz-2.2.16-22
- labellinux-2.2.16
10Un 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
lincapacita 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
linstallazione 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.
11Un esempio di gestore di boot LiLo
- -ripartizionare il disco. E unoperazione 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 alluso di loadlin mentre nel caso di
Nt/W2k si puo utilizzare boot.ini. - -se tutte le precedenti procedure falliscono
rimane linstallazione 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
12Un 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.
13Un 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 lunico 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.
14Un 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
allinterno 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 lintero sistema
unbootable.
15Inside LiLo
- Come visto in precedenza il settore di boot
viene caricato allindirizzo 0x07C00, in questo
caso la prima istruzione muove se stesso
allindirizzo 0x9A000 (da 0x9A000 a 0x9B000) e
carica il boot loader secondario all indirizzo
0x9B000 passandogli il controllo dellesecuzione.
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 allindirizzo 0x9D200 e il settore
contenente la default command line allindirizzo
0x9D600 e aspetta un input dallutente. - se e stata impostata una fallback command line
questa verra copiata sul settore della default
command line
16Inside LiLo
- Se lutente ha fornito un immagine Ram disk ,
questo file viene caricato - sotto la fine della memoria fisica o comunque
sotto i 16 Mb. Lindirizzo iniziale e abbassato
al vicino inizio pagina per far in modo che
larea 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 allindirizzo 0x90000 (in realta verra
utilizzato solo per le informazioni di setup), la
parte di setup e caricata allindirizzo 0x90200
e il kernel a 0x10000. Durante questa fase il
settore del map file e caricato allindirizzo
0x9D000. - Se limmagine caricata e effettivamente
limmagine 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)
allindirizzo 0x00600 e il settore di boot a
0x07C00.Dopodiche il controllo passa al settore
di boot.
17Inside 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 allinizio 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.
18Inside 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
19Inside LiLo
linea di comando di default
- Il settore di boot contiene il boot loader
primario, lindirizzo del settore contenente la
linea di comando di default, gli indirizzi della
tabella di descrizione e lindirizzo 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 allinizio del map file sono
speciali il primo settore contiene la linea di
comando di default, i due successivi settori
contengono la tavola di descrizione dellimmagine
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.
descrittori
descrittori
zero
traduzione tastiera
sezioni....
20Inside LiLo
- Un immagine del kernel ecomposta 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
21Inside 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 lutente,
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.
22Inside 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 - variabilevalore.
- Per poter passare al kernel la stringa di
parametri occorre settare i seguenti descrittori - 0x90020 il magic number 0xA33F
- 0x90022 loffset 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)
23Inside LiLo
Nome immagine Opzioni della linea di comando
Linea di comando
Prefisso Nome immagine Opzioni statiche Opzioni della linea di
Stringa di parametri passati al kernel
Opzioni statiche
Settore delle opzioni
Esempio Linea di comando vmlinuz
root802 Settore delle opzioni root801 ro si
ottiene BOOT_IMAGEvmlinuz root801 ro
root802 dal momento che la linea delle opzioni
puo essere sovrascritta. la prima opzione root
e ignorata dal kernel
24Inside 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.
25Inside 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 gt/boot/italian.ktl