boot0cfg and gmirror ...

Patrick M. Hausen hausen at punkt.de
Wed Aug 20 14:19:53 UTC 2008


Hi, all,

I know about the "foot shooting" prevention in geom(4)
when trying to update the MBR of a mounted disk.

I have a system with ad4 and ad6 mirrored and fdisk
partitions residing on the mirror to be booted alterningly:

hd30# gmirror status
     Name    Status  Components
mirror/m0  COMPLETE  ad4
                     ad6

hd30# mount
/dev/mirror/m0s1a on / (ufs, local, read-only)
devfs on /dev (devfs, local)
/dev/mirror/m0s3a on /etc (ufs, local)
/dev/mirror/m0s3d on /var (ufs, local, soft-updates)

hd30# boot0cfg -v /dev/mirror/m0
#   flag     start chs   type       end chs       offset         size
1   0x80      1:  0: 1   0xa5   1022:254:63        16065     16418430
2   0x00   1023:  0: 1   0xa5   1020:254:63     16434495     16418430
3   0x00   1021:  0: 1   0xa5    704:254:63     32852925    455539140

version=1.0  drive=0x80  mask=0xf  ticks=182
options=packet,update,nosetdrv
default_selection=F1 (Slice 1)

OK, try to switch to slice 2:

hd30# boot0cfg -s 2 -v /dev/mirror/m0
boot0cfg: /dev/mirror/m0: Geom not found
boot0cfg: /dev/mirror/m0: ioctl DIOCSMBR: Operation not permitted

Known one, set debug flags and try again:

hd30# sysctl kern.geom.debugflags=0x10
kern.geom.debugflags: 0 -> 16
hd30# boot0cfg -s 2 -v /dev/mirror/m0
boot0cfg: /dev/mirror/m0: Geom not found
boot0cfg: /dev/mirror/m0: ioctl DIOCSMBR: Operation not permitted


Er ... well, what now?

Out of curiosity I tried:

hd30#  boot0cfg -s 2 -v /dev/ad4
#   flag     start chs   type       end chs       offset         size
1   0x80      1:  0: 1   0xa5   1022:254:63        16065     16418430
2   0x00   1023:  0: 1   0xa5   1020:254:63     16434495     16418430
3   0x00   1021:  0: 1   0xa5    704:254:63     32852925    455539140

version=1.0  drive=0x80  mask=0xf  ticks=182
options=packet,update,nosetdrv
default_selection=F2 (Slice 2)

hd30# boot0cfg -v /dev/ad6
#   flag     start chs   type       end chs       offset         size
1   0x80      1:  0: 1   0xa5   1022:254:63        16065     16418430
2   0x00   1023:  0: 1   0xa5   1020:254:63     16434495     16418430
3   0x00   1021:  0: 1   0xa5    704:254:63     32852925    455539140

version=1.0  drive=0x80  mask=0xf  ticks=182
options=packet,update,nosetdrv
default_selection=F1 (Slice 1)

hd30# boot0cfg -s 2 -v /dev/ad6
#   flag     start chs   type       end chs       offset         size
1   0x80      1:  0: 1   0xa5   1022:254:63        16065     16418430
2   0x00   1023:  0: 1   0xa5   1020:254:63     16434495     16418430
3   0x00   1021:  0: 1   0xa5    704:254:63     32852925    455539140

version=1.0  drive=0x80  mask=0xf  ticks=182
options=packet,update,nosetdrv
default_selection=F2 (Slice 2)

So, with the prevention removed it is possible to write to the
single disks, but not to the mirror as a whole.

Weird. Any ideas? What bad things can happen if I keep updating
the MBRs of both individual disks seperately - besides bad
karma and "See? I told you so!" in case I generate an inconsistent
state?

Thanks,
Patrick
-- 
punkt.de GmbH * Kaiserallee 13a * 76133 Karlsruhe
Tel. 0721 9109 0 * Fax 0721 9109 100
info at punkt.de       http://www.punkt.de
Gf: Jürgen Egeling      AG Mannheim 108285


More information about the freebsd-stable mailing list