Date: Tue, 16 Dec 2003 09:22:58 -0800 (PST) From: Dorin H <bj93542@yahoo.com> To: Dan Strick <strick@covad.net> Cc: freebsd-questions@freebsd.org Subject: Re: Solved [Re: delete first partition XP and reformat as ufs -> kernel not found] Message-ID: <20031216172258.70439.qmail@web12609.mail.yahoo.com> In-Reply-To: <200312020814.hB28EFTk000602@mist.nodomain>
next in thread | previous in thread | raw e-mail | index | archive | help
--- Dan Strick <strick@covad.net> wrote: > On Mon, 1 Dec 2003, Dorin H <bj93542@yahoo.com> > wrote: <snip> > > If no RTFM is available, point me to the source > files. > > I am not familiar with the FreeBSD kernel sources, > but > > I'll have no problem reading some code. > >> > <snip> > This may not be exactly correct. See the section 8 > man page for boot. > (i.e. Do "man boot".) The source is in > /usr/src/sys/boot/i386. > The information is there (boot(8)). Thank you for reminding me that 10 minutes spent reading the whole man page saves some hours of hair-pulling struggle. > > If I understand this and your previous emails on > this subject, > you began with this MBR partition/slice table > arrangement: > > ad0s1 XP > ad0s2 FreeBSD > > and everything worked fine. > Then you changed the MBR partitions to: > > ad0s1 XP > ad0s2 Debian swap > ad0s3 Debian / > ad0s4 FreeBSD > > and FreeBSD would not boot correctly because the > file /etc/fstab, > created during the initial FreeBSD installation > process, still had > "/dev/ad0s2" where it now needed to have > "/dev/ad0s4" because you > renumbered its MBR partition. Then you fixed that > and everything > seemed to work fine until you decided to reuse the > XP partition > for more FreeBSD disk space. So you changed your > MBR partition > table to: > > ad0s1 FreeBSD (addtitional file system space) > ad0s2 Debian swap > ad0s3 Debian / > ad0s4 FreeBSD (the operating system) > > and FreeBSD would no longer boot. This might be due > to boot1 > confusion. Each partition in the MBR has a flag > byte and a type > byte. The 0x80 bit in the flag byte marks the > partition as "active". > Normally at most one partition has the active bit > set. > A non-interactive MBR bootstrap program typically > boots whichever > partition has the active bit set. > I couldn't present it better. And yes, the problem was due to order of partitions marked as bootable: BOOTABLE ad0s1 FreeBSD (not used) ad0s2 Debian swap ad0s3 Debian / BOOTABLE ad0s4 FreeBSD (the operating system) Trying to boot ad0s1 failed of course. At the promp: >> FreeBSD/i386 BOOT Default: 0:ad(0,a)/kernel boot: I did again the experiment: 1. marked ad0s1 as bootable 2. reboot 3. again the promt (from which the slice info is missing ! that tricked me) Supplying this solve the booting problem! | vvv boot: 0:ad(0,4,a)/kernel (Still pending: I have to see how can I make it find the loader.conf also :) ) > The FreeBSD boot1 program, the program loaded by the > MBR bootstrap, > is not hardwired with the number of the MBR > partition in which it was > installed (perhaps it ought to be). > Instead it uses > the first MBR > partition of FreeBSD type with the active bit set. > If no FreeBSD MBR > partition has the active bit set, the boot1 program > chooses the first > FreeBSD MBR partition. This normally works > correctly even if you have > more than one bootable FreeBSD MBR partition because > the FreeBSD boot0 > MBR program normally rewrites the MBR record with > the appropriate > active bit set before it invokes the FreeBSD boot1 > program. > > You say that you are using Debian lilo for your MBR > bootstrap program > rather than the FreeBSD boot0 program. Totally new to FreeBSD boot process, so using Debian LILO felt "safer" at that time. > I don't know > much about lilo, > but I am guessing that it does not set the active > partition in the MBR > partition table before it boots a partition. Then > the boot1 program > tries to load the boot2 program from ad0s1 instead > of ad0s4. I will try investigate the problem. Though I remember reading something like this somewhere... I can't find the source to mention it here. > > Workaround: you can make ad0s4 the only active > FreeBSD partition with > the fdisk program. If nothing else changes that, > boot1 will correctly > boot ad0s4. Yes, the workaround is correct. It was the solution. Thank you for your explanations, /Dorin. PS. It is so nice to be able to compile again the ports stuff on my machine :) (ad0s1a = /usr/ports, ad0s1d=/usr/src ;) ) __________________________________ Do you Yahoo!? Free Pop-Up Blocker - Get it now http://companion.yahoo.com/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031216172258.70439.qmail>