Mbr

From campisano.org
Jump to navigation Jump to search

Vademecum per il riprestino delle tabelle delle partizioni su Gnu/Linux

Per riprestino intendo il ripartizionamento MANUALE tramite linux e il programmaa dd, possibile solo se si è fatto un backup delle tabelle delle partizioni. Non avendo tali backup si può tentare di recuperare i dati delle tabelle usando programmi appositi come gpart, ma non sarà facile. Parlo al plurale perchè oltre al famoso master-boot-record (che riguarda le partizioni primarie ed estese), di cui avrete sentito parlare, ce n'è una scritta all'inizio di ogni partizione estesa (per regola massimo una in ogni disco) relativa alle partizioni logiche in essa contenute; ma andiamo per ordine...


INFO GENERALI

Il MBR è fondamentale:
si tratta di soli 512 bytes, una miseria per oggi, ma sufficenti (almeno quando fu ideato lo erano) a contenere le informazioni necessarie all'avvio del sistema. I primi 446 bytes contengono il boot loader, piccolo programma che serve a 'localizzare' i file del sistema operativo che si intende avviare (in realtà questi bytes non bastano più, ora contengono solo un 'pezzo' di bootloader e le istruzioni necessarie a trovare le altre parti dello stesso) Gli altri 66 bytes contengono le informazioni sul partizionamento del disco, precisamente i dati di 4 partizioni che occupano 16 bytes l'uno e due bytes finali che specificano la fine del MBR (in esadecimale 55 AA).

La partizione estesa è unica per ogni disco, e contiene le informazioni sulle partizioni logiche in esso contenute. Sembra che questo sia di 1024 bytes, e che la tabella delle partizioni sia scritta a cominciare dal 447° byte. Chi vi parla non è pratico dell'argomento, però ho fatto svariate prove: il programma dd legge infatti al massimo 1kb dal device della partizione estesa (mentre dal device principale hda legge tutti i miei 40Gb), dunque non sarà male fare il backup di tutti i 1024 bytes...


BACKUP

Fare il backup è semplice quanto rischiso: NON fare uso del comando DD se non si comprende ESATTAMENTE quello che si stà facendo!
DD se ne frega delle ignoranze e fa quello che gli viene ordinato: se gli dite di 'sterminare' i bytes del vostro hdd lui lo fa senza fare domande.
Dunque la prima copia da farsi è del MBR, dunque ipotizzando che il disco rigido in questione sia /dev/hda, il comando è
dd if=/dev/hda of=hda.mbr bs=512 count=1.

Fate attenzione agli errori: dd copia i singoli bytes,

if= specifica la sorgente da cui leggere (il disco /dev/hda)
of= specifica la destinazione dove scrivere (sul file hda.mbr)
bs= specifica i bytes da copiare alla volta (come fosse un'unità di misura, 512 bytes alla volta)
count= specifica quanti bs copiare (o se volete quante volte, 1 copia una sola volta i 512 bytes)

non scambiate if con of che sono dolori, ed attenti con i numeri (la quantità è il prodotto fra bs e count) e le unità di misura di bs (2K sono 2kb, 1M è un mega, 3 sono 3bytes).

Per il backup della tabella delle partizioni di una partizione estesa, dovete solo conoscere il device giusto, usando il comando fdisk -l lo saprete:

una partizione estesa linux si chiama Extended, di tipo winzoz si chiama Win95 Ext'd (o roba simile). Per esempio nel mio primo disco la partizione estesa è la /dev/hda1, dunque il comando è
dd if=/dev/hda1 of=hda1.ext bs=512 count=2 #(oppure dd if=/dev/hda1 of=hda1.ext bs=1k count=1)

ed è fatta.

non sarebbe male farsi una stampa della suddivisione dei vostri dischi, stampando il file creato con il comando
fdisk -ul > fdisk.text

in modo da avere un pezzo di carta dove recuperare i dati delle parizioni, in caso di perdita dei file backup: con questo pezzo di carta avrete i settori di inizio e di fine di tutte le vostre partizioni, che potrete recuperare usando il comando fdisk.

la logica è: più dati avete, meglio è; dunque consiglio di prendere nota dell'output del comando
df -hT > df.text
che vi ricorderà la situazione del vostro disco prima del danno, e volendo fate una copia del vostro fstab, che non fa mai male...
cp /etc/fstab ./


RIPRESTINO

Il riprestino è semplice, va usato l'esatto inverso del comando usato per fare il backup, ovvero
dd if=/dev/hda of=hda.mbr bs=512 count=1 diventa dd of=/dev/hda if=hda.mbr bs=512 count=1
dd if=/dev/hda1 of=hda1.ext bs=512 count=2 diventa dd of=/dev/hda1 if=hda1.ext bs=512 count=2

attenzione a quello che fate!!!

se (per qualsiasi motivo) non volete riprestinare anche il vecchio bootloader, il comando è:
dd if=hda.mbr of=/dev/hda bs=1 count=66 skip=446 seek=446
ovvero
copia da hda.mbr (if=hda.mbr) a /dev/hda (of=/dev/hda) 66 blocchi (count=66) da un byte (bs=1)
saltando i primi 446 bytes del file di input (skip=446) e cominciando a scrivere dopo il 446 bytes del device /dev/hda (seek=446)

Ogni commento a t1t0[at]tiscali.it.

Links