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:
===
# 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=2.0 drive=0x80 mask=0x3 ticks=182 bell=# (0x23)
options=packet,update,nosetdrv
volume serial ID 9090-9090
default_selection=F1 (Slice 1)
===
Update the active slice to 2:
===
# 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=2.0 drive=0x80 mask=0x3 ticks=182 bell=# (0x23)
options=packet,update,nosetdrv
volume serial ID 9090-9090
default_selection=F2 (Slice 2)
===
Reboot and let boot0 time out and boot default slice 2:
===
# 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=2.0 drive=0x80 mask=0x3 ticks=182 bell=# (0x23)
options=packet,update,nosetdrv
volume serial ID 9090-9090
default_selection=F2 (Slice 2)
===
The system actually booted into slice 1 here.
This was verified by dropping to the loader prompt and using show to grab:
loaddev=disk0s1a:
Reboot and hit 2 at the boot0 prompt:
===
# 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=2.0 drive=0x80 mask=0x3 ticks=182 bell=# (0x23)
options=packet,update,nosetdrv
volume serial ID 9090-9090
default_selection=F2 (Slice 2)
===
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.
Tom
Index: boot0.S
===================================================================
--- boot0.S (revision 213760)
+++ boot0.S (working copy)
@@ -373,7 +373,6 @@
* Timed out or default selection
*/
use_default: movb _OPT(%bp),%al # Load default
- orb $NOUPDATE,_FLAGS(%bp) # Disable updates
jmp check_selection # Join common code
/*
signature.asc
Description: OpenPGP digital signature

