Date: Mon, 09 Mar 1998 18:55:53 -0800 From: Mike Smith <mike@smith.net.au> To: Bruce Evans <bde@zeta.org.au> Cc: mike@smith.net.au, current@FreeBSD.ORG, stable@FreeBSD.ORG Subject: Re: *HEADS UP* Correction to previous postings. Message-ID: <199803100255.SAA17092@dingo.cdrom.com> In-Reply-To: Your message of "Tue, 10 Mar 1998 13:01:54 %2B1100." <199803100201.NAA26202@godzilla.zeta.org.au>
next in thread | previous in thread | raw e-mail | index | archive | help
> >I believed that I had, actually, tested on a dedicated-disk system, > >however it appears otherwise. 8( > > It broke immediately here. I lied about having a DOS partition table > with all-zeros. I actually have one with the historical invalid > partition table. This breaks in a different way. There are _three_ > signifantly different configurations that give the whole disk to > FreeBSD. See below. This is the problem; I had the understanding that there was only one. > >I thought that I had established this correctly twice now, based on > >code study and our earlier discussions. Can I please confirm, so that > >this isn't screwed for good? > > > - If the slice number from the bootstrap is in the range BASE_SLICE to > > MAX_SLICES, it is OK to insert this as-is into the root device minor > > number. > > No. This breaks in my configuration with a historical invalid partition > table (see biosboot/boot2.S). The boot blocks search this table and > find slice 4 in it. They don't notice that it is invalid, so they pass > slice 4 to the kernel. The kernel notices that it is invalid and gives > only the compatibility slice, so the boot fails. Slice 4 must be mapped > to slice COMPATIBILITY_SLICE (= 0) in this case. This is the case where the disk has been initialised with 'disklabel auto', it seems. > > - If the slice number is < BASE_SLICE, the correct minor for the root > > device will have a 0 in the slice field. > > Correct, but it is better to write this rule as: > > - If the slice number is == WHOLE_DISK_SLICE, the correct minor for the > root device will have COMPATIBILITY_SLICE in the slice field. OK. > >ie. I should be using COMPATABILITY_SLICE not BASE_SLICE in the test in > >setroot()? > > Yes. > > Summary of the 3 cases where the whole disk is used for FreeBSD: > > Partition table config Slice# passed by bootblocks Slice# to use for "/" > ---------------------- --------------------------- ------------------------- > Signature != 0xAA55 WHOLE_DISK_SLICE (= 1) COMPATIBILITY_SLICE (= 0) > Historical invalid BASE_SLICE + 3 (= 5) COMPATIBILITY_SLICE (= 0) > "Valid" (1 big part.) BASE_SLICE + N (0 <= N < 4) BASE_SLICE + N There appears to be no means for differentiating the "historical invalid" case from the "valid" case where the first FreeBSD slice has N == 3, given the constraints under which setroot() is operating. (Note that "valid" above is a subset of any FreeBSD slice being anywhere on the disk. It is this subset that the sysinstall "all disk/no" option generates.) Do you have any suggestions for making this differentiation? Altering the bootstrap is not practical at this point in time, as it hamstrings upgraders. > User actions in the 3 cases: > 1. Hope this doesn't happen. It is very unlikely to happen for boot disks. > 2. Wait for fixes. > 3. Same as for cases where the whole disk is not used for FreeBSD - edit > /etc/fstab. I would like to find a fix for 2. that doesn't involve going backwards to the 'bad old days', but this seems difficult just now. -- \\ Sometimes you're ahead, \\ Mike Smith \\ sometimes you're behind. \\ mike@smith.net.au \\ The race is long, and in the \\ msmith@freebsd.org \\ end it's only with yourself. \\ msmith@cdrom.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199803100255.SAA17092>