I used "boot0cfg" and destroyed the MBR.All labels dissapear! (How I Fixed it)

BigBrother-{BigB3} bigbrother at bonbon.net
Wed May 4 00:44:52 PDT 2005


Hi,

I managed to fix the error of all slices being destroyed. My system is up 
and running. i did not reinstall any programs, just edited the partition 
table and the labels. It took me 3 days to figure out the exact values, so 
I post here my findings, in case somebody faces the same problem.

The problem was solved using two programs from the fixit disk: fdisk and 
disklabel. Note that I am using a whole disc dedicated to freebsd. no 
other partitions exist.

This is a short guide of how to fix it:

a) boot the computer using the floppy disks and enter the Fixit menu with 
the fixit disc inserted.

b) go to menu Configure->Fdisk and delete all partitions (NOTE: I am 
using all the disc dedicated to freebsd. No other OS exist. On your 
situation this may vary).

c) On this screen then I pressed [A] - use Entire disc and saw the new 
automatically calculated sector values (and the offset).

d) I pressed CTRL+C to abort this screen. Only the numbers interested me.

e) i went to menu and pressed the fixit prompt. I went to fixit prompt.

( I run 'disklabel ad0' and 'disklabel -r ad0' and I noted down some 
numbers of the fake partitions. Especially I noted the size (in sectors) 
of it....If this process fails, then you have to repeat the disklabel step 
after every fdisk commans that follows. Also note the number of 
fsize,bsize, and bps/cpg).


f) I edited the partition table using fdisk.
fdisk -u ad0   (ad0 is my first disc)

I deleted all (fake) partitions and created one accoring to the numbers 
that I have extracted from the previous screen. The type was 165 Freebsd.
Thus I have created a big slice ad0s1.

I edited the slice ad0s1 because I saw that there is a hidden parition on 
every freebsd system with thse values:

fdisk ad0s1
Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
<UNUSED>
The data for partition 2 is:
<UNUSED>
The data for partition 3 is:
<UNUSED>
The data for partition 4 is:
sysid 165,(FreeBSD/NetBSD/386BSD)
     start 0, size 50000 (24 Meg), flag 80 (active)
         beg: cyl 0/ head 0/ sector 1;
         end: cyl 1023/ head 255/ sector 63



I do not know why, but every freebsd system (on my possesion) has a 
partition 4 on slice 1 with these values.


I then edit the labels on that slice using

disklabel -e ad0s1

If that operation fails then you have to install a fresh disklabel using
disklabel -w ad0s1 auto

or

disklabel -w ad0 auto



I edit the labels of that slice. The sectors off-set was known from a 
previous step where I had extracted them using disklabel. The offset is 
calulated by adding the sectors until know. The fsize and other numbers 
are known from the previous step also.


Then you edit the label and write the first line of

a: <sectors size> offset=0 4.2BSD fsize bsize bps/cpg

On the b label put in the offset the sectors size of the previous ( a 
slice) and repeat the process.

Note that the label 'c' correspongs to whole disc so this value shoule 
have size from offset 0 until size the number of disklabel: [sectors/unit: 
XXXXX]. The lats label starts from the sum of all the previous labels 
until the number of sectors/units.

Thus if the calulcated offset it 100 and sectors/unit is 300, then the 
last label will have size 200 and offset 100.

After editing the label, try to mount. Note that the /mnt2/ holds the 
devices for mounting labels.


try to:
mount /mnt2/dev/ad0s1a /mnt

if this succeeds then label a has correct values. If not try to edit 
disklabel with oteher numbers. Remember that as long as you do no issue
[newfs] the inode table is somewhere hidden on the disc and you just have 
to figure out the label information (where it starts and where it ends for 
every slice).

Finally, install bootblocks using

fdisk -B ad0
fdisk -B ad0s1

disklabel -B ad0 auto
disklabel -B ad0s1 auto

and to be 100% sure enter sysinstall and go to fdisk menu and press Q 
quit. it will then ask you to install a boot manager...Say yes to it and 
your PC is 100% ready!

Reboot and enjoy:)



it took me 3 days to figure out this process but I managed to succeed in 
it.

Of course the best advice is (in order to avoid this) to print the 
partitoin information for your hard disc so you know before hand all the 
values...

Just issue (in case you have a ad0 disc)

fdisk ad0  [depending on your disc]
fdisk ad0s1 [-<<-]
disklabel ad0
disklabel ad0s1



i hope that you will not need my short guide on fixing such kind of 
problems, but your never know :)


BB


---
Dreams have no limits!


More information about the freebsd-questions mailing list