Newsgroup: it.comp.os.linux.iniziare
Titolo: leggere mbr

Come si fa in linux a leggere l'mbr?
E a modificarlo?
E' possibile "montarlo" e leggerlo, nonchè salvarlo, modificarlo ed
eventualmente ripristinarne una vecchia copia funzionante?
Ciao e grazie
Alex



$ man dd
$ dd if=/dev/hda of=mio-mbr bs=512 count=1
ti copia l'MBR del master primario sul file mio-mbr
Scambiando if e of, lo riscrivi
Però, è un giochetto molto delicato.
Stai attento a quello che ne fai ;-)
ciao, andrea

 Scambiando if e of, lo riscrivi
Attento perchč cosě ti tocca sia il boot-loader sia la partition table.
Matteo

 Attento perchč cosě ti tocca sia il boot-loader sia la partition table.
perche' la partition table? nei primi 512 byte non dovrebbe esserci solo
il boot loader (o parte di esso)??
fedro (dubbioso)

 il boot loader (o parte di esso)??
Prova a dare dd if=/dev/zero of=/dev/hda bs=512 count=1 e ti sei giocato
tutta la tabella di partizioni.
prova.
Il bootloader si trova nei primi 496 (mi sembra) byte dell'mbr (512-16).
Attento, perchč non sono sicuro al 100% di questo numero.
Se il numero č giusto, basta fare dd if=/dev/zero of=/dev/hda bs=496
count=1, per azzerare l'mbr.
Ora l'harddisk non č piů avviabile. Devi dare un lilo o grub o fdisk /mbr o
fixmbr
Per quanto riguarda il bootloader, ovviamente, non puň risiedere tutto
nell'mbr (non ce la farebbe). Nell'mbr risiede il loader che carica
/boot/boot.b
Matteo

 /boot/boot.b
credo che boot.b sia il file caricato da lilo, io uso grub e
nel mio caso dovrebbe essere /boot/grub/stage2
grazie delle info
fedro

 nel mio caso dovrebbe essere /boot/grub/stage2
Immagino.
Matteo

> Stai attento a quello che ne fai ;-)
in quei 512b tutto è estremamente importante!
ciao, Andrea 

 in quei 512b tutto è estremamente importante!
Quello che volevo mettere in evidenza non era la pericolosità (basta un po'
di attenzione e un semplice backup di 512 byte, in fondo), quanto piuttosto
il fatto che io ho sempre differenziato i termini (non so se è giusto)
"Master Boot Record" e "Partition Table", i quali sono contenuti entrambi
nei primi 512 byte, ma sono differenti.
L'uno prende i primi 448 byte, l'altro i seguenti 64 (I numeri li ho
sperimentati oggi, comunque l'ho letto anche in qualche man).
Matteo

> $ dd if=/dev/hda of=mio-mbr bs=512 count=1
scusa e se lo volessi leggere per modificarlo?
Ciao e grazie
Alex

> scusa e se lo volessi leggere per modificarlo?
mi spiego meglio:
# less mio-mbr
ëH<90>^@^@^@GRUB^A^@^V^B^@^@^@^@^@^@ũ=ķ^@^@^@Ą^@
^Nā^@^@^\^Nā^@^@^]^Nā^@^@^^^Nā^@^@ESC^Nā^@^@^A!
^Nā^@^@X^C^B<80>^@^@<80><8B>B^@^@^úęP|^@^@1Ā<8E>Ø<8E>Ðž^@ û
@|<ĸt^B<88>ÂRūv}č4^AöÂ<80>tTīAŧŠUÍ^SZ
RrI<81>ûUŠuC
A|<84>Āu^E<83>á^At7f<8B>L^Pū^E|ÆDĸ^Af<8B>^^D|Į^D^P^@ĮD^B^A^@f<89>ĮD^F^@pf1Ā<
89>D^Df
<89>D^LīBÍ^Sr^Eŧ^@pë}Í^Ss
öÂ<80>^O<84>ó^@é<8D>^@ū^E|ÆDĸ^@f1Ā<88>ð@f<89>D^D1Ō<88>ĘÁâ^B<88>č<88>ô@<89>1Ā
<88>ÐĀč^Bf<89>^DfĄD|f
1Ōfũ4<88>T
f1Ōfũt^D<88>T^K<89>D^L;}<<8A>T^MĀâ^F<8A>L
þŅ<8A>l^LZ<8A>t^Kŧ^@p<8E>Ã1Ûļ^A^BÍ^Sr*<8C>Ã<8E>^FH|`^^đ^@^A<8E>Û1ö1ĸüóĨ^_aĸ&
B|ū|}č@^@ë^Nū<81>}č8
^@ë^Fū<8B>}č0^@ū<90>}č*^@ëþGRUB ^@Geom^@Hard Disk^@Read^@
Error^@ŧ^A^@ī^NÍ^PŽ<^@uôÃ^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<80>^A^A^@<83>þ?^A?^@^@^@C}^@^@^@^@^A^
B<83>þĸ―<82>}^@^@žXę
^@^@^@Áū<82>þĸÞ>Öę^@á^^@^@^@Áß^Oþĸĸ^_íō^@$^@UŠ
mi manca qualcosa.
che me ne faccio io di sta roba???????????
Come faccio per decifrare il tutto?
Ciao e grazie
Alex

 Come faccio per decifrare il tutto?
O usi un editor esadecimale, o usi fdisk :)
-- 
Ikitt

o usi fdisk :)
Ahia.
Il man non mi chiarisce le idee.
Mi daresti una dritta.
Ciao e grazie.

 Mi daresti una dritta.
Dunque, presupponendo che tu voglia indagare il contenuto di
un MBR 'vivo', basta un fdisk -l /dev/disco
Rimane da provare se e come funzioni nel caso di backup di MBR
su file...
-- 
Ikitt

 hexdump, biew, od con opportuni switch (-x?),
[root@serverfax root]# hexdump  /home/mbr
0000000 48eb d090 00bc fb7c 0750 1f50 befc 7c1b
0000010 1bbf 5006 b957 01e5 a4f3 bdcb 07be 04b1
ottengo questo che a me continua a dire poco,
un ultimo aiutino per capirci di piů.
Ciao e grazie

 0000010 1bbf 5006 b957 01e5 a4f3 bdcb 07be 04b1
A occhio e croce:
considera che i primi numeri (0000000, 0000010 etc...) sono solo gli
indirizzi, gli altri sono dati; con due calcolini il tuo mbr dovrebbe essere
composto da 32 righe (ogni lettera mezzo byte. 32 mezzi byte=16 byte; dim
mbr[512byte]/16[byte a riga]=32), di cui le prime 28 righe di boot loader e
le ultime 4 di partition table.
Le prime 28 righe non sono altro che un programmino in assembler... prenditi
un manuale e decodificalo, oppure prendi un disassemblatore che lo faccia
per te. Questo lo puoi tranquillamente editare (ti sconsiglio l'editor
esadecimale in quanto ormai l'assembler č troppo complesso da essere editato
a mano) con un assemblatore. Nessuno ti vieta di modificarlo e farti un tuo
bootloader. Le 4 righe successive sono la partition table. Anche questa ti
suggerisco di non editarla a mano (non so neanche dove sia documentata su
internet); in linea di massima dovrebbe essere divisa in quattro parti (una
per partizione) piů una descrizione della geometria del disco. Prima di
modificare questi valori fai un backup SU FLOPPY cosě non avrai problemi.
Buon lavoro e Auguri.
Matteo.
PS. Se crei un nuovo bootloader, facci sapere :-)

 PS. Se crei un nuovo bootloader, facci sapere :-)
se fosse non mancherò!
Ciao e grazie mille
Alex

 entrambi nei primi 512 byte, ma sono differenti.
probabilmente hai ragione.
Io, invece, tendo a considerare un blocco unico quei 512b
in cui sono cotenute tutte le informazioni per l'avvio del sistema.
Forse dovrei chiamarlo "settore di boot".
Invece, ho la sensazione che occorra mettere ben in evidenza
la pericolosità della manovra: quando qualcuno si stupisce che
il settore di boot sia scritto in esadeciale, è molto rischioso
che ci metta le mani.
Però, se non ci pasticcia un po', non imparerà mai :-)
ciao, andrea

> Però, se non ci pasticcia un po', non imparerà mai :-)
sbagliando s'impara.
chi fa di sua testa paga di sua borsa.

 mi dici un disassemblatore che giri in linux?
Non li uso, ergo, non ne conosco. Ma guarda nel cd di installazione, chissà
che magari ce ne sia uno (non è improbabile) nella sezione developer
(pacchetto D su slackware).
Io non sono un programmatore, tanto meno di assembler.
Matteo

 Però, se non ci pasticcia un po', non imparerà mai :-)
Però un bel backuppino su floppy (è sufficente backuppare solo quei 512
byte) aggiusta tutto.
Io una volta però non ho backuppato, eppure ho recuperato tutte le
partizioni (e erano tante) con un programmino che non ricordo più come si
chiami. Il principio è quello che cancellando quei 512 byte, cancello la
tabella delle partizioni e quindi la DEFINIZIONE di partizione, mentre non
si cancella il contenuto. Il programmino cerca per TUTTO l'hdd i probabili
inizi e fine di partizioni (vedendo quando comincia un file system o un
boot-record o qualcos'altro) e te lo propone come possibile partizione. Tu
decidi se sia vero o meno; gli restano un po' confuse le partizioni logiche
ma ce se la fo lo stesso.
Per il recupero dei primi 448 byte non c'è problema, basta rigenerarli
digitando lilo.
Basta solo stare attenti a non scrivere mai più di 512 byte, altrimenti
veramente ti perdi il file system.
Matteo

> Non li uso, ergo, non ne conosco.
ne ho trovato uno, ma il problema resta:
non ci capisco un piffero.
Anche con un manuale di assembler sotto mano decifrare quei 512k è una bella
impresa.
Però temo che mi sfugga qualcosa.
Io mi sarei aspettato di trovare qualcosa di diverso.
Alex

 Io mi sarei aspettato di trovare qualcosa di diverso.
Cosa ti saresti aspettato?
Matteo

> Cosa ti saresti aspettato?
non sarebbe stato bello qualcosa del genere?
Main{
#questo è l'MBR del tuo hard disk
#tavola partizioni:
#prima partizione primaria:
#inizio prima partizione primaria
1
#fine prima partizione primaria
50
#file system prima partizione primaria
ext2
#seconda partizione primaria:
#inizio seconda partizione primaria
51
#fine seconda partizione primaria
850
#file system seconda partizione primaria
ext2
#terza partizione primaria:
#inizio terza partizione primaria
851
#fine terza partizione primaria
1024
#file system seconda partizione primaria
#quarta partizione primaria:
#inizio quarta partizione primaria
#fine quarta partizione primaria
#file system quarta partizione primaria
#partizioni logiche
#partizione nella quale sono contenute
3
#numero partizioni logiche
2
#inizio, fine, file system partizioni logiche
851,950,ext2
951,1024,ext2
}
Ovviamente sto scherzando.
Però l'uso dei file come in linux non è malaccio!!!
Cmq, grazie mille per quello che mi hai scritto, sei stato molto esauriente.
Ciao
Alex


un piccolo particolare (anzi più di uno)
quello che hai scritto riempe la partition table già dopo la quinta riga.
Per quanto riguarda il bootloader... considera che è la cpu che deve
leggerla.
Se tu dai una occhiata a un qualsiasi file sul tuo harddisk (il kernel in
primis) sai bene che è scritto in C e leggi i sorgenti tranquillamente (o
quasi), ma ricorda che senza compilatore li potresti tranquillamente
cestinare (finchè non faranno un microprocessore che riesca a leggere i
linguaggi ad alto livello).
Matteo

 assembler riportasse tutto in un linguaggio piů user-friendly!
Peccato che si chiama disASSEMBLatore.
Matteo

> Peccato che si chiama disASSEMBLatore.
allora magari la prox volta scarico un disUSER-FRIENDLatore.
:-)))



Uomo avvisato mezzo salvato :-)
Ma se un ragazzino finlandese non si fosse messo in testa di
aggiungere un suo emulatore di terminale a minix, non avremmo Linux.
Quindi, sappi che rischi, che devi tenerti un bel backup
dell'MBR originale e dei dati più importanti che hai
sul pc, che ... e divertiti :-)
ciao, Andrea