My hardware is an ASUS A7V running two ATA100 drives as masters one on
each of the ATA100 controller channels. I also have a PCI SCSI
controller for a third hard drive, scanner and CD-RW. The 2 onboard IDE
controllers are disabled in BIOS. The BIOS boot order is ATA100/SCSI
then Onboard IDE then Floppy last is network. So my BIOS reports the
drives in the following order if present:
ATA100-1 Master 0x80
ATA100-1 Slave 0x81
ATA100-2 Master 0x82
ATA100-2 Slave 0x83
SCSI-ID0 0x84
...
etc. incrementing 0x8? by one for each SCSI ID.
For my machine Linux interpreted 0x80 as /dev/hde because it could still
interrogate the standard IDE controllers even though they were disabled
and the BIOS was not reporting any drives present during boot.
(/dev/hda -> /dev/hdd are the onboard IDE controller drives).
I could boot the Debian installation OK, even Knoppix had no problems.
But as soon as I tried booting using LILO after a normal install, it all
went pear-shaped. Sound familiar?
OK. It's easily fixed :-) Just needs a little info-gathering and
lilo.conf tweaking first.
Your BIOS is not telling LILO the truth about the hard drives.
1. Boot using a rescue floppy or Knoppix etc.
2. Run "hdparm -g /dev/hd?" on each of your hard drives (you need to
know which one is on which controller). In my case /dev/hdg and
/dev/hde. /dev/hde is the first device (or 0x80) and /dev/hdg is the
second (or 0x81).
3. Copy the drive geometry down: it is displayed as
cylinders/heads/sectors.
4. Edit lilo.conf and add the following for each drive on your ATA100
controller:
disk=/dev/hde
drive=0x80
cylinders=xxxxxx
heads=yyyyy
sectors=zzzzz
(where x/y/z is the c/h/s returned by hdparm).
5. Repeat for other drives.
6. Run "lilo" and that's it :-)
Below is a copy of my lilo.conf file to compare.
# /etc/lilo.conf - See: `lilo(8)' and `lilo.conf(5)',
# --------------- `install-mbr(8)', `/usr/share/doc/lilo/',
# and `/usr/share/doc/mbr/'.
# +---------------------------------------------------------------+
# | !! Reminder !! |
# | |
# | Don't forget to run `lilo' after you make changes to this |
# | conffile, `/boot/bootmess.txt', or install a new kernel. The |
# | computer will most likely fail to boot if a kernel-image |
# | post-install script or you don't remember to run `lilo'. |
# | |
# +---------------------------------------------------------------+
# Support LBA for large hard disks.
#
lba32
# Overrides the default mapping between harddisk names and the BIOS'
# harddisk order. Use with caution.
disk=/dev/hde
bios=0x80
cylinders=2495
heads=255
sectors=63
disk=/dev/hdg
bios=0x81
cylinders=58168
heads=16
sectors=63
# Specifies the boot device. This is where Lilo installs its boot
# block.
boot=/dev/hde
# Specifies the device that should be mounted as root. (`/')
#
root=/dev/hdg3
# Installs the specified file as the new boot sector
# You have the choice between: bmp, compat, menu and text
# Look in /boot/ and in lilo.conf(5) manpage for details
#
install=/boot/boot-menu.b
# Specifies the location of the map file
#
map=/boot/map
# Specifies the number of deciseconds (0.1 seconds) LILO should
# wait before booting the first image.
#
delay=20
prompt
timeout=150
vga=6
# Boot up Linux by default.
#
default=Linux
image=/vmlinuz
label=Linux
initrd=/boot/initrd.debinstall
read-only
append="apm=power-off vga=6"
image=/vmlinuz.old
label=LinuxOLD
read-only
optional
# If you have another OS on this machine to boot, you can uncomment the
# following lines, changing the device name on the `other' line to
# where your other OS' partition is.
other=/dev/hde1
label="Win2000-Pro"