4.2. LILO: The Linux Loader
In addition to booting Linux, LILO can boot other operating systems, such as MS-DOS, Windows 95/98/ME, or any of the BSD systems. During installation, the major Linux distributions provide the opportunity to install LILO; it can also be installed later if necessary. LILO can be installed on the MBR of your hard drive or as a secondary boot loader on the Linux partition. LILO consists of several pieces, including the boot loader itself, a configuration file (
/etc/lilo.conf
), a map file (
/boot/map
) containing the location of the kernel, and the
lilo
command (
/sbin/lilo
), which reads the configuration file and uses the information to create or update the map file and to install the files LILO needs.
One thing to remember about LILO is that it has two aspects: the boot loader and the
lilo
command. The
lilo
command configures and
installs
the boot loader and updates it as necessary. The boot loader is the code that executes at system boot time and boots Linux or another operating system.
4.2.1. The LILO Configuration File
The
lilo
command reads the LILO configuration file,
/etc/lilo.conf
, to get the information it needs to install LILO. Among other things, it builds a map file containing the locations of all disk sectors needed for booting.
Note that any time you change
/etc/lilo.conf
or rebuild or move a kernel image, you need to rerun
lilo
to rebuild the map file and update LILO.
The configuration file starts with a section of global options, described in the
next
section. Global options are those that apply to every system boot, regardless of the operating system you are booting. Here is an example of a global section (a hash sign,
#
, begins a comment):
boot=/dev/hda # The boot device is /dev/hda
map=/boot/map # Save the map file as /boot/map
install=/boot/boot.b # The file to install as the new boot sector
prompt # Always display the boot prompt
timeout=30 # Set a 3-second (30 tenths of a second) timeout
Following the global section, there is one section of options for each Linux kernel and for each non-Linux operating system that you want LILO to be able to boot. Each of these sections is referred to as an
image
section because each boots a different kernel image (shorthand for a binary file containing a kernel) or another operating system. Each Linux image section begins with an
image=
line.
image=/boot/vmlinuz # Linux image file
label=linux # Label that appears at the boot prompt
root=/dev/hda2 # Location of the root filesystem
vga=ask # Always prompt the user for VGA mode
read-only # Mount read-only to run fsck for a filesystem check
The equivalent section for a non-Linux operating system begins with
other=
instead of
image=
. For example:
other=/dev/hda1 # Location of the partition
label=win98
table=/dev/hda # Location of the partition table
Put LILO configuration options that apply to all images into the global section of
/etc/lilo.conf
, and options that apply to a particular image into the section for that image. If an option is specified in both the global section and an image section, the setting in the image section
overrides
the global setting for that image.
Here is an example of a complete
/etc/lilo.conf
file for a system that has the Linux partition on
/dev/hda2
:
## Global section
boot=/dev/hda2
map=/boot/map
delay=30
timeout=50
prompt
vga=ask
## Image section: For regular Linux
image=/boot/vmlinuz
label=linux
root=/dev/hda2
install=/boot/boot.b
map=/boot/map
read-only
## Image section: For testing a new Linux kernel
image=/testvmlinuz
label=testlinux
root=/dev/hda2
install=/boot/boot.b
map=/boot/map
read-only
optional # Omit image if not available when map is built
## Image section: For booting DOS
other=/dev/hda1
label=dos
loader=/boot/chain.b
table=/dev/hda # The current partition table
## Image section: For booting Windows 98
other=/dev/hda1
label=win98
loader=/boot/chain.b
table=/dev/hda
4.2.1.1 Global options
In addition to the options listed here, the kernel options
append
,
read-only
,
read-write
,
root
, and
vga
(described later in Kernel options.) can also be set as global options.
-
backup=
backup-file
-
Copy the original boot sector to
backup-file
instead of to
/boot/boot.nnnn
, where
nnnn
is a number that depends on the disk device type.
-
boot=
boot-device
-
Set the
name
of the device that contains the boot sector.
boot
defaults to the device currently mounted as root, such as
/dev/hda2
. Specifying a device such as
/dev/hda
(without a number) indicates that LILO should be installed in the master boot record; the alternative is to set it up on a particular partition, such as
/dev/hda2
.
-
change-rules
-
Begin a section that redefines partition types at boot time for hiding and unhiding partitions. See the LILO User's Guide, which comes with the LILO distribution, for detailed information on using this option and creating a new rule set.
-
compact
-
Merge read
requests
for adjacent disk sectors to speed up booting. Use of
compact
is particularly recommended when booting from a floppy disk. Use of
compact
may conflict with
linear
.
-
default=
name
-
Use the image
name
as the default boot image. If
default
is omitted, the first image specified in the configuration file is used.
-
delay=
tsecs
-
Specify, in tenths of a second, how long the boot loader should wait before booting the default image. If
serial
is set,
delay
is set to a minimum of 20. The default is not to wait. See Boot-Time Kernel Options.
"
at the end of this chapter for ways to get the boot prompt if no delay is set.
-
disk=
device-name
-
Define parameters for the disk specified by
device-name
if LILO can't figure them out. Normally, LILO can determine the disk parameters itself, and this option isn't needed. When
disk
is specified, it is followed by one or more parameter lines, such as:
disk=/dev/sda
bios=0x80 # First disk is usually 0x80, second is usually 0x81
sectors=...
heads=...
Note that this option is not the same as the disk geometry parameters you can specify with the
hd
boot command-line option. With
disk
, the information is given to LILO; with
hd
, it is passed to the kernel. Note also that if either
heads
or
sectors
is specified, they must both be specified. The parameters that can be specified with
disk
are listed
briefly
here; they are described in detail in the LILO User's Guide.
-
bios=
bios-device-code
-
The number the BIOS uses to refer to the device. See the previous example.
-
cylinders
=
cylinders
-
The number of cylinders on the disk.
-
heads=
heads
-
The number of heads on the disk.
-
inaccessible
-
Tell LILO that the BIOS can't read the disk; used to prevent the system from becoming unbootable if LILO thinks the BIOS can read it. If this parameter is specified, it must be the only parameter.
-
partition=
partition-device
-
Start a new section for a partition. The section contains one variable,
start=
partition-offset
, which specifies the
zero-based
number of the first sector of the partition:
partition=/dev/sda1
start=2048
-
sectors=
sectors
-
The number of sectors per track.
-
disktab=
disktab-file
-
This option has been superseded by the
disk=
option.
-
fix-table
-
If set, allow
lilo
to adjust 3-D addresses (addresses specified as sector/head/cylinder) in partition tables. This is sometimes necessary if a partition isn't track-aligned and another operating system such as MS-DOS is on the same disk. See the
lilo.conf
manpage
for details.
-
force-backup=
backup-file
-
Like
backup
, but overwrite an old backup copy if one exists.
-
ignore-table
-
Tell
lilo
to ignore corrupt partition tables.
-
install=
boot-sector
-
Install the specified file as the new boot sector. If
install
is omitted, the boot sector defaults to
/boot/boot.b
.
-
lba32
-
Generate 32-bit Logical Block Addresses instead of sector/head/cylinder addresses, allowing booting from any partition on hard disks greater than 8.4 GB (i.e., remove the 1024-cylinder limit). Requires BIOS support for the EDD packet call interface
and at least LILO Version 21-4.
-
linear
-
Generate linear sector addresses, which do not depend on disk geometry, instead of 3-D (sector/head/cylinder) addresses. If LILO can't determine your disk's geometry itself, you can try using
linear
; if that doesn't work, then you need to specify the geometry with
disk=
. Note, however, that
linear
sometimes doesn't work with floppy disks, and it may conflict with
compact
.
-
lock
-
Tell LILO to record the boot command line and use it as the default for future boots until it is overridden by a new boot command line.
lock
is useful if there are kernel options that you need to enter on the boot command line every time you boot the system.
-
map=
map-file
-
Specify the location of the map file. Defaults to
/boot/map
. The map file records the location of the kernel(s) used on the system.
-
message=
message-file
-
Specify a file containing a message to be displayed before the boot prompt. The message can include a formfeed character (
Ctrl-L
) to clear the screen. The map file must be rebuilt by rerunning the
lilo
command if the message file is changed or moved. The maximum length of the file is 65,535 bytes.
-
nowarn
-
Disable warning messages.
-
optional
-
Specify that any image that is not available when the map is created should be omitted and not
offered
as an option at the boot prompt. Like the per-image option
optional
, but applies to all images.
-
password=
password
-
Specify a password that the user is prompted to enter when trying to load an image. The password is not encrypted in the configuration file, so if passwords are used, permissions should be set so that only the superuser is able to read the file. This option is like the per-image version, except that all images are password-protected and they all have the same password.
-
prompt
-
Automatically display the boot prompt without waiting for the user to press the Shift, Alt, or Scroll Lock key. Note that setting
prompt
without also setting
timeout
prevents
unattended reboots.
-
restricted
-
Can be used with
password
to
indicate
that a password needs to be entered only if the user specifies parameters on the command line. Like the per-image
restricted
option, but applies to all images.
-
serial=
parameters
-
Allow the boot loader to accept input from a serial line as well as from the keyboard. Sending a break on the serial line corresponds to pressing a Shift key on the console to get the boot loader's attention. All boot images should be password-protected if serial access is
insecure
(e.g., if the line is connected to a modem). Setting
serial
automatically raises the value of
delay
to 20 (i.e., two seconds) if it is less than that. The parameter string
parameters
has the following syntax:
port
[
,bps
[
parity
[
bits
]]]
For example, to initialize COM1 with the default parameters:
serial=0,2400n8
The parameters are:
-
port
-
The port number of the serial port. The default is 0, which corresponds to COM1 (
/dev/ttys0
). The value can be one of 0 through 3, for the four possible COM ports.
-
bps
-
The baud rate of the serial port. Possible values of
bps
are
110
,
300
,
1200
,
2400
,
4800
,
9600
,
19200
, and
38400
. The default is 2400 bps.
-
parity
-
The parity used on the serial line. Parity is specified as
n
or
N
for no parity,
e
or
E
for even parity, and
o
or
O
for odd parity. However, the boot loader ignores input parity and
strips
the 8th bit.
-
bits
-
Specify whether a character contains 7 or 8 bits. Default is 8 with no parity and 7
otherwise
.
-
timeout=
tsecs
-
Set a timeout (specified in tenths of a second) for keyboard input. If no key has been pressed after the specified time, the default image is
booted
automatically.
timeout
is also used to determine when to stop waiting for password input. The default timeout is infinite.
-
verbose=
level
-
Turn on verbose output, where higher values of
level
produce more output. If
-v
is also specified on the
lilo
command line, the level is incremented by 1 for each occurrence of
-v
. The maximum
verbosity
level is 5.
4.2.1.2 Image options
The following options are specified in the image section for a particular boot image. The image can be a Linux kernel or a non-Linux operating system.
-
alias=
name
-
Provide an alternate name for the image that can be used instead of the name specified with the
label
option.
-
image=
pathname
-
Specify the file or device containing the boot image of a bootable Linux kernel. Each per-image section that specifies a bootable Linux kernel starts with an
image
option. See also the
range
option.
-
label=
name
-
Specify the name that is used for the image at the boot prompt. Defaults to the filename of the image file (without the
path
).
-
loader=
chainloader
-
For a non-Linux operating system, specify the chain loader to which LILO should pass control for booting that operating system. The default is
/boot/chain.b
. If the system will be booted from a drive that is
neither
the first hard disk or a floppy, the chainloader must be specified.
-
lock
-
Like
lock
, as described in the previous global options section; it can also be specified in an image section.
-
optional
-
Specify that the image should be omitted if it is not available when the map is created by the
lilo
command. Useful for specifying test
kernels
that are not always present.
-
other=
pathname
-
Specify the path to a file that boots a non-Linux system. Each per-image section that specifies a bootable non-Linux system starts with an
other
option.
-
password=
password
-
Specify that the image is password-protected and provide the password that the user is prompted for when booting. The password is not encrypted in the configuration file, so if passwords are used, only the superuser should be able to read the file.
-
range=
sectors
-
Used with the
image
option, when the image is specified as a device (e.g.,
image=
/dev/fd0
), to indicate the range of sectors to be mapped into the map file.
sectors
can be given as the range
start
-
end
or as
start
+
number
, where
start
and
end
are zero-based sector
numbers
and
number
is the increment beyond
start
to include. If only
start
is specified, only that one sector is mapped. For example:
image=/dev/fd0
range=1+512 # take 512 sectors, starting with sector 1
-
restricted
-
Specify that a password is required for booting the image only if boot parameters are specified on the command line.
-
table=
device
-
Specify, for a non-Linux operating system, the device that contains the partition table. If
table
is omitted, the boot loader does not pass partition information to the operating system being booted. Note that
/sbin/lilo
must be rerun if the partition table is modified. This option cannot be used with
unsafe
.
-
unsafe
-
Can be used in the per-image section for a non-Linux operating system to indicate that the boot sector should not be accessed when the map is created. If
unsafe
is specified, then some checking isn't done, but the option can be useful for running the
lilo
command without having to insert a floppy disk when the boot sector is on a
fixed-format
floppy disk device. This option cannot be used with
table
.
4.2.1.3 Kernel options
The following kernel options can be specified in
/etc/lilo.conf
as well as on the boot command line:
-
append=
string
-
Append the options specified in
string
to the parameter line passed to the kernel. This typically is used to specify certain hardware parameters. For example, while BIOSes on
newer
systems can recognize more than 64 MB of memory, BIOSes on older systems are limited to 64 MB. If you are running Linux on such a system, you can use
append
:
append="mem=128M"
-
initrd=
filename
-
Specify the file to load into
/dev/initrd
when booting with a RAM disk. See also the options
load_ramdisk
(in Boot-Time Kernel Options.," later in this chapter) and
prompt_ramdisk
,
ramdisk_size
, and
ramdisk_start
in this section.
-
literal=
string
-
Like
append
, but replace all other kernel boot options.
-
noinitrd
-
Preserve the contents of
/dev/initrd
so they can be read after the kernel is booted.
-
prompt_ramdisk=
n
-
Specify whether the kernel should prompt you to insert the floppy disk that contains the RAM disk image, for use during Linux installation. Values of
n
are:
Don't prompt. Usually used for an installation in which the kernel and the RAM disk image both fit on one floppy.
1
Prompt. This is the default.
-
ramdisk_size=
n
-
Specify the amount of memory, in kilobytes, to be allocated for the RAM disk. The default is 4096, which
allocates
4 MB.
-
ramdisk_start=
offset
-
Used for a Linux installation in which both the kernel and the RAM disk image are on the same floppy.
offset
indicates the offset on the floppy where the RAM disk image begins; it is specified in kilobytes.
-
read-only
-
Specify that the root filesystem should be mounted read-only for filesystem checking (
fsck
), after which it is typically remounted read/write.
-
read-write
-
Specify that the root filesystem should be mounted read/write.
-
root=
root-device
-
Specify the device that should be mounted as root. If the special name
current
is used as the value, the root device is set to the device on which the root filesystem currently is mounted. Defaults to the root-device setting contained in the kernel image.
-
vga=
mode
-
Specify the VGA text mode that should be selected when booting. The mode defaults to the VGA mode setting in the kernel image. The values are case-insensitive. They are:
-
ask
-
Prompt the user for the text mode. Pressing Enter in response to the prompt displays a list of the available modes.
-
extended
(or
ext
)
-
Select 80x50 text mode.
-
normal
-
Select normal 80x25 text mode.
-
number
-
Use the text mode that corresponds to
number
. A list of available modes for your video card can be obtained by booting with
vga=ask
and pressing Enter.
4.2.2. The lilo Command
You need to run the
lilo
command to install the LILO boot loader and to update it whenever the kernel changes or to reflect changes to
/etc/lilo.conf
. Note that if you replace your kernel image without rerunning
lilo
, your system may be unable to boot your system.
The path to the
lilo
command is usually
/sbin/lilo
. The syntax of the command is:
lilo [
options
]
Some of the options
correspond
to
/etc/lilo.conf
keywords:
|
Configuration keyword
|
Command option
|
|
boot=
bootdev
|
-b
bootdev
|
|
compact
|
-c
|
|
delay=
tsecs
|
-d
tsecs
|
|
default=
label
|
-D
label
|
|
disktab=
file
|
-f
file
|
|
install=
bootsector
|
-i
bootsector
|
|
lba32
|
-L
|
|
linear
|
-l
|
|
map=
mapfile
|
-m
mapfile
|
|
fix-table
|
-P fix
|
|
ignore-table
|
-P ignore
|
|
backup=
file
|
-s
file
|
|
force-backup=
file
|
-S
file
|
|
verbose=
level
|
-v
|
These options should be put in the configuration file whenever possible;
putting
them on the
lilo
command line instead of in
/etc/lilo.conf
is now deprecated. The next section describes those options that can be given only on the
lilo
command line; the others were described earlier.
4.2.3. lilo Command Options
The following list describes
lilo
command options that are available only on the command line. Multiple options are given separately; for example:
$
lilo -q -v
-
-C
config-file
-
Specify an alternative to the default configuration file (
/etc/lilo.conf
).
lilo
uses the configuration file to determine which files to map when it installs LILO.
-
-I
label
-
Print the path to the kernel specified by
label
to standard output, or an error message if no matching label is found. For example:
$
lilo -I linux
/boot/vmlinuz-2.0.34-0.6
-
-q
-
List the currently mapped files.
lilo
maintains a file (
/boot/map
by default) containing the name and location of the kernel(s) to boot. Running
lilo
with this option prints the
names
of the files in the map file to standard output, as in this example (the asterisk indicates that
linux
is the default):
$
lilo -q
linux *
test
-
-r
root-directory
-
Specify that before doing anything else,
lilo
should
chroot
to the indicated directory. Used for repairing a setup from a boot floppy; you can boot from a floppy but have
lilo
use the boot files from the hard drive. For example, if you issue the following commands,
lilo
will get the files it needs from the hard drive:
$
mount /dev/hda2 /mnt
$
lilo -r /mnt
-
-R
command-line
-
Set the default command for the boot loader the next time it executes. The command executes once and then is removed by the boot loader. This option typically is used in reboot scripts, just before calling
shutdown -r
.
-t
Indicate that this is a testdo not really write a new boot sector or map file. Can be used with
-v
to find out what
lilo
would do during a normal run.
-
-u
device-name
-
Uninstall
lilo
by restoring the saved boot sector from
/boot/boot.nnnn
, after validating it against a timestamp.
device-name
is the name of the device on which LILO is installed, such as
/dev/hda2
.
-
-U
device-name
-
Like
-u
, but do not check the timestamp.
-
-V
-
Print the
lilo
version number.
|