956 lines
43 KiB
Plaintext
956 lines
43 KiB
Plaintext
LILO - Generic Boot Loader for Linux ("LInux LOader") by Werner Almesberger
|
|
=============================================================================
|
|
|
|
Important: The file INCOMPAT contains vital (in)compatibility information
|
|
for this release of LILO. Read it before proceeding.
|
|
|
|
Installing boot loaders is inherently dangerous. Be sure to have some means
|
|
to boot your system from a different media if you install LILO on your hard
|
|
disk.
|
|
|
|
|
|
NOTE: Most of the documentation has moved into the LaTeX document doc.tex.
|
|
This is only a minimal description for those who can't print or pre-
|
|
view LaTeX documents.
|
|
|
|
|
|
Features
|
|
--------
|
|
|
|
- does not depend on the file system. (Tested with Minix, EXT FS and MS-DOS
|
|
FS.)
|
|
- can be used to boot from floppies and from hard disks.
|
|
- can replace the master boot record.
|
|
- can boot non-Linux systems (MS-DOS, DR DOS, OS/2, ...)
|
|
- supports up to 16 different boot images that can be selected at boot
|
|
time. The parameters like the root disk/partition can be set independently
|
|
for each image. Images can be protected by passwords.
|
|
- boot sector, map file and boot images can be all on different disks or
|
|
partitions.
|
|
|
|
|
|
Files
|
|
-----
|
|
|
|
Files contained in lilo.13.tar.gz:
|
|
|
|
README This file.
|
|
INCOMPAT List of incompatibilities.
|
|
QuickInst.old Quick installation script for the old directory structure.
|
|
QuickInst.new Quick installation script for the new directory structure.
|
|
Makefile.old Makefile for everything else (old structure).
|
|
Makefile.new Makefile for everything else (new structure).
|
|
*.c, *.h LILO map installer source.
|
|
*.S LILO boot loader source.
|
|
activate.c Simple boot partition setter.
|
|
dparam.s Disk parameter dumper source.
|
|
disktab Sample disk parameter table.
|
|
mkbindist Shell script to create a minimal binary distribution.
|
|
mkdist Shell script used to create the current LILO distribution.
|
|
|
|
Files created after make -f Makefile.<type> (among others):
|
|
|
|
boot.b Combined boot sector.
|
|
chain.b Chain loader.
|
|
os2_d.b Chain loader to load OS/2 from the second hard disk.
|
|
lilo LILO installer.
|
|
activate Simple boot partition setter.
|
|
dparam.com MS-DOS executable of the disk parameter dumper.
|
|
|
|
|
|
!! STOP READING HERE IF YOU CAN USE THE LaTeX VERSION OF THE DOCUMENTATION !!
|
|
|
|
The LaTeX part contains introductory sections that are missing in
|
|
the README.
|
|
|
|
|
|
Installation
|
|
------------
|
|
|
|
Please read the file INCOMPAT for compatibility notes.
|
|
|
|
The installation procedure is described in the section "Normal first-time
|
|
installation". Please read "Booting basics" in the LaTeX document for the
|
|
whole story.
|
|
|
|
*** QUICK INSTALLATION ***
|
|
|
|
If you want to install LILO on your hard disk and if you don't want
|
|
to use all its features, you can use the quick installation script.
|
|
Read QuickInst.old or QuickInst.new for details.
|
|
|
|
|
|
The boot prompt
|
|
---------------
|
|
|
|
Immediately after it's loaded, LILO checks, whether one of the following is
|
|
happening:
|
|
|
|
- any of the [Shift], [Control] or [Alt] keys is being pressed.
|
|
- [CapsLock] or [ScrollLock] is set.
|
|
|
|
If this is the case, LILO displays the boot: prompt and waits for the name
|
|
of a boot image (i.e. Linux kernel or other operating system). Otherwise, it
|
|
boots the default boot image (The default boot image is either the first boot
|
|
image or the image that has been selected at the boot prompt.) or - if a delay
|
|
has been specified - waits for one of the listed activities until that amount
|
|
of time has passed.
|
|
|
|
At the boot prompt, the name of the image to boot can be entered. Typing
|
|
errors can be corrected with [BackSpace], [Delete], [Ctrl U] and [Ctrl X]. A
|
|
list of known images can be obtained by pressing [?] (on the US keyboard) or
|
|
[Tab].
|
|
|
|
If [Enter] is pressed and no file name has been entered, the default image is
|
|
booted.
|
|
|
|
LILO is also able to pass command-line options to the kernel. Command-line
|
|
options are words that follow the name of the boot image and that are
|
|
separated by spaces. Currently, the kernel recognizes the options
|
|
root=<device>, ro and rw , and all current init programs also recognize
|
|
the option single . The option vga is processed by the boot loader itself.
|
|
|
|
single boots the system in single-user mode. This bypasses all system
|
|
initialization procedures and directly starts a root shell on the console.
|
|
Multi-user mode can be entered by exiting the single-user shell or by
|
|
rebooting.
|
|
|
|
root=<device> changes the root device. This overrides settings that may have
|
|
been made in the boot image and on the LILO command line. <device> is either
|
|
a hexadecimal device number or the full path name of the device, e.g.
|
|
/dev/hda3 (The device names are hard-coded in the kernel. Therefore, only the
|
|
"standard" names are supported and some less common devices may not be
|
|
recognized.)
|
|
|
|
ro instructs the kernel to mount the root file system read-only. rw mounts
|
|
it read-write. If neither ro nor rw is specified, the setting from the
|
|
boot image is used. no387 disables using the hardware FPU.
|
|
|
|
Depending on the kernel configuration, also some special configuration options
|
|
for non-standard hardware may be recognized. Please consult the corresponding
|
|
FAQs and HOWTOs for details.
|
|
|
|
vga=<mode> alters the VGA mode set at startup. The values NORMAL, EXTENDED,
|
|
ASK or a decimal number are recognized.
|
|
|
|
Other options of the type <variable>=<value> than root and vga cause the
|
|
respective variables to be set in the environment passed to init. The case of
|
|
the variable name is preserved. (I.e. it's not automatically converted to
|
|
upper case.)
|
|
|
|
Example:
|
|
|
|
boot: linux single root=200
|
|
|
|
LILO always passes the string "BOOT_IMAGE=<name>" to the kernel, where <name>
|
|
is the name by which the kernel is identified (e.g. the label). This variable
|
|
can be used in /etc/rc to select different behaviour, depending on the kernel.
|
|
|
|
When booting automatically, the word "auto" is also passed on the command
|
|
line. This can be used by init to suppress interactive prompts in the boot
|
|
phase.
|
|
|
|
The default image is typically the first image in the map file. However, after
|
|
an unsuccessful boot attempt, the respective image becomes the default image.
|
|
|
|
|
|
Map installer
|
|
-------------
|
|
|
|
The map installer program /etc/lilo/lilo updates the boot sector and creates
|
|
the map file. If the map installer detects an error, it terminates immediately
|
|
and does not touch the boot sector and the map file.
|
|
|
|
Whenever the map installer updates a boot sector, the original boot sector is
|
|
copied to /etc/lilo/boot.<number>, where <number> is the hexadecimal device
|
|
number. If such a file already exists, no backup copy is made. Similarly, a
|
|
file /etc/lilo/part.<number> is created if LILO modifies the partition table.
|
|
|
|
|
|
Command-line arguments
|
|
----------------------
|
|
|
|
The LILO map installer accepts the following command-line options:
|
|
|
|
-C <config_file>
|
|
Specifies the configuration file that is used by the map installer. If -C
|
|
is omitted, /etc/lilo/config is used.
|
|
-I <name> options...
|
|
Translates the specified label name to the path of the corresponding
|
|
kernel image and prints that path on standard output. This can be used to
|
|
rebuild files that depend on the kernel (e.g. the ps database). The image
|
|
name can be obtained from the environment variable BOOT_IMAGE . An error
|
|
message is issued and a non-zero exit code is returned if no matching
|
|
label name can be found. The existence of the image file is verified if
|
|
the option character v is added.
|
|
-q
|
|
Lists the currently mapped files.
|
|
-r <root_directory>
|
|
Chroots to the specified directory before doing anything else. This is
|
|
useful when running the map installer while the normal root file system is
|
|
mounted somewhere else, e.g. when recovering from an installation failure
|
|
with an install disk. The -r option is implied if the environment
|
|
variable ROOT is set. I.e. if your root partition is mounted on /mnt, you
|
|
can update the map by simply running ROOT=/mnt /mnt/etc/lilo/lilo .
|
|
The current directory is changed to the new root directory, so using
|
|
relative paths may not work.
|
|
-R <word> ...
|
|
Stores the specified words in the map file. The boot loader uses those
|
|
words as the default command line when booting the next time. That command
|
|
line is removed from the map file by the boot loader by overwriting the
|
|
sector immediately after reading it. The first word has to be the name of
|
|
a boot image. If -R is not followed by any words, the current default
|
|
command line in the map file is erased. -R is typically used in reboot
|
|
scripts, e.g.
|
|
#!/bin/sh
|
|
if /etc/lilo/lilo -R "$*"; then
|
|
echo | shutdown -r now
|
|
fi
|
|
An error message is issued and a non-zero exit code is returned if the
|
|
command line is not accepted.
|
|
-t
|
|
Test only. This performs the entire installation procedure except
|
|
replacing the map file and writing the modified boot sector. This can be
|
|
used in conjunction with the -v option to verify that LILO will use sane
|
|
values.
|
|
-V
|
|
Print the version number and exit.
|
|
|
|
There are also many command-line options that correspond to configuration
|
|
variables.
|
|
|
|
Command-line option Configuration variable
|
|
------------------- ----------------------
|
|
-b <boot_device> boot=<boot_device>
|
|
-c compact
|
|
-d <tsecs> delay=<tsecs>
|
|
-i <boot_sector> install=<boot_sector>
|
|
-f <disktab_file> disktab=<disktab_file>
|
|
-l linear
|
|
-m <map_file> map=<map_file>
|
|
-P fix fix-table
|
|
-P ignore ignore-table
|
|
-s <backup_file> backup=<backup_file>
|
|
-S <backup_file> force-backup=<backup_file>
|
|
-v ... verbose=<level>
|
|
|
|
The image files can reside on any media that is accessible at boot time.
|
|
There's no need to put them on the root device, although this certainly
|
|
doesn't hurt.
|
|
|
|
|
|
Configuration
|
|
-------------
|
|
|
|
The configuration information is stored in the file /etc/lilo/config and
|
|
consists of variable assignments. The following syntax rules apply:
|
|
|
|
- flag variables consist of a single word and are followed by whitespace or
|
|
the end of the file.
|
|
- string variables consist of the variable name, optional whitespace, an
|
|
equal sign, optional whitespace, the value and required whitespace, or the
|
|
end of the file.
|
|
- a non-empty sequence of blanks, tabs, newlines and comments counts as
|
|
whitespace.
|
|
- variable names are case-insensitive. Values are usually case-sensitive, but
|
|
there are a few exceptions. (See below.)
|
|
- tabs and newlines are special characters and may not be part of a variable
|
|
name or a value. The use of other control characters and non-ASCII
|
|
characters is discouraged.
|
|
- blanks and equal signs may only be part of a variable name or a value if
|
|
they are escaped by a backslash or if the value is embedded in double
|
|
quotes. An equal sign may not be the only character in a name or value.
|
|
- an escaped tab is converted to an escaped blank. An escaped newline is
|
|
removed from the input stream. An escaped backslash (i.e. two backslashes)
|
|
is converted to a backslash. Inside quoted strings, only double quotes can
|
|
be escaped.
|
|
- comments begin with a number sign and end with the next newline. All
|
|
characters (including backslashes) until the newline are ignored.
|
|
|
|
/etc/lilo/config begins with a possibly empty options section. Most options
|
|
can also be set from the command line, but storing permanent options in the
|
|
configuration file is more convenient. The following options are recognized:
|
|
|
|
BOOT=<boot_device> Sets the name of the device (e.g. a hard disk partition)
|
|
that contains the boot sector. If BOOT is omitted, the boot sector is read
|
|
from (and possibly written to) the device that is currently mounted as
|
|
root.
|
|
COMPACT Tries to merge read requests for adjacent sectors into a single
|
|
read request. This drastically reduces load time and keeps the map
|
|
smaller. Using COMPACT is especially recommended when booting from a
|
|
floppy disk.
|
|
DELAY=<tsecs> Specifies the number of tenths of a second LILO should wait
|
|
before booting the first image. This is useful on systems that immediately
|
|
boot from the hard disk after enabling the keyboard. LILO doesn't wait if
|
|
DELAY is omitted.
|
|
LINEAR Generate linear sector addresses instead of sector/head/cylinder
|
|
addresses. Linear addresses are translated at run time and do not depend
|
|
on disk geometry. Note that boot disks, where LINEAR is used, may not be
|
|
portable.
|
|
INSTALL=<boot_sector> Install the specified file as the new boot sector.
|
|
If INSTALL is omitted, /etc/lilo/boot.b is used as the default.
|
|
DISKTAB=<disktab_file> Specifies the name of the disk parameter table. The
|
|
map installer looks for /etc/lilo/disktab if DISKTAB is omitted.
|
|
MAP=<map_file> Specifies the location of the map file. If MAP is omitted,
|
|
a file /etc/lilo/map is used.
|
|
MESSAGE=<message_file> specifies a file containing a message that is
|
|
displayed before the boot prompt. No message is displayed when waiting for
|
|
a shifting key after printing "LILO ". The FF character ([Ctrl L]) clears
|
|
the local screen. The size of the message file is limited to 65535 bytes.
|
|
The map file has to be rebuilt if the message file is changed or moved.
|
|
VERBOSE=<level> Turns on lots of progress reporting. Higher numbers give
|
|
more verbose output. If -v is additionally specified on the command
|
|
line, <level> is increased accordingly.
|
|
BACKUP=<backup_file> Copy the original boot sector to <backup_file> (which
|
|
may also be a device, e.g. /dev/null) instead of /etc/lilo/boot.<number>
|
|
FORCE-BACKUP=<backup_file> Like BACKUP, but overwrite an old backup copy
|
|
if it exists. BACKUP=<backup_file> is ignored if FORCE-BACKUP appears in
|
|
the same configuration file.
|
|
PROMPT forces entering the boot prompt without expecting any prior
|
|
key-presses. Unattended reboots are impossible if PROMPT is set and
|
|
TIMEOUT isn't.
|
|
TIMEOUT=<tsecs> sets a timeout (in tenths of a second) for keyboard input.
|
|
If no key is pressed for the specified time, the first image is
|
|
automatically booted. Similarly, password input is aborted if the user is
|
|
idle for too long. The default timeout is infinite.
|
|
SERIAL=<parameters> enables control from a serial line. The specified
|
|
serial port is initialized and LILO is accepting input from it and from
|
|
the PC's keyboard. Sending a break on the serial line corresponds to
|
|
pressing a shift key on the console in order to get LILO's attention. All
|
|
boot images should be password-protected if the serial access is less
|
|
secure than access to the console, e.g. if the line is connected to a
|
|
modem. The parameter string has the following syntax:
|
|
<port>,<bps><parity><bits>
|
|
The components <bps>, <parity> and <bits> can be omitted. If a component
|
|
is omitted, all following components have to be omitted too. Additionally,
|
|
the comma has to be omitted if only the port number is specified.
|
|
|
|
<port> the number of the serial port, zero-based. 0 corresponds to COM1
|
|
alias /dev/ttyS0, etc. All four ports can be used (if present).
|
|
<bps> the baud rate of the serial port. The following baud rates are
|
|
supported: 110, 150, 300, 600, 1200, 2400, 4800 and 9600 bps. Default
|
|
is 2400 bps.
|
|
<parity> the parity used on the serial line. LILO ignores input parity
|
|
and strips the 8th bit. The following (upper or lower case) characters
|
|
are used to describe the parity: n for no parity, e for even
|
|
parity and o for odd parity.
|
|
<bits> the number of bits in a character. Only 7 and 8 bits are
|
|
supported. Default is 8 if parity is "none", 7 if parity is "even" or
|
|
"odd".
|
|
|
|
If SERIAL is set, the value of DELAY is automatically raised to 20.
|
|
Example: serial=0,2400n8 initializes COM1 with the default parameters.
|
|
IGNORE-TABLE tells LILO to ignore corrupt partition tables.
|
|
FIX-TABLE allows LILO to adjust 3D addresses in partition tables. Each
|
|
partition entry contains a 3D (sector/head/cylinder) and a linear address
|
|
of the first and the last sector of the partition. If a partition is not
|
|
track-aligned and if certain other operating systems (e.g. PC/MS-DOS or
|
|
OS/2) are using the same disk, they may change the 3D address. LILO can
|
|
store its boot sector only on partitions where both address types
|
|
correspond. LILO re-adjusts incorrect 3D start addresses if FIX-TABLE is
|
|
set.
|
|
WARNING: This does not guarantee that other operating systems may not
|
|
attempt to reset the address later. It is also possible that this change
|
|
has other, unexpected side-effects. The correct fix is to re-partition the
|
|
drive with a program that does align partitions to tracks.
|
|
PASSWORD=<password> sets a password for all images. (See below.)
|
|
RESTRICTED relaxes the password protection. (See below.)
|
|
OPTIONAL makes all images optional. (See below.)
|
|
|
|
Additionally, the kernel configuration parameters APPEND, RAMDISK, READ-ONLY,
|
|
READ-WRITE, ROOT and VGA can be set in the options section. They are used as
|
|
defaults if they aren't specified in the configuration sections of the
|
|
respective kernel images. See below for a description.
|
|
|
|
If the option -q is specified on the command line, the currently mapped
|
|
files are listed. Otherwise, a new map is created for the images described in
|
|
the configuration file /etc/lilo/config and they are registered in the boot
|
|
sector.
|
|
|
|
Each image description begins with a special variable and is followed by
|
|
optional variables. The following variables can be used for all image
|
|
descriptions that describe a Linux kernel:
|
|
|
|
APPEND=<string> Appends the options specified in <string> to the parameter
|
|
line passed to the kernel. This is typically used to specify parameters of
|
|
hardware that can't be entirely auto-detected, e.g.
|
|
append = "hd=64,32,202"
|
|
LITERAL=<string> Like APPEND, but removes all other options (e.g. setting
|
|
of the root device). Because vital options can be removed unintentionally
|
|
with LITERAL, this option cannot be set in the global options section.
|
|
RAMDISK=<size> specifies the size of the optional RAM disk. A value of zero
|
|
indicates that no RAM disk should be created. If this variable is omitted,
|
|
the RAM disk size that is configured into the boot image is used.
|
|
READ-ONLY specifies that the root file system should be mounted read-only.
|
|
Typically, the system startup procedure re-mounts the root file system
|
|
read-write later (e.g. after fsck'ing it).
|
|
READ-WRITE specifies that the root file system should be mounted
|
|
read-write.
|
|
ROOT=<root_device> specifies the device that should be mounted as root. If
|
|
the special name current is used, the root device is set to the device
|
|
on which the root file system is currently mounted. If the root has been
|
|
changed with -r , the respective device is used. If the variable ROOT is
|
|
omitted, the root device setting that is contained in the kernel image is
|
|
used. It can be changed with the rdev program.
|
|
VGA=<mode> specifies the VGA text mode that should be selected when
|
|
booting. The following values are recognized (case is ignored):
|
|
|
|
NORMAL select normal 80x25 text mode.
|
|
EXTENDED select 80x50 text mode. The word EXTENDED can be abbreviated
|
|
to EXT.
|
|
ASK stop and ask for user input (at boot time).
|
|
<number> use the corresponding text mode. A list of available modes can
|
|
be obtained by booting with vga=ask and pressing [Enter].
|
|
|
|
If this variable is omitted, the VGA mode setting that is contained in the
|
|
kernel image is used. rdev supports manipulation of the VGA text mode
|
|
setting in the kernel image.
|
|
|
|
If one of RAMDISK, READ-ONLY, READ-WRITE, ROOT or VGA is omitted in the
|
|
configuration file and the corresponding value in the kernel image is changed,
|
|
LILO will use the new value.
|
|
|
|
It is perfectly valid to use different settings for the same image, because
|
|
LILO stores them in the image descriptors and not in the images themselves.
|
|
|
|
Example:
|
|
|
|
image = /linux
|
|
label = lin-hd
|
|
root = /dev/hda2
|
|
image = /linux
|
|
label = lin-fd
|
|
root = /dev/fd0
|
|
|
|
LILO uses the main file name (without its path) of each image specification
|
|
to identify that image. A different name can be used by setting the variable
|
|
LABEL (see the example above). A different name for the same entry can be used
|
|
by specifying the ALIAS=<name> option.
|
|
|
|
Images are protected by a password if the variable PASSWORD is set. If the
|
|
variable RESTRICTED is set in addition to PASSWORD, a password is only
|
|
required to boot the respective image if parameters are specified on the
|
|
command line (e.g. single). PASSWORD and RESTRICTED can also be set in the
|
|
options section to be the default password and password protection mode for
|
|
all images.
|
|
|
|
If an image section contains the variable OPTIONAL (or if that variable is set
|
|
in the options section), the respective image is omitted if its main file is
|
|
not available at map creation time. This is useful to specify test kernels
|
|
that are not always present.
|
|
|
|
|
|
Boot image types
|
|
----------------
|
|
|
|
LILO can boot the following types of images:
|
|
|
|
- kernel images from a file.
|
|
- kernel images from a block device. (I.e. a floppy disk.)
|
|
- the boot sector of some other operating system.
|
|
|
|
The image type is determined by the name of the initial variable of the
|
|
configuration section.
|
|
|
|
In the configuration sections of all boot images, the following variables are
|
|
recognized: ALIAS, LABEL, OPTIONAL, PASSWORD and RESTRICTED.
|
|
|
|
In the configuration sections of all kernels (i.e. every boot image type
|
|
except "other operating system"), the following variables are recognized:
|
|
RAMDISK, READ-ONLY, READ-WRITE, ROOT and VGA.
|
|
|
|
|
|
Booting kernel images from a file
|
|
-------------------------------
|
|
|
|
The image is specified as follows: image=<name>
|
|
|
|
Example:
|
|
|
|
image = /linux
|
|
|
|
|
|
Booting kernel images from a device
|
|
-----------------------------------------------
|
|
|
|
The range of sectors that should be
|
|
mapped, has to be specified. Either a range (<start>-<end>) or a start and a
|
|
distance (<start>+<number>) have to be specified. <start> and <end> are zero
|
|
based. If only the start is specified, only that sector is mapped.
|
|
|
|
The image is specified as follows: image=<device_name> Additionally, the
|
|
RANGE variable must be set.
|
|
|
|
Example:
|
|
|
|
image = /dev/fd0
|
|
range = 1+512
|
|
|
|
|
|
Booting a foreign operating system
|
|
----------------------------------
|
|
|
|
LILO can even boot other operating systems, i.e. MS-DOS. To boot an other
|
|
operating system, the name of a loader program, the device that contains the
|
|
boot sector and the device that contains the partition table have to be
|
|
specified.
|
|
|
|
The boot sector is merged with the partition table and stored in the map file.
|
|
|
|
Currently, the loaders chain.b, os2_d.b and any_d.b exist. chain.b simply
|
|
starts the specified boot sector. (The boot sector is loaded by LILO's
|
|
secondary boot loader before control is passed to the code of chain.b.)
|
|
os2_d.b can boot OS/2 from the second hard disk. any_d.b installs a resident
|
|
driver that swaps the first and the second hard disk drive. It can boot any
|
|
operating system from the second hard disk, if it uses only the BIOS. This
|
|
is known to work for PC/MS-DOS.
|
|
|
|
The image is specified as follows: other=<device_name>
|
|
|
|
The following additional variables are recognized: LOADER, TABLE and UNSAFE.
|
|
|
|
LOADER=<chain_loader> specifies the chain loader that should be used. If it
|
|
is omitted, /etc/lilo/chain.b is used.
|
|
TABLE=<device> specifies the device that contains the partition table. LILO
|
|
does not pass partition information to the booted operating system if this
|
|
variable is omitted. (Some operating systems have other means to determine
|
|
from which partition they have been booted. E.g. MS-DOS usually stores the
|
|
geometry of the boot disk or partition in its boot sector.)
|
|
UNSAFE do not access the boot sector at map creation time. This disables
|
|
some sanity checks. If the boot sector is on a fixed-format floppy disk
|
|
device, using UNSAFE avoids the need to put a readable disk into the drive
|
|
when running the map installer. UNSAFE and TABLE are mutually
|
|
incompatible.
|
|
|
|
Example:
|
|
|
|
other = /dev/hda2
|
|
label = os2
|
|
table = /dev/hda
|
|
|
|
|
|
Disk parameter table
|
|
--------------------
|
|
|
|
For floppies, IDE disks (or MFM, RLL, ESDI, etc.) and most SCSI disks, LILO
|
|
can obtain the disk geometry information from the kernel. Unfortunately, this
|
|
is not possible with all SCSI adapters. (The 0.99pl7 kernel provides geometry
|
|
information for Adaptec AHA-1542 and AHA-1740, Future Domain TMC-1660,
|
|
TMC-1670 and TMC-1680, UltraStor 14F and WD-7000 adapters.) In such cases,
|
|
LILO reports either the error
|
|
geo_query_dev HDIO_GETGEO (dev 0x<number>)
|
|
or
|
|
Device 0x<number>: Got bad geometry <sec>/<hd>/<cyl>
|
|
|
|
The file /etc/lilo/disktab is used to describe such disks. For each device
|
|
(/dev/sda -> 0x800, /dev/sda1 -> 0x801, etc.), the BIOS code and the disk
|
|
geometry have to be specified, e.g.
|
|
|
|
|
|
# /etc/lilo/disktab - LILO disk parameter table
|
|
#
|
|
# This table contains disk parameters for SCSI disks and non-
|
|
# standard parameters of IDE disks. Parameters in disktab
|
|
# _always_ override auto-detected disk parameters.
|
|
|
|
# Dev. BIOS Secs/ Heads/ Cylin- Part.
|
|
# num. code track cylin. ders offset
|
|
# (optional)
|
|
|
|
0x800 0x80 32 64 631 0 # /dev/sda
|
|
0x801 0x80 32 64 631 32 # /dev/sda1
|
|
0x802 0x80 32 64 631 204800 # /dev/sda2
|
|
|
|
|
|
Those parameters are just a random example from my system. However, many SCSI
|
|
controllers re-map the drives to 32 sectors and 64 heads. The number of
|
|
cylinders does not have to be exact, but it shouldn't be lower than the number
|
|
of effectively available cylinders.
|
|
|
|
Note that the device number and the BIOS code have to be specified as
|
|
hexadecimal numbers with the "0x" prefix.
|
|
|
|
The disk geometry parameters can be obtained by booting MS-DOS and running the
|
|
program DPARAM.COM with the hexadecimal BIOS code of the drive as its
|
|
argument, e.g. dparam 0x80 for the first hard disk. It displays the number
|
|
of sectors per track, the number of heads per cylinder and the number of
|
|
cylinders. All three numbers are one-based.
|
|
|
|
The partition offset is only necessary when using devices for which the kernel
|
|
does not provide that information, e.g. CD-ROMs. The partition offset is
|
|
counted in sectors and is zero-based.
|
|
|
|
Because many SCSI controllers don't support more than 1 GB when using the BIOS
|
|
interface, LILO can't access files that are located beyond the 1 GB limit of
|
|
large SCSI disks on such controllers and reports errors in these cases.
|
|
|
|
|
|
Installation and updates
|
|
------------------------
|
|
|
|
IMPORTANT: The current version of LILO supports two different directory
|
|
hierarchies: the old hierarchy, where everything lives in /etc/lilo and a
|
|
new hierarchy with files in /sbin, /etc and /boot. Depending on which
|
|
hierarchy you want to use, the respective QuickInst and Makefile files
|
|
have to be chosen. See INCOMPAT for details.
|
|
|
|
|
|
Compatibility
|
|
-------------
|
|
|
|
The kernel header files have to be in /usr/include/linux and the kernel
|
|
usually has to be configured by running make config before LILO can be
|
|
compiled.
|
|
|
|
/bin/sh has to be a real bourne shell. bash is sufficiently compatible, but
|
|
some ksh clones may cause problems.
|
|
|
|
Using command-line options that are handled by init usually requires a
|
|
comparably new version of init. All currently available init packages
|
|
typically support new features of LILO in the respective next release.
|
|
|
|
A file named INCOMPAT is included in the distribution. It describes
|
|
incompatibilities to older versions of LILO and may also contain further
|
|
compatibility notes.
|
|
|
|
|
|
Quick installation
|
|
------------------
|
|
|
|
If you want to install LILO on your hard disk and if you don't want to use all
|
|
its features, you can use the quick installation script. Read QuickInst.old
|
|
or QuickInst.new for details.
|
|
|
|
QuickInst can only be used for first-time installations or to entirely replace
|
|
an existing installation, _not_ to update or modify an existing installation
|
|
of LILO. Be sure you've extracted LILO into a directory that doesn't contain
|
|
any files of other LILO installations.
|
|
|
|
|
|
Normal first-time installation
|
|
------------------------------
|
|
|
|
First, you have to install the LILO files:
|
|
|
|
- extract all files from lilo.<version>.tar.gz in a new directory. (Don't use
|
|
/etc/lilo for the LILO source. Standard installation procedures fail if the
|
|
source is in the same directory as the production binaries.)
|
|
- configure the Makefile
|
|
- run make -f Makefile.old to compile and assemble all parts if you want to
|
|
use the old directory structure, or make -f Makefile.new if you prefer
|
|
the new structure.
|
|
- run make -f Makefile.old install or make -f Makefile.new install to
|
|
copy all LILO files to /etc/lilo (or to the new directories). /etc/lilo
|
|
should now contain the following files: any_d.b, boot.b, chain.b, disktab,
|
|
lilo and os2_d.b.
|
|
|
|
If you want to use LILO on a SCSI disk, you might have to determine the
|
|
parameters of your SCSI disk(s) and put them into the file /etc/lilo/disktab
|
|
(see "Disk parameter table"). If you're using a disktab file, the next step is
|
|
to test LILO with the boot sector on a floppy disk:
|
|
|
|
- insert a blank (but low-level formatted) floppy disk into /dev/fd0.
|
|
- cd to /etc/lilo
|
|
- run echo image=<kernel_image> | ./lilo -C - -b /dev/fd0 -v -v -v
|
|
If you've already installed LILO on your system, you might not want to
|
|
overwrite your old map file. Use the -m option to specify an alternate
|
|
map file name.
|
|
- reboot. LILO should now load its boot loaders from the floppy disk and then
|
|
continue loading the kernel from the hard disk.
|
|
|
|
Now, your have to decide, which boot concept you want to use. Let's assume
|
|
you have a Linux partition on /dev/hda2 and you want to install your LILO boot
|
|
sector there. The DOS-MBR loads the LILO boot sector.
|
|
|
|
- Get a working boot disk. Verify that you can boot with this setup and that
|
|
you can mount your Linux partition(s) with it.
|
|
- If the boot sector you want to overwrite with LILO is of any value (e.g.
|
|
it's the MBR or if it contains a boot loader, you might want to use if you
|
|
encounter problems with LILO), you should mount your boot disk and make a
|
|
backup copy of your boot sector to a file on that floppy, e.g.
|
|
dd if=/dev/hda of=/fd/boot_sector bs=512 count=1
|
|
- Link /etc/lilo/install to lilo (for backwards compatibility), e.g.
|
|
cd /etc/lilo; ln -s lilo install
|
|
- Create the configuration file /etc/lilo/config, e.g.
|
|
<global settings>
|
|
<image specifications>
|
|
...
|
|
Be sure to use absolute paths for all files. Relative paths may cause
|
|
unexpected behaviour when using the -r option.
|
|
- Now, you can check what LILO would do if you were about to install it on
|
|
your hard disk:
|
|
/etc/lilo/lilo -v -v -v -t
|
|
- If you need some additional boot utility (i.e. BOOTACTV), you should
|
|
install that now.
|
|
- Run /etc/lilo/lilo to install LILO on your hard disk.
|
|
- If you have to change the active partition, use fdisk or activate to do
|
|
that.
|
|
- Reboot.
|
|
|
|
|
|
LILO update
|
|
-----------
|
|
|
|
When updating to a new version of LILO, the initial steps are the same as for
|
|
a first time installation: extract all files, configure the Makefile, run
|
|
make to build the executables and run make install to move the files to
|
|
/etc/lilo.
|
|
|
|
The old versions of boot.b, chain.b, etc. are automatically renamed to
|
|
boot.old, chain.old, etc. This is done to ensure that you can boot even if the
|
|
installation procedure does not finish. boot.old, chain.old, etc. can be
|
|
deleted after the map file is rebuilt.
|
|
|
|
Because the locations of boot.b, chain.b, etc. have changed and because the
|
|
map file format may be different too, you have to update the boot sector and
|
|
the map file. Run /etc/lilo/lilo to do this.
|
|
|
|
|
|
Kernel update
|
|
-------------
|
|
|
|
Whenever any of the kernel files that are accessed by LILO is moved or
|
|
overwritten, the map has to be re-built. (It is advisable to keep a second,
|
|
stable, kernel image that can be booted if you forget to update the map after
|
|
a change to your usual kernel image.) Run /etc/lilo/lilo to do this.
|
|
|
|
The kernel has a make target "zlilo" that copies the kernel to /vmlinuz and
|
|
runs /etc/lilo/install.
|
|
|
|
|
|
LILO de-installation
|
|
--------------------
|
|
|
|
In order to stop LILO from being invoked when the system boots, its boot
|
|
sector has to be either removed or disabled. All other files belonging to LILO
|
|
can be deleted _after_ removing the boot sector, if desired. (Backup copies
|
|
of old boot sectors may be needed when removing the boot sector. They are
|
|
stored in \tt /etc/lilo .)
|
|
|
|
If LILO's boot sector has been installed on a primary partition and is booted
|
|
by the "standard" MBR or some partition switcher program, it can be disabled
|
|
by making a different partition active. MS-DOS' FDISK, Linux fdisk or LILO's
|
|
activate can do that.
|
|
|
|
If LILO's boot sector is the master boot record (MBR) of a disk, it has to be
|
|
replaced with a different MBR, typically MS-DOS' "standard" MBR. When using
|
|
MS-DOS 5.0 or above, the MS-DOS MBR can be restored with FDISK /MBR . This
|
|
only alters the boot loader code, not the partition table.
|
|
|
|
LILO automatically makes backup copies when it overwrites boot sectors. They
|
|
are named /etc/lilo/boot.<nnnn>, with <nnnn> corresponding to the device
|
|
number, e.g. 0300 is /dev/hda, 0800 is /dev/sda, etc. Those backups can be
|
|
used to restore the old MBR if no easier method is available. The commands are
|
|
dd if=/etc/lilo/boot.0300 of=/dev/hda bs=446 count=1 or
|
|
dd if=/etc/lilo/boot.0800 of=/dev/sda bs=446 count=1
|
|
respectively.
|
|
|
|
WARNING: Some Linux distributions install boot.<nnnn> files from the system
|
|
where the distribution was created in /etc/lilo. Using those files may yield
|
|
unpredictable results. Therefore, the file creation date should be carefully
|
|
checked.
|
|
|
|
|
|
Installation of other operating systems
|
|
---------------------------------------
|
|
|
|
Some other operating systems (e.g. MS-DOS 6.0) appear to modify the MBR in
|
|
their install procedures. It is therefore possible that LILO will stop to
|
|
work after such an installation and Linux has to be booted from floppy disk.
|
|
The original state can be restored by either re-running /etc/lilo/lilo (if
|
|
LILO is installed as the MBR) or by making LILO's partition active (if it's
|
|
installed on a primary partition).
|
|
|
|
Typically, the new operating system then has to be added to LILO's
|
|
configuration (and /etc/lilo/lilo has to be re-run) in order to boot it.
|
|
|
|
|
|
Build-time configuration
|
|
------------------------
|
|
|
|
Certain build-time parameters can be configured. They can either be edited in
|
|
the top-level Makefile or they can be stored in a file
|
|
/etc/lilo/config.defines. Settings in the Makefile are ignored if that file
|
|
exists.
|
|
|
|
The following items can be configured:
|
|
|
|
IGNORECASE Makes image name matching case-insensitive, i.e. "linux" and
|
|
"Linux" are identical. This option is enabled by default. Note that
|
|
password matching is always case-sensitive.
|
|
NO1STDIAG Do not generate diagnostics on read errors in the first stage
|
|
boot loader. This avoids possibly irritating error codes if the disk
|
|
controller has transient read problems. This option is disabled by
|
|
default.
|
|
NOINSTDEF If the option INSTALL is omitted, don't install a new boot
|
|
sector, but try to modify the old boot sector instead. This option is
|
|
disabled by default.
|
|
ONE_SHOT Disables the command-line timeout (configuration variable TIMEOUT)
|
|
if any key is pressed. This way, very short timeouts can be used if PROMPT
|
|
is set. ONE_SHOT is disabled by default.
|
|
READONLY Disallows overwriting the default command line sector of the map
|
|
file. This way, command lines set with -R stay in effect until they are
|
|
explicitly removed. This option is disabled by default.
|
|
|
|
/etc/lilo/config.defines should be used if one wishes to make permanent
|
|
configuration changes. The usual installation procedures don't touch that
|
|
file. Example:
|
|
|
|
-DIGNORECASE -DONE_SHOT
|
|
|
|
|
|
Troubleshooting
|
|
---------------
|
|
|
|
All parts of LILO display some messages that can be used to diagnose problems.
|
|
|
|
|
|
Map installer errors
|
|
--------------------
|
|
|
|
Most messages of the map installer (/etc/lilo/lilo) should be
|
|
self-explanatory. Some messages that indicate common errors are listed below:
|
|
|
|
Can't put the boot sector on logical partition <number>
|
|
An attempt has been made to put LILO's boot sector on the current root
|
|
file system partition which is on a logical partition. This usually
|
|
doesn't have the desired effect, because common MBRs can only boot primary
|
|
partitions. This check can be bypassed by explicitly specifying the boot
|
|
partition with the -b option or by setting the configuration variable
|
|
BOOT.
|
|
Device 0x<number>: Got bad geometry <sec>/<hd>/<cyl>
|
|
The device driver for your SCSI controller does not support geometry
|
|
detection. You have to use an /etc/lilo/disktab file.
|
|
Device 0x<number>: Invalid partition table, entry <number>
|
|
The 3D and linear addresses of the first sector of the specified partition
|
|
don't correspond. This is typically caused by partitioning a disk with a
|
|
program that doesn't align partitions to tracks and using PC/MS-DOS or
|
|
OS/2 later on that disk. LILO can attempt to correct the problem, see
|
|
variable FIX-TABLE.
|
|
First sector of <device> doesn't have a valid boot signature
|
|
The first sector of the specified device does not appear to be a valid
|
|
boot sector. You might have confused the device name. (Because different
|
|
partition programs may display the partitions in a different order, it is
|
|
possible that what you think is your first partition isn't /dev/hda1, etc.
|
|
A good method to verify the content of a partition is to try to mount it.)
|
|
geo_comp_addr: Cylinder number is too big (<number> > 1023)
|
|
A file is located beyond the 1024th cylinder of a hard disk. LILO can't
|
|
access such files, because the BIOS limits cylinder numbers to the range
|
|
0...1023. Try moving the file to a different place, preferably a partition
|
|
that is entirely within the first 1024 cylinders of the disk.
|
|
Hole found in map file (<location>)
|
|
The map installer is confused about the disk organization. Please report
|
|
this error.
|
|
<item> doesn't have a valid LILO signature
|
|
The specified item has been located, but is not part of LILO. If <item> is
|
|
the first boot sector, you've probably forgotten to specify the -i
|
|
option or the install variable to install the LILO boot sector.
|
|
<item> has an invalid stage code (<number>)
|
|
The specified item has probably been corrupted. Try re-building LILO.
|
|
<item> is version <number>. Expecting version <number>.
|
|
The specified entity is either too old or too new. Make sure all parts of
|
|
LILO (map installer, boot loaders and chain loaders) are from the same
|
|
distribution. If <item> is the first boot sector, you have to run the map
|
|
installer with the -i option to update it. (The expected version number
|
|
may be different from the version number of the LILO package.)
|
|
Kernel <name> is too big
|
|
The kernel image (without the setup code) is bigger than 512 kbytes. LILO
|
|
would overwrite itself when trying to load such a kernel. Try removing
|
|
some unused drivers and compiling the kernel again.
|
|
Partition entry not found
|
|
The partition from which an other operating system should be booted isn't
|
|
listed in the specified partition table. This either means that an
|
|
incorrect partition table has been specified or that you're trying to boot
|
|
from a logical partition. The latter usually doesn't work. You can bypass
|
|
this check by omitting the partition table specification (e.g. omitting
|
|
the variable TABLE).
|
|
Sorry, don't know how to handle device <number>
|
|
LILO uses files that are located on a device for which there is no easy
|
|
way to determine the disk geometry. Such devices have to be described in
|
|
the file /etc/lilo/disktab.
|
|
|
|
|
|
LILO start message
|
|
------------------
|
|
|
|
When LILO loads itself, it displays the word "LILO". Each letter is printed
|
|
before or after performing some specific action. If LILO fails at some point,
|
|
the letters printed so far can be used to identify the problem. This is
|
|
described in more detail in the technical overview.
|
|
|
|
Note that some hex digits may be inserted after the first "L" if a transient
|
|
disk problem occurs. Unless LILO stops at that point, generating an endless
|
|
stream of error codes, such hex digits do not indicate a severe problem.
|
|
|
|
(nothing) No part of LILO has been loaded. LILO either isn't installed or
|
|
the partition on which its boot sector is located isn't active.
|
|
L<error>... The first stage boot loader has been loaded and started, but
|
|
it can't load the second stage boot loader. The two-digit error codes
|
|
indicate the type of problem. (They are described in the next section.)
|
|
This condition usually indicates a media failure or a geometry mismatch
|
|
(e.g. bad parameters in /etc/lilo/disktab).
|
|
LI The first stage boot loader was able to load the second stage boot
|
|
loader, but has failed to execute it. This can either be caused by a
|
|
geometry mismatch or by moving /etc/lilo/boot.b without running the map
|
|
installer.
|
|
LIL The second stage boot loader has been started, but it can't load the
|
|
descriptor table from the map file. This is typically caused by a media
|
|
failure or by a geometry mismatch.
|
|
LIL? The second stage boot loader has been loaded at an incorrect address.
|
|
This is typically caused by a subtle geometry mismatch or by moving
|
|
/etc/lilo/boot.b without running the map installer.
|
|
LIL- The descriptor table is corrupt. This can either be caused by a
|
|
geometry mismatch or by moving /etc/lilo/map without running the map
|
|
installer.
|
|
LILO All parts of LILO have been successfully loaded.
|
|
|
|
|
|
Disk error codes
|
|
----------------
|
|
|
|
If the BIOS signals an error when LILO is trying to load a boot image, the
|
|
respective error code is displayed. The following BIOS error codes are known:
|
|
|
|
0x00 Internal error. This code is generated by the sector read routine of
|
|
the LILO boot loader whenever an internal inconsistency is detected. This
|
|
might be caused by corrupt files, try re-building the map file.
|
|
0x01 Illegal command. This shouldn't happen.
|
|
0x02 Address mark not found. This usually indicates a media problem. Try
|
|
again several times.
|
|
0x03 Write-protected disk. This shouldn't happen.
|
|
0x04 Sector not found. This typically indicates a geometry mismatch. If
|
|
you're booting a raw-written disk image, verify whether it was created for
|
|
disks with the same geometry as the one you're using. If you're booting
|
|
from a SCSI disk, you should check, whether LILO has obtained correct
|
|
geometry data from the kernel or whether the contents of your
|
|
/etc/lilo/disktab file corresponds to the real disk geometry. Removing
|
|
COMPACT may help too.
|
|
0x06 Change line active. This should be a transient error. Try booting a
|
|
second time.
|
|
0x08 DMA overrun. This shouldn't happen. Try booting again.
|
|
0x09 DMA attempt across 64k boundary. This shouldn't happen. Try omitting
|
|
the -c option and report this problem to the author.
|
|
0x0C Invalid media. This shouldn't happen and might be caused by a media
|
|
error. Try booting again.
|
|
0x10 CRC error. A media error has been detected. Try booting several times,
|
|
running the map installer a second time (to put the map file at some other
|
|
physical location or to write "good data" over the bad spot), mapping out
|
|
the bad sectors/tracks and, if all else fails, replacing the media.
|
|
0x20 Controller error. This shouldn't happen.
|
|
0x40 Seek failure. This might be a media problem. Try booting again.
|
|
0x80 Disk timeout. The disk or the drive isn't ready. Either the media is
|
|
bad or the disk isn't spinning. If you're booting from a floppy, you might
|
|
not have closed the drive door. Otherwise, trying to boot again might
|
|
help.
|
|
|
|
|
|
Other problems
|
|
--------------
|
|
|
|
This section contains a collection of less common problems that have been
|
|
observed.
|
|
|
|
- For yet unknown reasons, LILO may fail on some systems with AMI BIOS
|
|
if the "Hard Disk Type 47 RAM area" is set to "0:300" instead of
|
|
"DOS 1K".
|