http://oldfield.wattle.id.au/luv/boot.html
Back to LUV presentations
The Linux Boot Process
or
What happens before the login prompt
Presented by
Kim Oldfield
to the
Linux Users of Victoria
on 7 November 2001.
This talk is based on
an earlier
talk presented to LUV.
Note: many links
on this page point to files on your local file
system. If you are not running Linux then they probably will not work.
There
are also links to man pages. These work in konqueror, and may or may
not
work with other browsers. If the link does not work just use the
man command from a Linux command line.
Boot sequence summary
Load boot sector from
one of:
The boot order can be
changed from within the BIOS.
BIOS setup can be entered by pressing a key during bootup. The exact
key
depends varies, but is often one of Del, F1, F2,
or F10.
DOS in the context
includes MS-DOS, Win95, and Win98.
- BIOS loads and
execute the first 512 bytes off the disk (/dev/hda)
- Standard DOS MBR
will:
- look for a
primary partition (/dev/hda1-4) marked bootable
- load and execute
first 512 bytes of this partition
- can be restored with
fdisk /mbr from DOS
- does not understand
filesystems
- code and kernel
image to be loaded is stored as raw disk offsets
- uses the BIOS
routines to load
Loading sequence
- load menu code,
typically /boot/boot.b
- prompt for (or
timeout to default) partition or kernel
- for "image=" (ie
Linux) option load kernel image
- for "other=" (ie
DOS) option load first 512 bytes of the partition
Reconfiguring LILO
One minute guide to
installing a new kernel
- copy kernel image
(bzImage) and modules to /boot and /lib/modules
- edit /etc/lilo.conf
- run /sbin/lilo
- reboot to test
- Understands file
systems
- config lives in
/boot/grub/menu.lst or /boot/boot/menu.lst
- initialise devices
- (optionally loads
initrd, see below)
- mounts root
filesystem
- specified by
lilo or loadin with root= parameter
- kernel prints:
VFS: Mounted root (ext2 filesystem) readonly.
- runs /sbin/init which is process number 1 (PID=1)
- init prints:
INIT: version 2.76 booting
- can be changed
with boot= parameter to lilo, eg
boot=/bin/sh can be useful to rescue a system which
is having
trouble booting.
Allows setup to be
performed before root FS is mounted
- lilo or loadlin
loads ram disk image
- kernel runs /linuxrc
- load modules
- initialise
devices
- /linuxrc exits
- "real" root is
mounted
- kernel runs
/sbin/init
Details in /usr/src/linux/Documentation/initrd.txt
(part of the kernel source).
- reads /etc/inittab (see
man inittab which specifies
the scripts
below
- Run boot
scripts:
- debian: run /etc/init.d/rcS which
runs:
- redhat: /etc/rc.d/rc.sysinit
script which: loads modules, check root FS and mount RW, mount local
FS,
setup network, and mount remote FS
- switches to
default runlevel eg 3.
- 0 halt
- 1 single user
- 2-4 user defined
- 5 X11 only (0 or 1
text console)
- 6 Reboot
- Default is defined
in /etc/inittab,
eg:
- The current runlevel
can be changed by running
/sbin/telinit #
where # is the new runlevel, eg typing telinit 6 will
reboot.
Run Level programs
- Scripts in
/etc/rc*.d/* are symlinks to /etc/init.d
- Scripts prefixed
with S will be started when the runlevel is entered, eg
/etc/rc5.d/S99xdm
- Scripts prefixed
with K will be killed when the runlevel is entered, eg
/etc/rc6.d/K20apache
- X11 login screen
is typically started by one of S99xdm,
S99kdm, or S99gdm.
- Run programs for
specified run level
- /etc/inittab lines:
- 1:2345:respawn:/sbin/getty
9600 tty1
- Always
running in runlevels 2, 3, 4, or 5
- Displays
login on console (tty1)
- 2:234:respawn:/sbin/getty
9600 tty2
- Always
running in runlevels 2, 3, or 4
- Displays
login on console (tty2)
- l3:3:wait:/etc/init.d/rc
3
- Run once
when switching to runlevel 3.
- Uses scripts
stored in /etc/rc3.d/
- ca:12345:ctrlaltdel:/sbin/shutdown
-t1 -a -r now
- Run when control-alt-delete
is pressed
Boot Summary
- lilo
- debian runs
- /etc/rcS.d/S*
scripts
- /etc/rc3.d/S*
scripts
- redhat runs
- /etc/rc.d/rc.sysinit
script
- /etc/rc.d/rc3.d/S*
scripts
|