sys/boot/boot0/boot0.S - r186598
Daniel Braniss
danny at cs.huji.ac.il
Sun Jan 9 11:20:16 UTC 2011
> This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
> --------------enig51B4786EC9D39188BAE04052
> Content-Type: multipart/mixed; boundary="------------070003060308030201090207"
>
> This is a multi-part message in MIME format.
> --------------070003060308030201090207
> Content-Type: text/plain; charset=ISO-8859-1
> Content-Transfer-Encoding: quoted-printable
>
> Hi,
>
> Today I ran into an issue where setting the default slice with boot0cfg
> -s is broken.
>
> This is related to a section of this revision:
>
> + commit Warner's patch "orb $NOUPDATE,_FLAGS(%bp)"
> to avoid writing to disk in case of a timeout/default choice;
>
> This issue is quite well documented in bin/134907 which has been open
> since May 2009.
>
> Reproduced with a fresh nanobsd build:
>
> Boot 1 - Slice 1 active as set by nanobsd image builder:
>
> =3D=3D=3D
> # boot0cfg -v ad0
> # flag start chs type end chs offset size
> 1 0x80 0: 1: 1 0xa5 494: 15:63 63 498897
> 2 0x00 495: 1: 1 0xa5 989: 15:63 499023 498897
> 3 0x00 990: 0: 1 0xa5 992: 15:63 997920 3024
>
> version=3D2.0 drive=3D0x80 mask=3D0x3 ticks=3D182 bell=3D# (0x23)
> options=3Dpacket,update,nosetdrv
> volume serial ID 9090-9090
> default_selection=3DF1 (Slice 1)
> =3D=3D=3D
>
> Update the active slice to 2:
> =3D=3D=3D
> # boot0cfg -s 2 -v ad0
> # flag start chs type end chs offset size
> 1 0x80 0: 1: 1 0xa5 494: 15:63 63 498897
> 2 0x00 495: 1: 1 0xa5 989: 15:63 499023 498897
> 3 0x00 990: 0: 1 0xa5 992: 15:63 997920 3024
>
> version=3D2.0 drive=3D0x80 mask=3D0x3 ticks=3D182 bell=3D# (0x23)
> options=3Dpacket,update,nosetdrv
> volume serial ID 9090-9090
> default_selection=3DF2 (Slice 2)
> =3D=3D=3D
>
> Reboot and let boot0 time out and boot default slice 2:
> =3D=3D=3D
> # boot0cfg -v ad0
> # flag start chs type end chs offset size
> 1 0x80 0: 1: 1 0xa5 494: 15:63 63 498897
> 2 0x00 495: 1: 1 0xa5 989: 15:63 499023 498897
> 3 0x00 990: 0: 1 0xa5 992: 15:63 997920 3024
>
> version=3D2.0 drive=3D0x80 mask=3D0x3 ticks=3D182 bell=3D# (0x23)
> options=3Dpacket,update,nosetdrv
> volume serial ID 9090-9090
> default_selection=3DF2 (Slice 2)
> =3D=3D=3D
> The system actually booted into slice 1 here.
> This was verified by dropping to the loader prompt and using show to grab=
> :
> loaddev=3Ddisk0s1a:
>
> Reboot and hit 2 at the boot0 prompt:
> =3D=3D=3D
> # boot0cfg -v ad0
> # flag start chs type end chs offset size
> 1 0x00 0: 1: 1 0xa5 494: 15:63 63 498897
> 2 0x80 495: 1: 1 0xa5 989: 15:63 499023 498897
> 3 0x00 990: 0: 1 0xa5 992: 15:63 997920 3024
>
> version=3D2.0 drive=3D0x80 mask=3D0x3 ticks=3D182 bell=3D# (0x23)
> options=3Dpacket,update,nosetdrv
> volume serial ID 9090-9090
> default_selection=3DF2 (Slice 2)
> =3D=3D=3D
>
> This time we really boot into slice 2.
>
> The attached patch backs out the relevant part of r186598.
>
> There was a post on the embedded list that suggested this work around:
> echo 'a 2' | fdisk -f /dev/stdin ad0
> boot0cfg -s 2 ad0
>
> There are 2 issues with this:
> 1) It can't be done without setting kern.geom.debugflags to 0x10.
> 2) It resulted in most/all commands resulting in the error message
> "Device not configured" including the second command and 'shutdown -r now=
> '.
>
> Both of which leave this really work around fairly broken.
the problem is that boot0cfg -s does NOT update the boot block, it fails!
the work around is:
boot0cfg -s -t n dev
then
gpart set -a active -i n dev
danny
More information about the freebsd-hackers
mailing list