Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Sep 2001 10:36:39 -0400
From:      "John Straiton" <jks@clickcom.com>
To:        <freebsd-questions@freebsd.org>
Subject:   How I screwed up my system (buildworld)and how I got it back.
Message-ID:  <PHEMIEFOLOKALAMFPIPCKEIGCBAA.jks@clickcom.com>

next in thread | raw e-mail | index | archive | help
Since I wasn't really able to find any verbatim descriptions of using the
fixit disk, nor easily find answers to a couple of problems that were
preventing me from repairing my machine last night, I thought I'd send what
I did to the list to help others:

I was doing a 4.3-STABLE -> 4.4-RC upgrade of a machine, and was using the
makebuildworld/installworld, make kernel KERNCONF= method. After completing
the buildworld, kernel build, mergemaster and MAKEDEV all, I rebooted the
machine to be greeted with:


no such device 'da'
setrootbyname failed
ffs_mountroot: can't find rootvp
Root mount failed: 6

Maunal root filesystem specifications:

mountroot>


Uhh, this looks bad. So I rebooted and tried boot -s. Useless as I had
guessed. So I rebooted with kernel.old (by typing "unload kernel", then
"load kernel.old", then "boot"). However what I had forgotten is that I had
priorly done the installworld/kernel but never reboot. So by doing the
procedure again, I had replaced my kernel.old with an equally useless
kernel. Whooops! So I tried again with kernel.GENERIC, which booted as
4.0-STABLE. No such luck there either. What to do?

Well I knew that I had a fixit floppy, and that it was intended for
situations like this so I booted from the install cd, picked the fixit
option and used the floppy. Upon getting to the Fixit# prompt, I tried to
mount /dev/da0s1a /mnt
The problem was that there is no /dev/da0s1a. So I tried
Fixit#cd /dev;./MAKEDEV /da0s1a
If memory serves, there was no MAKEDEV there. However, there was when I
Fixit#cd /mnt2/dev;./MAKEDEV /da0s1a
but the problem is that it would come back as
rm: da0s1 Operation not Permitted(read only)
Fixit#
Erg. This is on the floppy which has been mounted read only, worse yet, it's
completely full so we'd have to start deleting things to make room for a new
device even if we re-mounted it. Unable to figure out a way to make MAKEDEV
put it in /dev instead of /mnt2/dev, I finally found an article that
described how to manually create the devices using mknod. The problem with
this method is that I don't know how you arrive at the major:minor numbers
without having a machine to look at. I will paste a few devices at the end
of this email for those of you who don't have a few machines to look/compare
with. However, since I did, I looked at another machine and did a ls -l
/dev/da0s1a and got:
crw-r-----  1 root  operator   13, 0x00020000 Jun 29  2000 da0s1a

So, going back to the floppy, I did:
Fixit#cd /dev; mknod /dev/da0s1a c 13 0x00020000
which created the da0s1a that I needed. Now in some cases, when you look at
another machine the 0x00020000 will actually be in base-10, so either get a
pad and paper or use a calculator to translate it to hex.

Now that I had the device, I could:
Fixit#mkdir /mnt3;mount -w /dev/da0s1a /mnt3

and find my / partition of the hardrive now mounted to /mnt3. So I
immediately:
Fixit#fsck /dev/da0s1a
to which it came back clean. Hrm. Well my next idea was to copy a kernel
from another machine and try it out. Since kernels nowadays are 2MB+ and I
don't know any practical way to gzip it and extract it later, I could either
burn it to a CD and mount the CD-ROM drive, or in my case, I would just
nfs_mount my other FreeBSD machine.

So, ifconfig -a reported that the Fixit had found my network card. A simple:
ifconfig (nic-device) (ip address) netmask (netmask) would fix my problem
Fixit#ifconfig fxp0 10.0.0.2 netmask 255.255.255.0
and then I went to my other FreeBSD machine and added the file /etc/exports
that contained this information:
/ 10.0.0.3
then I (on the good bsd box)
#nfsd -u -t -n 4
#mountd -r

Then I went to our broken machine and
Fixit#nfsiod -n 4; mkdir /mnt4
Fixit#mount -v 10.0.0.3:/ /mnt4

Now I have my good-machine's / sitting on /mnt4. This is good except I
couldn't seem to find chflags on my Fixit floppy, so I (on the good machine)
#cp /usr/bin/chflags /
Then I went to the bad machine and typed
Fixit#/mnt4/chflags noschg /mnt3/kernel
which made the kernel writeable. Now a simple
Fixit#cp /mnt4/kernel /mnt3/
will copy our working kernel to the broken machine. Dont forget to go back
later and clean chflags out of your / partition..it doesn't belong there.

Now with all that done, I typed exit and rebooted. The machine worked and
we're able to try that buildworld again.

I hope this helps anyone with any kind of "Fixit" problem. I found it very
hard to find any information on using the fixit other than how to get to the
Fixit# prompt. (I think people forget that if you can use a FreeBSD machine
running in multi-user that you won't necessarily know how to mount devices
manually, or understand /dev very well.)

John Straiton
ClickCom, Inc.
jks@clickcom.com

Here are some common boot device nodes, from a FreeBSD-4.3 machine:
crw-r-----  1 root  operator   13, 0x00020000 Jun 29  2000 da0s1a
crw-r-----  1 root  operator   13, 0x00020001 Jun 29  2000 da0s1b
crw-r-----  1 root  operator   13, 0x00020002 Jun 29  2000 da0s1c
crw-r-----  1 root  operator   13, 0x00020003 Jun 29  2000 da0s1d
crw-r-----  1 root  operator   13, 0x00020004 Jun 29  2000 da0s1e
crw-r-----  1 root  operator   13, 0x00020005 Jun 29  2000 da0s1f
crw-r-----  1 root  operator   13, 0x00020006 Jun 29  2000 da0s1g
crw-r-----  1 root  operator   13, 0x00020007 Jun 29  2000 da0s1h
crw-r-----  1 root  operator  116, 0x00020000 Mar 16  2000 ad0s1a
crw-r-----  1 root  operator  116, 0x00020001 Mar 16  2000 ad0s1b
crw-r-----  1 root  operator  116, 0x00020002 Mar 16  2000 ad0s1c
crw-r-----  1 root  operator  116, 0x00020003 Mar 16  2000 ad0s1d
crw-r-----  1 root  operator  116, 0x00020004 Mar 16  2000 ad0s1e
crw-r-----  1 root  operator  116, 0x00020005 Mar 16  2000 ad0s1f
crw-r-----  1 root  operator  116, 0x00020006 Mar 16  2000 ad0s1g
crw-r-----  1 root  operator  116, 0x00020007 Mar 16  2000 ad0s1h
crw-r-----  1 root  operator  133, 0x00020000 Jun  9  2000 amrd0s1a
crw-r-----  1 root  operator  133, 0x00020001 Jun  9  2000 amrd0s1b
crw-r-----  1 root  operator  133, 0x00020002 Jun  9  2000 amrd0s1c
crw-r-----  1 root  operator  133, 0x00020003 Jun  9  2000 amrd0s1d
crw-r-----  1 root  operator  133, 0x00020004 Jun  9  2000 amrd0s1e
crw-r-----  1 root  operator  133, 0x00020005 Jun  9  2000 amrd0s1f
crw-r-----  1 root  operator  133, 0x00020006 Jun  9  2000 amrd0s1g
crw-r-----  1 root  operator  133, 0x00020007 Jun  9  2000 amrd0s1h


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?PHEMIEFOLOKALAMFPIPCKEIGCBAA.jks>