Updated: 2012-11-21 05:08 EST
lilo
/boot
, which may be a separately mounted partition at the start of the disk/boot
is located near the beginning of the disk because older BIOSes can’t address disk blocks at the middle or end of larger disks!menu.lst
, grub.conf
, or grub.cfg
under /boot/grub/
/etc/grub.d/
and you should edit the pieces, not the main file/etc/grub.conf
to the real location under /boot/grub/
/etc/grub.conf
has a completely different function - to configure GRUB installation!All versions of GRUB use a configuration file under /boot/grub
to display a menu of alternative operating systems to boot. Without a configuration file, GRUB starts in interactive mode and you have to specify and type everything yourself. With a configuration file, you can select from a menu list of choices.
In GRUB Legacy, each choice in the configuration file starts with a “title” keyword followed by a descriptive name:
# Sample GRUB menu.lst or grub.conf file (GRUB Legacy version 0.9x)
timeout=30
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
default=0
# this sdb disk has partition sdb1 for /boot and sdb2 for / (ROOT)
# (Note how pathnames do *not* start with /boot on a separate partition!)
title Fedora 2.6.31 on second disk
root (hd1,0)
kernel /vmlinuz-2.6.31.5-127.fc12.i686.PAE ro root=/dev/sdb2
initrd /initramfs-2.6.31.5-127.fc12.i686.PAE.img
# this sdc disk has partition sdc1 for / (ROOT) and uses a /boot directory
# (not a separate /boot partition, so pathnames must start with /boot)
title Old Fedora 2.6.23 on third disk
password sesame
root (hd2,0)
kernel /boot/vmlinuz-2.6.23.15.137.fc8 ro root=/dev/sdc1
initrd /boot/initrd-2.6.23.15.137.fc8.img
# this first disk partition has a Windows boot loader in the first sector
title Windows on first disk
rootnoverify (hd0,0)
makeactive
chainloader +1
Notes:
timeout
: how long the menu waits before selecting the defaultdefault
: which “title” section to boot when the time-out happens
splashimage
: a pretty picture (optional) to hide boot messageshiddenmenu
: hide the GRUB menu (and show the picture instead)root
: lets you set this prefix for all following GRUB pathnames, similar to “cd” in the shell
(hd0,0)
/foo
becomes complete path (hd1,0)/foo
kernel
: the Linux kernel image followed by optional kernel optionsinitrd
: the initial RAM disk to be used by the kernel at boot timepassword
: require the given password to boot this menu entrydefault
n [opt.]: The nth “title” boot menu item, starting at 0, will be booted. Otherwise, the first (zeroth) “title” item is booted.timeout
20 [opt.]: Number of seconds before booting into default.password
sesame [opt.]: Disable interactive editing and protect all boot menus that include the lock
optiontitle
: Menu title of this boot menukernel
: Location of Linux kernel file, followed by optionslock
[opt.]: Requires global password to boot this menu entrypassword
[opt.]: require the given password to boot this menu entryNote: To find out about additional GRUB commands, type help
at the GRUB shell prompt, and see the above Resources.
GRUB configuration files are stored under directory /boot/grub
in Linux. /boot/grub
is the Linux pathname, not necessarily the GRUB pathname, because GRUB pathnames are composed of a partition name followed by a pathname inside the partition, e.g. (hd0,0)/some/path/name
where /some/path/name
is relative to the start of the partition.
Since partitions are mounted on directories in Linux, and those directory pathnames prefix the names inside the partition for Linux pathnames, a GRUB pathname and a Linux absolute pathname will always differ, except for the one partition that is mounted on ROOT (because prefixing an absolute pathname with / [ROOT] doesn’t change it).
If /boot
is not its own partition, then it is a directory inside the ROOT partition. GRUB shell command pathnames referring to the kernel and to GRUB configuration files will also be inside the ROOT partition and will therefore all start with the ROOT partition name followed by the subdirectory name /boot
inside the partition, e.g. (hd0,0)/boot/grub/grub.conf
refers to the Linux pathname /boot/grub/grub.conf
(because /boot
is a directory inside the ROOT partition (hd0,0)
).
If /boot
is its own mounted partition, then the GRUB files will be on this separate BOOT partition (not on the ROOT partition) that gets mounted on /boot
and the GRUB pathnames (which are relative to the start of partitions, not relative to the ROOT of the file system) will therefore not start with /boot
, they will start directly under the BOOT partition device name e.g. (hd0,0)/grub/grub.conf
refers to the Linux pathname /boot/grub/grub.conf
(because (hd0,0)
is mounted on /boot
and so /boot
is prefixed to the part of the pathname contained inside the partition).
(hd0,0)/grub/grub.conf
(hd0,0)/boot/grub/grub.conf
Fedora 12 uses a separate BOOT partition. Do not use “/boot” at the start of GRUB pathnames because the pathnames are inside their own BOOT partition (that will be mounted on /boot) and GRUB addresses pathnames by partition name.
Your Linux installation already installed GRUB for you. If you have to re-install GRUB, you may find (or be able to install) the “grub-install” script that will do it for you. You can also try it manually, if the GRUB setup files are already stored under /boot/grub:
grub
at the command line: this will load GRUB and display the GRUB shell prompt “grub>”setup
with two GRUB pathname arguments: the boot sector installation device and the device containing the GRUB setup files
setup (hd0) (hd0,0)
quit
command when doneMost versions of the GRUB shell have TAB command completion, where you can type part of a device or pathname and GRUB will give you all the possible completions. The command-line GRUB in Fedora 12 is broken, and does not have this feature. The GRUB that runs at boot time is not broken and does have the TAB completion feature.
BE CAREFUL. GRUB does not ask you for confirmation! If you type the wrong thing, you will overwrite your boot sector with garbage and be unable to boot your system. You will need to boot a “live” CD and repair.
Kernel options influence how the system boots and what software might be enabled. The options are given after the kernel image name on a “kernel” line, allow you to boot your system with different features enabled. Some versions of GRUB allow you to type a
while viewing the GRUB menu, to go directly to a GRUB “kernel” line and edit the kernel options. Options are separated by blanks, e.g.: ro single txt 3
When you edit these GRUB lines, you are only changing the in-memory copy of the configuration, you are not changing the actual configuration on disk. To make any edit permanent, you must boot the system (single-user is fine) and actually edit the configuration file and save it.
Single-user mode is a “half-up” state used for system repair and maintenance (especially for resetting the ROOT password!). The system only brings up a minimal number of services. The GUI is not started. Networking may not be enabled. Not all disks may be mounted. The console terminal gets a shell running as the ROOT user.
To boot into single-user mode, add the word “single” as an option to a “kernel” line in GRUB and then boot that entry, e.g.:
kernel (hd0,0)/vmlinuz ro root=/dev/sda3 single
(Run Levels are summarized below.) To start Linux with a different run level than the default, add the run level digit to the kernel options, e.g. to boot Run Level 3 (multi-user without the X11 GUI window system):
kernel (hd0,0)/vmlinuz ro root=/dev/sda3 3
To be prompted at boot time before each system service starts up:
kernel (hd0,0)/vmlinuz ro root=/dev/sda3 confirm
If you moved your ROOT file system to a different partition but forgot to change the GRUB configuration file, your kernel will “panic” and tell you it can’t find the root. You can reboot into the GRUB shell and edit the root=
option on the “kernel” line to point to the correct ROOT partition:
kernel (hd0,0)/vmlinuz ro root=/dev/sdb2
Run Levels system was a crude way to specify groups of services that were to be started and stopped together. Some Enterprise systems (long maintenance window) still use Run Levels, and newer versions of the system (using upstart or systemd) emulate Run Levels.
Run Levels expect that a system boots into a fixed state, with a fixed set of disks and fixed set of services. They do not work well with systems where devices come and go after booting, e.g. USB drives, printers, cameras, hotplug disks, etc.
initdefault
option of the /etc/inittab
file.runlevel
command:
telinit
command:
telinit 1
# Switch to single-user mode (but use “shutdown now” instead)telinit 3
# Switch to multi-user console mode (no GUI)telinit 5
# Switch to full multi-user mode with X11 GUItelinit 6
# Reboot (but use “shutdown -r now” instead)You can see which services are started and stopped in each Run Level using the chkconfig
command. If that command is not available, look at the file symlinks under the Run Level directories /etc/rc?.d
. Each symlink starts with either an “S” (start this service) or a “K” (kill this service) followed by a two-digit sequence number followed by the name of the service, e.g.
/etc/rc3.d/K15httpd
# kill the HTTP daemon/etc/rc3.d/S55sshd
# start the SSH daemonEach of those symlinks points to a script file responsible for killing or starting the indicated service. You can change what services get killed or started using the chkconfig
command that adds or removes symlinks from the Run Level directories (or you can add/remove symlinks manually).
Run Levels expect that a system boots into a fixed state, with a fixed set of disks and fixed set of services. They do not work well with systems where devices come and go after booting, e.g. USB drives, printers, cameras, hotplug disks, etc.
Modern Unix/Linux systems moved away from static Run Levels to use the more dynamic and complex upstart
system of starting/stopping services. Run Levels were “emulated” by upstart
, but upstart
could handle devices coming and going dynamically much better. When devices were added/removed, “events” were generated that could start and stop related system services.
The complexity and limitations of upstart
prompted Lennart Poettering to write a new Linux-only systemd
session manager. Fedora 15 then moved from upstart
to use the new systemd
. Debian is reluctant to use a Linux-only start-up system, and so Debian and Ubuntu still use upstart
. There is still controversy as to which is the better system. See the Wikipedia references for details and read up on systemd.