Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 09 Jan 2011 12:38:27 +0200
From:      Daniel Braniss <danny@cs.huji.ac.il>
To:        Tom Judge <tom@tomjudge.com>
Cc:        freebsd-hackers@freebsd.org, luigi@freebsd.org
Subject:   Re: sys/boot/boot0/boot0.S - r186598 
Message-ID:  <E1PbsfL-0009ky-QP@kabab.cs.huji.ac.il>
In-Reply-To: <4D295820.20807@tomjudge.com> 
References:  <4D295820.20807@tomjudge.com>

next in thread | previous in thread | raw e-mail | index | archive | help
> 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





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1PbsfL-0009ky-QP>