Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 1 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 a 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 che in questo caso viene eseguita a seguito di un POST ridotto. 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.Nel caso invece che non venga 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 Dipartimento di Informatica e Scienze dell’Informazione 2 Il master boot record 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, come vedremo piu’ avanti, 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) 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 Dipartimento di Informatica e Scienze dell’Informazione 3 Il master boot record 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 Dipartimento di Informatica e Scienze dell’Informazione 4 Analisi di un MBR “standard” creato dal comando Dos “fdisk /mbr” Absolute Sector 0 (Cylinder 0, Head 0, Sector 1) A B C D E F 0000: FA 33 C0 8E D0 BC 00 7C 8B F F FB FC |..P.P : BF B F2 A5 EA 1D BE BE : B C E 80 3C C 83 C6 10 FE...<.t..<.u : CB 75 EF CD 18 8B 14 8B 4C 02 8B EE 83 C6 10 FE.u......L : CB 74 1A 80 3C F4 BE 8B 06 AC 3C B.t..<.t.....<.t. 0050: 56 BB B4 0E CD 10 5E EB F0 EB FE BF V ^ : BB 00 7C B CD 13 5F 73 0C 33 C0 CD 13..|...W.._s : 4F 75 ED BE A3 06 EB D3 BE C2 06 BF FE 7D 81 3D Ou }.= 0080: 55 AA 75 C7 8B F5 EA 00 7C E C U.u.....|..Inval 0090: F 6E id partition tab 00A0: 6C F C 6F E 67 le.Error loading 00B0: 20 6F E operating syste 00C0: 6D 00 4D E F m.Missing operat 00D0: 69 6E D ing system E0: : fino a 01A0: | 01B0: C0: B 7F BF FD 3F C1 40 5E D0: E0: F0: AA U A B C D E F
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 5 Analisi di un MBR standard I primi 139 bytes (da 00h a 8Ah) dei 512 bytes del settore sono composti da codice eseguibile e i sucessivi 80 bytes (da 8Bh a DAh) contengono messaggi di errore. Gli ultimi 66 bytes del settore contengono i 64 bytes della tabella di partizione (da 1BEh a 1FDh). I dati contenuti all’interno dell’area della tabella dipenderanno dalle dimensioni, dal tipo di partizione e dal tipo di file system all’interno della partizione; nulla di simile e’ leggibile in questa tabella, in quanto il comando fdisk /mbr che l’ha creata e’ ideato appositamente per sovrascrivere la tabella delle partizioni azzerando tutti i valori. Il settore termina con l’ID AA55h, chiamato anche magic number (sui sistemi con CPU Intel le parole esadecimali sono scritte iniziando con i byte meno significativi)Durante il POST il bios fa una ricerca del magic number e, nel caso non venga trovato, visualizza un messaggio di errore del tipo “Drive not ready” I rimanenti 227 bytes (da DBh a 1BDh) sono padding consistente in tutti zero.
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 6 Analisi di un MBR standard Un esempio di tabella di partizioni 07BE C F 3F C4 3F E 0C ??.? D0 01 C5 05 3F 7F 47 C0 1E-0C F E F 7F E BD AH.?.S F F BF 0F 00 EB B AA AT.? U. Che tradotta tramite l’utilizzo di un disk editor in grado di interpretarla risulta corrispondere a: Partition Active Starting Loc Ending Loc Relative Number of Type Boot Cyl Head Sec Cyl Head Sec sectors sectors DOS FAT-16 Yes Extended No LINUX Swap No LINUX Ext2FS No
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 7 Analisi di un MBR standard
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 8 Analisi di un MBR standard
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 9 MBR demonstration program
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 10 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 kernels 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 Dipartimento di Informatica e Scienze dell’Informazione 11 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 Dipartimento di Informatica e Scienze dell’Informazione 12 Un esempio di gestore di boot: LiLo Lilo non puo essere installato nelle segunti 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
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 13 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 Dipartimento di Informatica e Scienze dell’Informazione 14 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 image=/boot/vmlinuz label=linux read-only root=/dev/hda6 image=/boot/vmlinuz label=linux read-only root=/dev/hda6
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 15 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 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 Dipartimento di Informatica e Scienze dell’Informazione 16 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 Dipartimento di Informatica e Scienze dell’Informazione 17 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 Dipartimento di Informatica e Scienze dell’Informazione 18 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 Dipartimento di Informatica e Scienze dell’Informazione 19 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 Dipartimento di Informatica e Scienze dell’Informazione 20 Inside LiLo settore di boot 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 Dipartimento di Informatica e Scienze dell’Informazione 21 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 0x 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 0x 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 Dipartimento di Informatica e Scienze dell’Informazione 22 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 Dipartimento di Informatica e Scienze dell’Informazione 23 Inside LiLo Vediamo i riferimanti tra i files di lilo Boot sector Default command line Image descriptors Primary boot loader Secondary boot loader map boot.b
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 24 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. linea di comando di default descrittori zero traduzione tastiera sezioni....
Corso di SISTEMI OPERATIVI Dipartimento di Informatica e Scienze dell’Informazione 25 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 Dipartimento di Informatica e Scienze dell’Informazione 26 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 Dipartimento di Informatica e Scienze dell’Informazione 27 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 0x 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 Dipartimento di Informatica e Scienze dell’Informazione 28 Inside 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 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 Dipartimento di Informatica e Scienze dell’Informazione 29 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 Dipartimento di Informatica e Scienze dell’Informazione 30 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