Patrick M. Hausen
2016-Oct-21 11:39 UTC
boot0cfg on does not set default selection on gmirror device
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
Warner Losh
2016-Oct-21 14:41 UTC
boot0cfg on does not set default selection on gmirror device
On Fri, Oct 21, 2016 at 5:39 AM, Patrick M. Hausen <hausen at punkt.de> wrote:> 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.Any chance you can migrate to using gpart? Is boot0cfg still referenced in NanoBSD somewhere? Warner