modifying the MBR through geom_mbr

Viktor Vasilev viktor.vasilev at stud.tu-darmstadt.de
Sun May 21 13:22:51 UTC 2006


On Saturday 20 May 2006 23:15 Viktor Vasilev wrote:
> I've been looking at the fdisk code while porting gnu parted to freebsd
> and I'm confused, and don't know what the right way to update the MBR is.
> Currently the code uses the same gctl's as fdisk.c:write_disk() and
> gctl_issue returns "Geom not found". I've dug a little and it seems that
> this message is produced by sys/geom/geom_ctl.c:gctl_get_geom(), because
> the geom name wasn't found in the list. So it seems it'll never succeed
> at modifying the MBR of ad6 like this:
>
>   grq = gctl_get_handle();
>   gctl_ro_param(grq, "verb", -1, "write MBR");
>   gctl_ro_param(grq, "class", -1, "MBR");
>   gctl_ro_param(grq, "geom", -1, "ad6");
>   gctl_ro_param(grq, "data", ssize, mbr_buf);
>   ...

fdisk has the same behaviour - it can't commit the MBR to the disk using 
gctl's and gets the same "Geom not found" error. It appears that as soon 
as /dev/ad6 is opened for writing, the slice entries in /dev disappear.

Before opening /dev/ad6 for writing:

  0 DISK ad6 251000193024 512 hd 16 sc 63
  1 MBR ad6s3 9993715200 512 i 2 o 20003880960 ty 131
  1 MBR ad6s2 10001940480 512 i 1 o 10001940480 ty 131
  1 MBR ad6s1 10001908224 512 i 0 o 32256 ty 131

After opening /dev/ad6 for writing:

  0 DISK ad6 251000193024 512 hd 16 sc 63

A workaround: If I close or open /dev/ad6 read-only, then the above gctl 
sequence succeeds.

Can anyone clarify this behaviour?


Cheers,
Vik
-- 
PGP Key: 0xE09DC8D8/6799 4011 EBDE 6412 05A1 090C DBDF 5887 E09D C8D8
Signed/encrypted mail welcome!


More information about the freebsd-geom mailing list