Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

25
voti

Boot, MultiBoot & FixBoot

Indice

Avvio "normale"

Terminato il Power On Self Test, (il controllo dei componenti piu' importanti),il BIOS cerchera' un'eventuale scheda video e provvedera' a caricarne il firmware, procedera' al riconoscimento degli altri componenti ed eseguira' alcuni test, laddove supportato configurera' le periferiche PnP (Plug 'n Play).

Fatto cio' cerchera' un supporto (un disco rigido, un pendrive etc. e tramite PXE anche in rete locale) da cui caricare il sistema operativo (da qui in poi lo scrivero' S.O.).
Piu' precisamente lo fa' leggendo il primo settore del disco (MBR) individuato e caricandolo nella RAM.
Poiche' un settore (512 bytes) è una quantita' di memoria troppo ridotta affinche' un S.O. possa starci e anche perche' su un computer possono essere installati piu' S.O., per ragioni sia pratiche che di compatibilita' fra sistemi diversi si e' scelta una soluzione: il boot loader.
Si tratta di un programmino la cui funzione e' di permettere la scelta (ove possibile) del S.O. da caricare ed il suo caricamento vero e proprio, sia esso Microsoft Disk Operating System/Windows, FreeDOS, GNU Linux, Mac OS, etc.

Avvio di più S.O. - stile Windows

Windows 9x

Nella directory radice del disco principale (spesso C:\) è presente (in genere) un file denominato 'msdos.sys' del quale ci interessano tre opzioni:

BootMulti=0/1 (attiva la scelta del S.O.)
BootGui=0/1 (in modalita' grafica)
BootMenu=0/1 (in modalita' menu' semplice)

Il menu' per la selezione lo creeremo invece in un altro file: config.sys anch'esso gia' presente al quale aggiungeremo:

[Menu]
menuitem=configurazione1,etichetta

configurazione(1) sara' una sezione che creeremo sempre in questo file per indicare le operazioni necessarie al funzionamento del S.O., etichetta sara' la voce che ci apparira' per scegliere il S.O. da avviare (per ogni voce dovremo ripetere questo comando e crearne una sezione relativa).

optional: menucolor=colore_testo,colore_sfondo  [0-15]

[configurazione1] ; questa e' tipica di win95
include=memhi
include=emsno
include=ifs
include=sver
include=cdrom

poi creeremo una sezione comune per le opzioni comuni a piu' sistemi che non vogliamo ripetere:
es.

[common]
dos=high
dos=umb

ora rendiamo la cosa operativa: c'e' un ultimo file da modificare si chiama 'autoexec.bat'
in esso ci preoccuperemo di inserire la stringa seguente, la cui funzione e' di 'saltare' alla parte di caricamento del S.O. scelto in base alla risposta data nel menu' di scelta:
goto %CONFIG%
ora ci mancano le sezioni per il caricamento...
es.

:configurazione1
SET PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\WINDOWS\SYSTEM;C:\;
...
SET PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\WINDOWS\SYSTEM;C:\;
win

"comando" per avviare windows, in pratica chiediamo di eseguire win.com, presente nella cartella di installazione di Windows

Windows NT/XP/2003

L'NTLDR ci semplifica questo lavoro (rispetto al sistema precedentemente descritto) e piu' precisamente:
Nella directory radice del disco 'principale' troveremo un file: questa volta si chiama boot.ini e ci potremo lavorare in due modi, come fatto prima, e cioe' modificandone il contenuto con un editor di testo semplice oppure tramite un programmino 'bootcfg'.
Il file Boot.ini si presenta cosi' (generalmente, in questo esempio si tratta di una installazione di Windows XP):

[boot loader]
timeout=30 --- indica il tempo dato all'utente per scegliere
default=multi(0)disk(1)rdisk(0)partition(1)\WINDOWS --- indica la scelta predefinita
[operating systems]
multi(0)disk(1)rdisk(0)partition(1)\WINDOWS="Windows XP Professional" /fastdetect
Quest'ultima riga equivale al menuitem visto in precedenza (con qualche differenza) a sinistra troviamo l'indicazione del disco e della cartella a destra l'etichetta e le opzioni da passare al caricatore.
Di conseguenza volendo poter avviare piu' S.O. bisognera' inserire una voce per ciascuno.

Bootcfg

Se decidiamo di utilizzare questa utility abbiamo a disposizione le seguenti opzioni:
/default -- per impostare la scelta predefinita
/add -- per aggiungere una voce e le opzioni di caricamento - nota: verra' effettuata una scansione alla ricerca di altre installazioni di Windows (anche versioni precedenti).
/scan -- se vogliamo eseguire una ricerca
/list -- legge boot.ini e ci mostra un riassunto

Windows Vista

BCDedit

Si tratta di un'utilita' simile a bootcfg,ma dispone di un maggior numero di opzioni. Quelle che ci interessano sono create,displayorder,export,enum.
create: serve per creare una voce d'avvio
es. bcdedit /create /d "Windows Vista" /application osloader

displayorder: oltre a permetterci di stabilire la precedenza fra le voci serve anche a renderle attive (la sola creazione non basta).

es.
bcdedit /displayorder {mia_voce} /addfirst
bcdedit /displayorder {mia_voce} /addlast

Nota: e' possibile specificare il caricatore da usare ntldr oppure osloader:

bcdedit /displayorder {mia_voce} {ntldr}

export: per fare un backup dello store esistente, la sintassi e' bcdedit /export "unità:\file su cui salvare"

enum: elenca le voci, il suo tipico e' bcdedit /enum ALL

ma supporta anche le opzioni {default} se vogliamo conoscere solo la voce predefinita, osloader/bootmgr quelle che usano questi caricatori, o ancora {id} - se gia' conosciamo l'identificativo della voce.

Avvio di più S.O. - stile GNU Linux

LInuxLOader:

E' il bootloader 'storico' per linux, siccome non e' in grado di leggere dai filesystems durante la fase di boot la sua configurazione, memorizzata in /etc/lilo.conf, verra' letta dall'installatore e unita a lilo stesso.

Ecco un'esempio di configurazione (lilo.conf):

boot = /dev/hdX
delay = 10 -- pausa
vga = 0 (1 attiva la modalita' 80 righe 50 colonne)
image = /boot/vmlinux - il kernel
root = /dev/hda1 - la partizione per root
label = Linux - l'etichetta da visualizzare
read-only - la partizione di root sara' montata in sola lettura
other = /dev/hda2 - se per esempio abbiamo anche un altro S.O. installato
table = /dev/hda - specifica la tabella delle partizioni in uso
label = dos - di nuovo l'etichetta da visualizzare

Per installarlo basta digitare /sbin/lilo.

GRand Unified Bootloader:

Insieme a LILO, GruB e' uno dei bootloaders utilizzati su sistemi linux (nota: la parola linux e' il nome del kernel, ma e' anche 'sfruttata' per far riferimento alle distribuzioni, ossia ai S.O. basati su esso), rispetto al quale presenta una maggiore facilità di personalizzazione.
Fra le altre cose mette a disposizione un terminale con alcuni comandi utili.
Un esempio di menu' di scelta con GRUB,,,

GRUB

GRUB


Creazione di un menu':

I menu' per il GRUB risiedono in un file denominato 'menu.lst', il listato che segue e' il codice alla base del menu' mostrato nella figura.

default 2  ; indica quale l'opzione predefinita
timeout 5  ; imposta il conto alla rovescia (in secondi)
color yellow/red white/red  ; imposta il colore del testo e dello sfondo, non serve se si usa un'immagine
splashimage (cd)/boot/grub/cbg2.xpm.gz  ; questa e' l'immagine scelta come sfondo

title Per mir  ; voce usata come titolo del menu' (optional)
makeactive  ; operazione fittizia

title -  ; separatore (optional)
makeactive

title Windows  ; una voce usata come "sub-menu"
makeactive

title Windows - HD1  ; voce d'avvio per caricare Windows installato nella prima partizione del primo disco
rootnoverify (hd0,0)  ; siccome non si tratta di linux, chiedo che non siano eseguiti controlli
chainloader +1  ; passo il comando all'NTLDR

title Windows - HD2
rootnoverify (hd1,0)  ; come sopra ma usando la prima partizione del secondo disco fisso (in questo caso windows puo' "lamentarsi" ed esiste un rimedio che vedremo in seguito.
chainloader +1

Creazione di un disco d'avvio con GRUB

In alcune situazioni puo' far comodo un disco che permetta la scelta del S.O. da caricare senza modificare l'MBR del disco fisso o se quest'ultimo e' danneggiato. Di seguito e' illustrato un metodo molto semplice per crearne uno, la procedura e' stata eseguita usando Debian (ma e' possibile farlo anche da altri sistemi).

Creo una cartella per il progetto, al suo interno le cartelle boot e all'interno di boot una cartella denominata 'grub'.
Dentro grub copio il file stage2_eltorito (che trovo in /boot/grub del mio sistema)
Procedo alla redazione del menu(.lst)
Poiche' l'esempio include un'immagine copio anche questa nella cartella grub
Ora creo un'immagine disco che potro' masterizzare:

mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4
           -boot-info-table -o grub.iso /cartella_progetto

Otterro' un file denominato grub.iso che e' l'immagine che mi serviva, la masterizzo e il disco e' pronto!

Grub+map

Questo e' il trucco di cui si parlava prima, in pratica GRUB dispone di una funzione per "ingannare" il S.O. da caricare riguardo alla 'leadership' del disco .

> map (hd0) (hd1)
> map (hd1) (hd0)

Se inseriamo queste istruzioni nella voce di caricamento di windows nel nostro menu.lst gli faremo credere che il disco da cui si sta avviando e' il primo della catena. Cio' e' utile perche' in molti casi si rifiuta di partire se trova una situazione diversa da quella che conosce.

Avvio di più S.O. con boot manager alternativi

PloP

Sito web: http://www.plop.at/
Si tratta di un boot manager con il supporto, fra le altre caratteristiche, dei dischi usb (driver OHCI/EHCI)

Puo' essere usato da CD/DVD, pendrive USB, floppy, LAN, e naturalmente puo' essere caricato nell'MBR del disco fisso.

OSL2000 Boot Manager®

Forse un po' 'rustico' ma molto utile ;)

EasyBCD

Sito web: http://neosmart.net/dl.php?id=1

Si tratta di un boot manager nato per soddisfare le esigenze degli utenti di Windows Vista, dispone di un'interfaccia grafica molto semplice da utilizzare.

GAG

Sito web: http://gag.sourceforge.net

Come GRUB e PloP e' un boot manager (gratuito) che permette di avere menu' di avvio meno tristi e piu' efficienti.

Smart BootManager

E' un boot manager con un'interfaccia stile applicativi per DOS, dispone di alcune funzioni di pianificazione, di ritardo e puo' inviare dei comandi al sistema caricato sotto forma di pressione di tasti.

Ripristino bootsector

Windows

Windows XP

Si inserisce il disco di installazione e quando offre la possibilita' di accedere alla console di ripristino (premendo 'R'), useremo i seguenti comandi: fixmbr, fixboot ed eventualmente chkdsk.

FixMBR, accetta come argomento il disco su cui scrivere un nuovo Master Boot Record (equivale a fdisk /mbr) es.
FixMBR \Device\HardDisk0
FixBOOT - accetta come argomento la partizione su cui scrivere il settore d'avvio es.
FixBOOT C:

Usato senza parametri esegue la scrittura sul disco in cui risulta installato windows.

ChkDSK
la funzione di questo programma e' quella di cercare e se possibile riparare errori nel filesystem, puo' tornar utile se per esempio all'avvio di windows vengono visualizzati messaggi d'errore di cui non si comprende il motivo, e che potrebbero essere riconducibili a una corruzione del filesystem es. se si interrompe l'alimentazione durante il lavoro.

Windows Vista

Come nel caso di XP si inserisce il DVD di installazione si seleziona l'opzione Ripristina il computer, si sceglie l'installazione da correggere e si sceglie Prompt dei comandi infine si esegue Bootrec.exe

Qui digitiamo:

bcdedit /export C:\copia_bcd
attrib c:\boot\bcd -s -h -r
ren c:\boot\bcd bcd.old
bootrec /RebuildBcd

Avremmo anche potuto usare bootrec /FixMBR solo per ricostruire l'MBR oppure /FixBoot, con l'opzione RebuildBCD bootrec esegue una ricerca dei S.O. installati oltre alla ricostruzione.

Linux

Grub

La scrittura e la conseguente ri-scrittura del settore d'avvio si fa con il comando 'setup' disponibile sia nel disco d'avvio che abbiamo creato in precedenza, e questo e' utile se il sistema non si può avviare, oppure se il motivo e' che abbiamo installato windows e quest'ultimo ha riscritto il settore d'avvio o se l'abbiamo fatto noi (fixboot) ma possiamo ancora avviare linux.

Ecco come:
setup (hdX) - dove X e' il numero del disco fisso (0 per il primo), copierà grub nell'MBR. setup (hdX,Y) - dove X e' il numero del disco fisso (0 per il primo) e Y la partizione (0 e' la prima), copierà grub nella partizione desiderata del disco specificato.

Da sistema avviato e' possibile anche usare grub-install.

4

Commenti e note

Inserisci un commento

di ,

Qualche aggiunta sul rapporto bios/bootloader non avrebbe guastato e anche sulle modalità in cui lavora in bootloader ma ottimo articolo. Ho avuto a che fare con la programmazione a tale livello quando ho dovuto codare un bootloader personalizzato che criptasse parte del kernel Windows con una password di autenticazione per un utente paranoico a cui non bastava la password del sistema operativo.

Rispondi

di ,

ho sperimentato in pratica la conoscenza di Stella su questo argomento, come dimostra il topics in questione, questo articolo conferma l'elevato livello di conoscenza della materia,Complimenti.

Rispondi

di ,

Articolo interessante, in particolare per il "trucco" del Grub+map che non conoscevo. Grazie. Per quanto riguarda il ripristino del bootsector, potrebbe essere utile anche SuperGrub che consente facilmente di sistemare eventuali errori nel Grub (specie quando una nuova installazione di Windows lo sovrascrive, rendendo complicato raggiungere la partizione Linux)

Rispondi

di ,

Ottimo articolo, ho imparato tante cose che non sapevo!

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.