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