boot0cfg on does not set default selection on gmirror device

Patrick M. Hausen hausen at punkt.de
Fri Oct 21 12:02:07 UTC 2016


Hi, all,

we are repeatedly bitten by the following misbehaviour of boot0cfg:

root at hd45:/usr/local # boot0cfg -s 1 mirror/m0
root at hd45:/usr/local # boot0cfg -v 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    768:254:63     32852925   1920667140

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

So, while it should have set the default to slice 1, it simply didn't.

gpart on the other hand works as expected:

root at hd45:/usr/local # gpart set -a active -i 1 mirror/m0
active set on mirror/m0s1
root at hd45:/usr/local # gpart show mirror/m0
=>        63  1953525104  mirror/m0  MBR  (932G)
          63       16002             - free -  (7.8M)
       16065    16418430          1  freebsd  [active]  (7.8G)
    16434495    16418430          2  freebsd  (7.8G)
    32852925  1920667140          3  freebsd  (916G)
  1953520065        5102             - free -  (2.5M)

But the "active" flag alone is not enough to convince boot0 to actually boot that partition.

Additional info:

root at hd45:/usr/local # uname -a
FreeBSD hd45.hosting.punkt.de 10.3-RELEASE-p10 FreeBSD 10.3-RELEASE-p10 #0 r306942: Mon Oct 10 10:29:14 UTC 2016     root@:/usr/obj/nanobsd.hosting/usr/src/sys/GENERIC  amd64
root at hd45:/usr/local # gmirror status
     Name    Status  Components
mirror/m0  COMPLETE  ada0 (ACTIVE)
                     ada1 (ACTIVE)


The only way to actually switch the boot0 default selection is:

root at hd45:/usr/local # sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16
root at hd45:/usr/local # boot0cfg -s 1 ada0
root at hd45:/usr/local # boot0cfg -s 1 ada1
root at hd45:/usr/local # boot0cfg -v 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    768:254:63     32852925   1920667140

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


Any hints what's going on, here? Obviously it is possible to manipulate
the MBR of a gmirror device - as gpart proves. The boot0cfg pops up
since FreeBSD 8 when we started using a mirrored NanoBSD setup.


Thanks and kind regards,
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