LILO.CONF(5)

๐Ÿ“ฆ
version 24.2 ยท 2 versions
, in ubuntu jammy

๐Ÿ’– LILO.CONF(5) ๐Ÿ’–

File Formats Manual ยท LILO.CONF(5) โ€” yes bestie, we're doing the lilo.conf page, strap in ๐ŸŽ€


โœจ NAME โœจ

lilo.conf โ€” the configuration file for lilo ๐Ÿ‘‘


๐ŸŒธ DESCRIPTION ๐ŸŒธ

This file, by default /etc/lilo.conf, gets read by the boot loader installer lilo (go see lilo(8), she's the main character here).

It might look, like, exactly as follows:

# /etc/lilo.conf
#
#  global options:
boot=/dev/hda
prompt
timeout=150
lba32
compact
vga=normal
root=/dev/hda1
read-only
menu-title=" John's Computer "
#
### bootable kernel images ###
image=/boot/vmlinuz-2.6.29-1-i386
     label=try
     initrd=/boot/initrd.img-2.6.29-1-i386
image=/boot/vmlinuz-2.4.33-1-i386
     label=2.4.33
image=/tamu/vmlinuz
     label=tamu
     initrd=/tamu/initrd.img
     root=/dev/hdb2
     vga=ask
#
### other operating systems ###
other=/dev/hda3
     label=PCDOS
     boot-as=0x80    # must be C:
other=/dev/hdb1
     label=WinXP
     boot-as=0x80    # must be C:
other=/dev/hdb5
     label=oldDOS
     loader=chain
     table=/dev/hdb5

So this config file is saying lilo uses the Master Boot Record on /dev/hda. (And if you wanna get into all the different ways to use lilo, plus how it plays with other operating systems, go read html/user_21-5.html inside the old documentation. It's giving โœจarchivalโœจ.)

When booting, the boot loader will throw out its boot: prompt and just wait for you to type in the label of the kernel (plus any options) you wanna boot. At any time you can hit [Tab] and it'll show you a list of kernel/other labels โ€” super handy, no cap. Or, if the menu boot loader is the one installed, you get a whole menu of boot options to pick from, and the title of that menu is overridden by the menu title specification in this configuration file. If you enter literally nothing, then the default kernel image โ€” the first one mentioned, which in the example is /boot/vmlinuz-2.6.29-1-i386 โ€” gets booted after a timeout of 15 seconds (that's 150 deciseconds, bestie, they're counting in tenths here ๐Ÿ’…). There may be at least 16 images mentioned in lilo.conf. (The exact number depends upon compilation options, so like, don't @ me.)

As you can see up there ๐Ÿ‘† a configuration file starts with a bunch of global options (the top 9 lines in the example, count 'em), followed by descriptions of the options for the various images. And here's the tea: an option in an image description will override a global option. Periodt.

Comment lines may appear anywhere, and begin with the # character. Obsessed with that for them.


๐ŸŒˆ GLOBAL OPTIONS ๐ŸŒˆ

There are many possible keywords. The description below is almost literally from html/user_21-5.html inside the old documentation (just slightly abbreviated, they trimmed a lil).

  • backup=<backup-file> โ€” tells you where a copy of any modified boot sector gets saved in a file. backup= can specify that location in one of three ways: a directory where the default backup file boot.NNNN will be created; a file pathname template that the .NNNN suffix gets added to; or the full file pathname, which has to include the correct .NNNN suffix. ๐Ÿซถ All RAID installations should use only the first two alternatives, because multiple backups may get created. The .NNNN suffix is the hexadecimal representation of the major and minor device numbers of the device or partition. If you don't specify this option, the default name of boot sector backups is /boot/boot.NNNN. And if a backup already exists, it will be preserved, not overwritten. (C.f., force-backup= below.) โœจ
  • bios-passes-dl=<option> โ€” the option here is indicated as yes, no, or unknown. If you don't specify it, a value of "unknown" is assumed, unless additional information is available to the boot installer. When "no" is specified, it means the BIOS is known not to pass the current boot device code to the boot loader in the DL register. At this point its only function is experimental, since certain RAID installations may benefit from knowing that the BIOS is 100% reliable. Its use should be considered experimental, fr fr.
This option may be specified on the command line with the -Z switch: yes=1, no=0.
  • bitmap=<bitmap-file> โ€” specifies use of a 640x480x16 (VGA BIOS) or 640x480x256 (VGA/VESA BIOS) bitmap file as the background that a boot menu gets displayed on. ๐Ÿฆ‹ May not be used if message= is specified. Using this option will select a bitmap-capable boot loader, unless it's overridden with install= (see below).

When a bitmap file is specified as a background screen during the boot process, the color selection and layout of the text that overlays the graphic image must be specified in one of two ways.

One way is using header information in the bitmap image (*.bmp) file: from a text file with all the info about bmp-colors, bmp-table and bmp-timer options together with the bitmap option, all stored in the special LILO header of the bitmap image file by the lilo -E command. Another way works without those special header infos: all the information about the bmp-colors, bmp-table and bmp-timer options together with the bitmap option are stored in the configuration file. Any use of the bmp- options within the configuration file overrides the options stored in the bitmap file header. And if lilo can't find any of the bmp- options, then default values are used. Defaults ate, honestly ๐Ÿ’…

  • bmp-colors=<fg>,<bg>,<sh>,<hfg>,<hbg>,<hsh> โ€” specifies the decimal values of the colors to be used for the menu display on a bitmap= background. The list has 6 entries: 3 for normal text followed by 3 for highlighted text. The order of each triple is: foreground color, background color, shadow color. If the background color isn't specified, "transparent" is assumed. If the shadow color isn't specified, then "none" is assumed. The list entries are separated by commas, with no spaces. ๐ŸŽจ
  • bmp-retain โ€” this option applies to all image= and other= sections. (See COMMON OPTIONS, below.) ๐Ÿ‘‘
  • bmp-table=<x>,<y>,<ncol>,<nrow>,<xsep>,<spill> โ€” specifies the location and layout of the menu table. <x>,<y> specify the starting x- and y-position of the upper left corner of the table in character coordinates: x in [1..80], y in [1..30]. <ncol> is the number of columns in the menu (1..5); and <nrow> is the number of rows (entries) in each column. If more than one column is specified, then <xsep> is the number of character columns between the leftmost characters in each column: (18..40), and <spill> is the number of entries in one column which must be filled before entries spill into the next column. <spill> must be .le. <nrow>. If pixel addressing is used instead of character addressing, then any of <x>, <y>, or <xsep> may be specified with a p suffix on the decimal value. ๐Ÿงš
  • bmp-timer=<x>,<y>,<fg>,<bg>,<sh> โ€” optional specification of the timeout= countdown timer. <x>,<y> specifies the character (or pixel) coordinate of the location of the timer, the same as bmp-table= above; and the color triple specifies the character color attributes the same as bmp-colors= above, with the exception that the background color must be specified. If you're using it to override the timer specification in a bitmap file, then the form bmp-timer = none is acceptable โ€” that disables the timer display entirely. โณ
  • boot=<boot-device> โ€” sets the name of the device (like a hard disk or partition) that contains the boot sector, and where the new boot sector should be written to. โš ๏ธ Notice: the boot-device should be the device with the currently mounted root partition.

A raid installation is initiated by specifying a RAID1 device as the boot device; e.g., "boot=/dev/md0".

On newer systems you need a unique ID for the boot device. If the boot sector should write to a partition, you can use its UUID in the same manner as for the root options.

If your boot device is a hard disk you need a special ID, which is supported by udev. You find the right ID in the directory /dev/disk/by-id, i.e.:

boot = /dev/disk/by-id/ata-SAMSUNG_SV1604N_S01FJ10X999999
  • change-rules โ€” defines boot-time changes to partition type numbers (hiding). ๐Ÿ‘€
change-rules
   reset
   type=DOS12
      normal=1
      hidden=0x11
   type=DOS16_small
      normal=4
      hidden=0x14
   type=DOS16_big
      normal=0x06
      hidden=0x16

That excerpt from a configuration file says all default change-rules are removed ("reset"), and the change-rules for three partition types are specified. Without the reset, the three types specified would have been added to the existing default change-rules. Normally the default rules are sufficient, so like, you probably don't need to touch this. The strings which define the partition types are used in a change section (see below), with the suffixes "_normal" or "_hidden" appended. See section "Partition type change rules" of html/user_21-5.html inside the old documentation for more details.

  • compact โ€” tries to merge read requests for adjacent sectors into a single read request. This drastically reduces load time and keeps the map file smaller. Using compact is especially recommended when booting using a map file on a floppy disk. ๐Ÿ”ฅ
  • default=<name> โ€” uses the specified image as the default boot image. If default is omitted, the image appearing first in the configuration file is used. See also, vmdefault below. ๐Ÿ’œ
  • delay=<tsecs> โ€” specifies the number of tenths of a second the boot loader should wait before automatically booting a locked command line, a command line pre-stored by lilo -R, or the default image= or other=. When delay is non-zero, the boot loader will wait for an interrupt for the specified interval. If an interrupt is received, or is already waiting, the boot: prompt will be issued, and no automatic boot will take place. Setting CAPS LOCK or SCROLL LOCK, or holding down any of the keys ALT, CTRL, or SHIFT, all count as interrupts. ๐Ÿ˜ญ (yes bestie, caps lock is a feature now)

โ€ฆand that's just the global options, there's so much more coming ๐Ÿ’…

  • disk=<device-name> โ€” bestie this one lets you define non-standard parameters for a specific disk. Full details live in the section "Disk geometry" of html/user_21-5.html inside the old documentation, iykyk. For LILO versions prior to 22.5, the bios= parameter was lowkey iconic for saying how the BIOS handed out device codes to your disks. Like, for example:
disk=/dev/sda
     bios=0x80
disk=/dev/hda
     bios=0x81
disk=/dev/sdb
     inaccessible

which is literally saying: your SCSI disk is the first BIOS disk (0x80), your (primary master) IDE disk is the second BIOS disk (0x81), and your second SCSI disk (maybe a USB device, who knows) gets no device code at all, so it's inaccessible at boot time. ๐Ÿ’€

NOTE: using the bios= option is largely obsolete starting with LILO version 22.5, because the boot loader now identifies disks by 32-bit Volume-ID and defers BIOS device code determination until boot time. so likeโ€ฆ it's giving legacy.

Other options include specifying disk geometry, e.g.:

disk=/dev/fd0
     sectors=18
     heads=2
     cylinders=80

which is probably only useful for floppy disks and loopback devices, because for hard disks the lba32 disk addressing option just ignores disk geometry. โœจ

Developers who implemented a disk driver for a new block storage device will have to tell LILO the maximum number of partitions on the device. This is in addition to making all of the necessary entries for the device in the /dev directory (with mknod). And that max number of partitions has to be one of 63 (like an IDE disk), 31 (uncommon), 15 (like SCSI disks โ€” most common value), or 7 (like one array controller). An example spec would be:

disk=/dev/userd0
     max-partitions=15

And in cases where there's no kernel partition information available, like on loopback devices, the disk= specification can include partition start info; viz.,

disk=/dev/loop0
     bios=0x80           # use this BIOS code
     max-partitions=7         # declare partitionable
     partition=/dev/loop1
          start=63       # offset from sector 0
     partition=/dev/loop2
          start=102400        # offset from sector 0
  • disktab=<disktab-file> โ€” names the disk parameter table file. If disktab is omitted, the map installer looks for /etc/disktab. But ngl, using disktabs is discouraged. ๐Ÿšซ
  • el-torito-bootable-CD โ€” flags the second stage loader to terminate disk emulation when booting from an El Torito Bootable CD. This option is used by the mkrescue utility when the --iso switch is specified. ๐ŸŽ€
  • fix-table โ€” this lets lilo adjust 3D addresses in partition tables. Every partition entry contains a 3D (cylinder/head/sector) address and a linear address of the first and the last sector of the partition. If a partition isn't track-aligned and if certain other operating systems (e.g. PC/MS-DOS) are using the same disk, they may change the 3D address. lilo can only store its boot sector 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 won't try to reset the address later. It's also possible that this change has other, unexpected side-effects. ๐Ÿ˜ญ The correct fix is to re-partition the drive with a program that aligns partitions to tracks. Also, with some disks (e.g. some large EIDE disks with address translation enabled), under some circumstances, it may even be unavoidable to have conflicting partition table entries. no cap.
  • force-backup=<backup-file> โ€” operation is identical to backup= above, except an existing backup file is unconditionally overwritten if it exists. periodt.
  • geometric โ€” forces disk addressing compatible with older versions of LILO. Geometric addressing uses cylinder/head/sector addresses and is limited to disk cylinders up to 1023. If inaccessible cylinders are referenced, diagnostics get issued at boot-install time rather than boot-time. With a newer BIOS, use of lba32 is recommended. ๐Ÿ‘‘
  • ignore-table โ€” tells lilo to ignore corrupt partition tables. ๐Ÿ™ˆ
  • install=<user-interface> โ€” picks the user interface you'll see at boot time. You can specify one of three options: text, menu, or bmp. The traditional LILO interface is text; but menu is now the default, unless the configuration file contains the bitmap= specification. The text interface is strictly a command-line interface, as though the console were a dumb terminal. The menu interface is a text-based screen of the boot choices, with the option to enter additional command line parameters. And the bmp interface is a menu presented against a graphic screen, specified as a 640x480 BitMaP file of 16 or 256 colors. (See the lilo -E switch for editing options.)

(Prior to LILO version 22.3, install= specified the user interface as a file in the /boot directory.) โญ

  • large-memory โ€” normally any initial ramdisk (initrd) loaded with a kernel is loaded as high in memory as possible, but never above 15 MB. This is due to a BIOS limitation on older systems. On newer systems, this option enables using memory above 15 MB (up to a kernel-imposed limit, around 768 MB) for passing the initrd to the kernel. The presence of this option merely indicates that your system does not have that old BIOS limitation.

This switch (or its absence) is not passed to the kernel, and does not in any way affect the amount of physical memory it will use. (See the kernel documentation for the kernel command line parameter mem= for limiting the memory used by the kernel.) ๐Ÿ’œ

  • lba32 โ€” generate 32-bit Logical Block Addresses instead of cylinder/head/sector addresses. If the BIOS supports packet addressing, then packet calls will be used to access the disk. This allows booting from any partition on disks with more than 1024 cylinders. If the BIOS doesn't support packet addressing, then lba32 addresses get translated to cylinder/head/sector (geometric), just as for linear. All floppy disk references are retained in C:H:S form. Use of lba32 is recommended on all post-1998 systems. Beginning with LILO version 22, lba32 is the default disk addressing scheme. slay. ๐Ÿ”ฅ
  • linear โ€” generate 24-bit linear sector addresses instead of cylinder/head/sector (geometric) addresses. Linear addresses are translated at run time to geometric addresses, and are limited to cylinders <= 1023. When using linear with large disks, /sbin/lilo may generate references to inaccessible disk cylinders. lba32 avoids many of these pitfalls with its use of packet addressing, but requires a recent BIOS (post-1998).
The linear option is considered obsolete, and its use is strongly discouraged. ๐Ÿซถ please don't.
  • lock โ€” enables automatic recording of boot command lines as the defaults for the following boots. This way, lilo "locks" on a choice until it's manually overridden. ๐Ÿ’…
  • mandatory โ€” the per-image password option mandatory (see below) applies to all images. ๐Ÿ’–
  • map=<map-file> โ€” specifies the location of the map file. If map is omitted, the file /boot/map is used.

On machines with a pre-1998 BIOS, the EDD bios extensions required to support lba32 disk sector addressing may not be present. In that case, the boot loader will fall back automatically to geometric addressing; this fall-back situation, or the specific use of geometric or linear addressing, will require the map file to be located within the first 1024 cylinders of the disk drive. This BIOS limitation is not present on post-1998 systems, most of which support the newer EDD disk BIOS calls. ๐ŸŒˆ

  • menu-title=<title-string> โ€” specifies the title line (up to 37 characters) for the boot menu. This title replaces the default "LILO Boot Menu" title string. If menu isn't installed as the boot loader (see the install= option), then this line has no effect. ๐ŸŽ€
  • menu-scheme=<color-scheme> โ€” the default color scheme of the boot menu can be overridden on VGA displays with this option. (The color scheme of MDA displays is fixed, sorry bestie.) The general color-scheme string is of the form:
<text>:<highlight>:<border>:<title>

where each entry is two characters specifying a foreground color and a background color. Only the first entry is required. The default highlight is the reverse of the text color; and the default border and title colors are the text color. Colors are specified using the characters kbgcrmyw, for blacK, Blue, Green, Cyan, Red, Magenta, Yellow, and White: upper case for intense (fg only), lower case for dim. Valid color-scheme strings would be

menu-scheme=Wm     intense white on magenta
menu-scheme=wr:bw:wr:Yr    the LILO default
menu-scheme=Yk:kw    bright yellow on black

If menu isn't installed as the boot loader, then this line has no effect. โœจ

  • message=<message-file> โ€” specifies a file containing a message displayed before the boot prompt. No message is displayed while waiting for a shifting key after printing "LILO ". In the message, the FF character ([Ctrl L]) clears the local screen. This is undesirable when the menu boot loader is installed. ๐Ÿ™ˆ 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. message= and bitmap= are mutually exclusive. ๐Ÿ’€
  • nodevcache โ€” (22.8) bestie this one turns OFF the pre-loading of the internal device cache โœ‹. You might actually need it if your Linux distro uses weird non-standard device naming conventions, like when the first IDE disk isn't /dev/hda. it's giving "my disks have main character names" energy.
  • nokbdefault=<name> โ€” (22.7.2) so if there's literally no IBM-PC keyboard present, the descriptor you name here becomes the default boot image ๐ŸŽน. And heads up: if no serial interface (serial=) is in use, then any prompt keyword and timeout value get straight-up bypassed, and default booting happens the way delay= says. ngl the keyboard detection codes can't even tell if a newer USB keyboard is there or not ๐Ÿ’€.
  • noraid โ€” stops the automatic marking of disk volumes that are part of RAID arrays as inaccessible ๐Ÿšซ. This lets you, the user, edit the disk= / inaccessible declarations into the config file yourself. And if you don't add those declarations? Duplicate Volume IDs get overwritten, which leads to confusing situations at boot-time and possibly a failed boot ๐Ÿ˜ญ. fr fr, using this keyword is generally not necessary.
  • nowarn โ€” disables the warnings about possible future dangers ๐Ÿ”ฎ. living dangerously, iconic of you.
  • optional โ€” the per-image option optional (scroll down, it's there) applies to all images.
  • password=<password> โ€” the per-image option password=... (also below) applies to all images. โš ๏ธ this can stop unattended booting if the default image is protected by password= at the default level mandatory, which is a level higher than restricted. the way that's a whole vibe shift at 3am when nothing boots ๐Ÿ˜ญ
  • prompt โ€” automatic booting (that's the delay thing up above) will NOT happen unless a locked or pre-stored (lilo -R) command line is present. Instead the boot loader throws up the boot: prompt and waits for you to type something before it proceeds (see timeout below) ๐Ÿซถ. Also: unattended default image reboots are literally impossible if prompt is set and timeout isn't, or if the default image is password protected at a higher level than restricted. no cap.
  • raid-extra-boot=<option> โ€” this one only means anything for RAID1 installations ๐Ÿงš. <option> can be none, auto, mbr, mbr-only, or a comma-separated list of devices, e.g. "/dev/hda,/dev/hdc6". Starting with LILO version 22.0, the boot record is normally written to the first sector of the RAID1 partition. On PARALLEL raid sets, no other boot records are needed. The default action is auto, meaning it automatically generates auxiliary boot records as needed on SKEWED raid sets. none means suppress generation of all auxiliary boot records. mbr-only suppresses generation of a boot record on the raid device, and forces compatibility with versions of LILO earlier than version 22.0 by writing boot records to all Master Boot Records (MBRs) of all disks which have partitions in the raid set. mbr is like mbr-only except the boot record on the RAID partition is not suppressed. Use of an explicit list of devices forces writing of auxiliary boot records only on those devices enumerated, in addition to the boot record on the RAID1 device. Since the version 22 RAID1 codes will never automatically write a boot record on the MBR of device 0x80, if such a boot record is desired, this is one way to have it written. Use of mbr is the other way to force writing to the MBR of device 0x80. ๐Ÿ‘‘
  • restricted โ€” the per-image password option restricted (yep, see below) applies to all images.
  • serial=<parameters> โ€” enables control from a serial line ๐Ÿ“ก. The specified serial port gets initialized and the boot loader accepts input from it and from the PC's keyboard. Sending a break on the serial line is basically pressing a shift key on the console to get the boot loader'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. bestie. please.

The parameter string has this syntax:

<port>[,<bps>[<parity>[<bits>]]]
  • <port>: the number of the serial port, zero-based. Zero (0) corresponds to COM1 alias /dev/ttyS0, etc. All four ports can be used (if present).
  • <bps>: the baud rate of the serial port. Supported rates: 110, 150, 300, 600, 1200, 2400 (default), 4800, 9600, plus the extended rates 19200, 38400, and 57600 (56000). The rate 115200 is allowed, but may not work with all COMx port hardware ๐Ÿ˜ฌ.
  • <parity>: the parity used on the serial line. The boot loader ignores input parity and strips the 8th bit. Upper or lower case characters 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.

  • single-key โ€” this option says boot images or 'other's are selected and launched with a single keystroke โŒจ๏ธ. Selection is based on the first character of each name, which must be unique. โš ๏ธ Do NOT use this with the menu or bitmap user interface (install=). it's giving "pick one aesthetic, not both".
  • static-BIOS-codes โ€” makes the boot installer and boot loader bypass the use of Volume-ID information and revert to the mode of operation of versions of LILO from 22.4 backward ๐Ÿ•ฐ๏ธ. With Volume-ID booting (22.5 and later), the BIOS codes of disks are determined at boot time, not install time; so they may get switched around, either by adding or removing disk(s) from the hardware configuration, or by using a BIOS menu to select the boot device.

With this option in play, the BIOS codes of disks MUST be correctly specified at install time โ€” either guessed correctly by LILO (which often fails on mixed IDE/SCSI systems), or explicitly specified with 'disk=/dev/XXX bios=0xYY' statements. The use of this option precludes any activity which may switch around the BIOS codes assigned to particular disk devices, as noted above.

In general, this option should never be used, except as a bug workaround. ๐Ÿ’€ periodt.
  • suppress-boot-time-BIOS-data โ€” this global option suppresses the boot-time real mode collection of BIOS data on systems which hang on certain BIOS calls ๐ŸงŠ. It's equivalent to using the boot-time switch 'nobd'.

โš ๏ธ This option defeats the disk volume recognition and BIOS device code detection features of LILO on systems with more than one disk. So using it produces a strong cautionary message, which cannot be suppressed. not even with nowarn. it said what it said.

  • timeout=<tsecs> โ€” sets a timeout (in tenths of a second) for keyboard input at the boot: prompt โณ. "timeout" only has meaning if "prompt" is mentioned. If no key is pressed for the specified time, the default image is automatically booted. The default timeout is infinite.
  • unattended โ€” (22.6) alters how the "timeout" parameter works, in a way that's genuinely useful on noisy serial lines ๐ŸŒ€. Each typed (or noise) character restarts the "timeout" timer, and a timeout will always boot the default descriptor, even if noise characters have appeared on the input line. obsessed, honestly.
  • verbose=<number> โ€” turns on lots of progress reporting ๐Ÿ“ข. Higher numbers give more verbose output. If -v is additionally specified on the lilo command line, the level is increased accordingly. The maximum verbosity level is 5.
  • vmdefault=<name> โ€” the named boot image is used as the default boot if booting in "virtual" mode with a virtual monitor, such as VMware(tm) ๐Ÿ–ฅ๏ธ. So a real mode boot and a virtual mode boot can be made to have different default boot images. lowkey genius.

Additionally, the kernel configuration parameters append, ramdisk, read-only, read-write, root and vga can be set in the global options section ๐Ÿ’–. They're used as defaults if they aren't specified in the configuration sections of the respective kernel images.


๐ŸŒธ PER-IMAGE SECTION ๐ŸŒธ

A per-image section starts with either a line

image=<pathname>

to indicate a file or device containing the boot image of a Linux kernel ๐Ÿง, or a line

other=<device>

to indicate an arbitrary system to boot ๐ŸŒ€.

In the former case, if an image line specifies booting from a device, then you have to indicate the range of sectors to be mapped using

range=<start>-<end>
range=<start>+<nsec>
range=<sector>

In the third case, 'nsec=1' is assumed. โœจ

โœจ KERNEL OPTIONS (image=) โœจ

Okay bestie, so if the image you're booting is a Linux kernel ๐Ÿง, you can hand it command line parameters. Yes literally passing notes to your kernel. Iconic.


addappend=<string> ๐ŸŽ€

This string's kernel parameters get concatenated onto whatever parameter(s) came from an append= option (scroll down, she's right there). The addappend string must be wrapped in double quotes, no exceptions.

The usual vibe: your global append= sets parameters that every single kernel shares (it lives in the global section of the config), and then addappend= adds local parameter(s) to one individual image. Think of it as the group chat message plus your personal little add-on. ๐Ÿ’…

Heads up: addappend can only be used once per "image=" section. One and done.

And if your string is a super long line? You can split it across more lines using \ as the last character of a line, like this:

addappend="noapic acpi=off pci=usepirqmask \
        pnpbios=off pnpacpi=off noisapnp"

append=<string> โœจ

Appends the options you list to the parameter line that gets passed to the kernel. This is the classic move for hardware parameters that can't be fully auto-detected, or for stuff where probing is lowkey dangerous ๐Ÿ™ˆ.

Multiple kernel parameters are separated by a blank space, and the string must be in double quotes. A local append= sitting inside an image= section overrides any global append= from the global section of the config file. And like its bestie above, append can only be used once per "image=" section. If you wanna concatenate parameter strings, use "addappend=" instead. ๐Ÿ’–

Example:

append="mem=96M hd=576,64,32 console=ttyS1,9600"

Long line? Same deal โ€” split it with \ as the last character. See the addappend example above. ๐Ÿฆ‹


initrd=<name> ๐ŸŒธ

Specifies the initial ramdisk image to load alongside the kernel. That image holds the modules you need at boot time โ€” network and scsi drivers and such. Go read the man pages for mkinitrd(8) if you want the full tea. โ˜•


literal=<string> ๐Ÿ’€

Like append, but it removes all other options (yes, including the setting of the root device). literal overrides every append and addappend option. And because vital options can get yeeted unintentionally with literal, this option cannot be set in the global options section. Nope. Not allowed. ๐Ÿšซ


ramdisk=<size> ๐Ÿ“

This one sets the size of the optional RAM disk (e.g. "4096k"). A value of zero means no RAM disk gets created at all. And if you just... omit this variable entirely? Then the RAM disk size that's configured into the boot image gets used. Default behavior, we love her. ๐Ÿ’œ


read-only ๐ŸงŠ

Says the root file system should be mounted read-only. It can be specified as a global option. Typically the system startup procedure re-mounts the root file system read-write later on (like, after fsck'ing it). So it's read-only... for now. ๐Ÿ˜Œ


read-write ๐Ÿ”ฅ

Says the root file system should be mounted read-write. It can be specified as a global option. That's it, that's the whole thing. โœจ


root=<root-device> ๐Ÿ‘‘

This specifies the device that should be mounted as root. It can be specified as a global option.

If you use the special name current, the root device gets set to the device on which the root file system is currently mounted. And if the root has been changed with -r, then the respective device is used. If the variable root is omitted entirely, the root device setting contained in the running kernel image is used.

โš ๏ธ Warning: This can induce to an unbootable system! Not a vibe. Be careful, bestie. ๐Ÿ˜ญ

You can also specify the root filesystem with a LABEL= or UUID= directive, just like in /etc/fstab. In that case, the argument to root= must be enclosed in quotation marks, so you don't get a syntax error on the second equal sign. Like so:

root="LABEL=MyDisk"
root="UUID=5472fd8e-9089-4256-bcaa-ceab4f01a439"

Note: the command line root= parameter that gets passed to the kernel will be: 'root=LABEL=MyDisk' โ€” i.e., without the quotation marks. And if the root= parameter is passed from the boot time boot: prompt, no quotes are used at all. The quotes are only there to satisfy the requirements of the boot-installer parser, which treats an equal sign as an operator. The kernel command line parser is very much simpler, and must not see any quotation marks. Simply stated: only use the quotation marks within /etc/lilo.conf. Periodt. ๐Ÿ’…


vga=<mode> ๐ŸŒˆ

This specifies the VGA text mode that should be selected when booting. It can be specified as a global option. The following values are recognized (case is ignored, she's chill like that):

  • normal โ€” select normal 80x25 text mode.
  • extended (or ext) โ€” select 80x50 text mode.
  • ask โ€” stop and ask for user input (at boot time).
  • <number> โ€” use the corresponding text mode (you can specify the number in decimal, or in hex with the usual '0x' convention). Wanna see a list of available modes? Boot with vga=ask and press [Enter]. ๐Ÿซถ

And if this variable is omitted, the VGA mode setting contained in the kernel image is used. (Which is set at compile time using the SVGA_MODE variable in the kernel Makefile, and can later be changed with the rdev(8) program.) ๐Ÿ‘‘


๐Ÿ’– ALTERNATE SYSTEM (other=) ๐Ÿ’–

Bestie, other= is your girl for booting stuff that is not Linux. The other = <device> line points at the boot sector of some alternate system sitting on a device or disk partition โ€” like DOS on, say, /dev/hda2, or a floppy on /dev/fd0. ๐Ÿฆ‹

When you're booting another system, these are the options you can use:

  • loader=<chain-loader> โ€” This tells LILO which chain loader to use. You can also set it globally. If you don't, chain is the default. This chain loader passes partition and drive info inside the boot sector it loads only to DOS on FAT12 or FAT16, and Windows on FAT16 or FAT32. (see also table=<letter> below). โœจ
  • table=<device> โ€” This one says which device holds the partition table. If you skip this variable, the boot loader will just pass default partition info to the OS it boots. (Some OSes have their own ways of figuring out which partition they came from. E.g., MS-DOS usually stores the geometry of the boot disk or partition in its boot sector.) Heads up: /sbin/lilo must be re-run if a partition table mapped referenced with table gets modified. ๐Ÿ’…
  • change โ€” This keyword opens a section that describes how primary partition IDs get changed, and how primary partitions are activated and deactivated. If you don't include change, change rules are generated as though you'd written the automatic keyword. And if you write change all by itself, with no rules after it, it will suppress automatic change-rules. For example:
                 other=/dev/hda2
                    label=dos
                    table=/dev/hda
                    change
                      automatic
                      partition=/dev/hda1
                         set=DOS12_hidden
                         deactivate
                      partition=/dev/hda2
                         set=DOS16_big_normal
                         activate

So this says: when primary partition /dev/hda2 is booted, automatic change-rules will be in effect; plus, partition 1, a DOS12 partition, will be set hidden, and deactivated. Also, partition 2 will be set normal, and activated. Activation sets the boot-flag in the partition table. The automatic keyword may conflict with default change rules, so those set= lines above might be redundant. ๐Ÿ˜ญ

  • boot-as=<bios> โ€” This option (LILO version 22.5.1) tells you which BIOS device code must be assigned to the specified drive so that the "other=" operating system can boot. If the chain loader notices that another BIOS device code is assigned to this disk, it will dynamically swap the assigned device code with the specified device code. โœจ

This option is easier to specify than "map-drive=" and more general than "master-boot" because any device code can be specified. Unlike "map-drive=", the decision about whether to swap device codes happens at boot time, not install time. That's a win on systems where the BIOS shows a boot menu of devices and maps disks to devices in different ways depending on the BIOS boot selection. ๐ŸŽ€

You can set this as a global option, and then it applies to all "other=" sections unless you override it with a specific "master-boot" option. If you're going to set either "boot-as=" or "master-boot" globally, it's better to set "master-boot" as the global option because it won't interfere with floppy disk BIOS device codes; then use "boot-as=" as a local option to override "master-boot" whenever you need to. ๐Ÿ‘‘

  • master-boot โ€” This flag (LILO version 22.5) is for a DOS/Windows or other system that will only boot from BIOS device 0x80 (the "C:" drive) or BIOS device 0 (the A: drive). When you use this flag, if the drive isn't assigned device code 0x80 or 0 by the BIOS, then the chain loader will dynamically swap the device code actually assigned with device code 0x80 or 0 to make this drive look like the first hard or floppy drive, "C:" or "A:". ๐Ÿ’…

This flag is easier to use than "map-drive=" (see below), and it's preferred if all you need is simple forcing of device code 0x80. It's also more general, because the need to swap BIOS device codes is figured out dynamically at boot-time, not at boot install-time like with "map-drive=". It's slightly more powerful than "boot-as=" because the device code that gets assigned, 0 or 0x80, is determined dynamically. ๐Ÿ”ฅ

You can set this as a global option, and then it applies to all "other=" sections unless you override it with a specific "boot-as=" option.

  • map-drive=<num> โ€” This maps BIOS calls for the specified drive to the device code specified on the next line as to=<num>. It's useful for booting operating systems like DOS from the second hard drive. The following swaps the C: and D: drives:
                 map-drive=0x80
                    to=0x81
                 map-drive=0x81
                    to=0x80

This option is largely rendered obsolete by "boot-as=", which came in with LILO version 22.5. ๐Ÿ’€

  • unsafe โ€” This says: do not access the boot sector at map creation time. It disables some sanity checks, including a partition table check. If the boot sector is on a fixed-format floppy disk device, using UNSAFE avoids needing to put a readable disk into the drive when you run the map installer. If the boot sector is on a hard drive, the BIOS device code of the drive will have to be specified explicitly with "disk=/dev/XXXX bios=0x8X inaccessible" in the configuration file. unsafe and table (explicit or implicit) are mutually incompatible. ๐Ÿšจ

๐Ÿ’– COMMON DESCRIPTOR OPTIONS (image= & other=) ๐Ÿ’–

In both the image= and other= cases, these options apply. Periodt.

  • bypass โ€” No password is required to boot this image. This is how you say the global password does not apply to this image= or other=. See password= below. ๐Ÿซถ
  • label=<name> โ€” The boot loader uses the main file name (without its path) of each image specification to identify that image. You can use a different name by setting the variable label. โœจ
  • alias=<name> โ€” Want a second name for the same entry? Just specify an alias. ๐ŸŽ€
  • bmp-retain โ€” The bitmap graphic (install=bmp) is retained when control is passed to the loaded kernel image, or other= bootloader; i.e., the screen is not blanked to alphanumeric mode before starting the kernel. This feature is considered EXPERIMENTAL, for those users working with startup splash screens. ๐ŸŒˆ
  • fallback=<command-line> โ€” This specifies a string that is stored as the default command line if the current image is booted. Super useful when you're experimenting with kernels that might crash before you can interact with the system. If you use the fallback option, the next reboot (e.g. triggered by a manual reset or by a watchdog timer) will load a different (supposedly stable) kernel. The command line stored by the fallback mechanism is cleared by removing or changing the default command line with the -R option, which should be a part of the boot startup scripts. ๐Ÿฆ‹
  • lock โ€” (See above.) ๐Ÿ’…
  • optional โ€” Omit the image if it's not available at map creation time. It may be specified as a global option. This is useful for specifying test kernels that are not always present. ๐Ÿ‘‘
  • password=<password> โ€” Protect the image= or other= with a password (or passphrase). It may be specified as a global option. The interpretation of the password= setting is modified by the words mandatory, restricted, and bypass (see below). You can put the password in the config-file (less secure) or enter it when the boot loader is installed. To request interactive entry of the password, it should be specified: password="". Passwords entered interactively are not required to be entered again if the boot installer is re-run. They are cached, in hashed form, in a companion file to the config-file, default name: /etc/lilo.conf.crc. If the config-file is updated, a warning message will be issued telling you to re-run lilo -p to force re-creation of the password cache file. ๐Ÿ”
  • mandatory โ€” A password is required to boot this image. This is the default. May be used on a single image= or other= to override a different global setting. ๐Ÿ’–
  • nokbdisable โ€” (22.7.2) The specified descriptor is not bootable if the IBM-PC keyboard is not present. This option is really only useful if the "serial=" boot terminal is in use. With no keyboard (and no serial terminal) attached, selecting a boot descriptor other than the default is impossible. See nokbdefault above. โŒจ๏ธ
  • restricted โ€” A password is only required to boot the image if kernel parameters are specified on the command line (e.g. 'single'). May be used on a single image= or other= to override a different global setting. ๐Ÿ”’
  • vmwarn โ€” If booting under a virtual monitor such as VMware(tm), the image with this label will cause a cautionary warning to be issued at boot time, and user intervention will be required to continue or to abort the boot process. โš ๏ธ
  • vmdisable โ€” If booting under a virtual monitor, the image with this label will not be displayed as a boot option. The image is only bootable in real mode. See vmdefault above. ๐Ÿ™ˆ

๐ŸŒˆ SEE ALSO ๐ŸŒˆ

lilo(8), mkinitrd(8), mknod(1), mkrescue(8), rdev(8).


Okay bestie, that's the whole LILO.CONF(5) page, dated June 2013, and it ate. Periodt. ๐Ÿ’–โœจ

๐Ÿ“ฆ where this page comes from
  • ubuntu jammy: lilo 1:24.2-5.1 ยท BSD-3-Clause
  • ๐Ÿ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms