Monday 22 August 2011

Linux Boot Process


Boot sequence summary

    * BIOS
    * Master Boot Record (MBR)
    * LILO or GRUB
    * Kernel
    * init
    * Run Levels

BIOS

Load boot sector from one of:

    * Floppy
    * CDROM
    * Hard drive

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) Master Boot Record (MBR)
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:
          o look for a primary partition (/dev/hda1-4) marked bootable
          o load and execute first 512 bytes of this partition
    * can be restored with fdisk /mbr from DOS

LILO

    * 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
          o duplicate image= section, eg:


                  image=/bzImage-2.4.14

                    label=14

                    read-only

          o man lilo.conf for details
    * run /sbin/lilo
    * reboot to test

GRUB

    * Understands file systems
    * config lives in /boot/grub/menu.lst or /boot/boot/menu.lst

Kernel

    * initialise devices
    * (optionally loads initrd, see below)
    * mounts root filesystem
          o specified by lilo or loadin with root= parameter
          o kernel prints: VFS: Mounted root (ext2 filesystem) readonly.
    * runs /sbin/init which is process number 1 (PID=1)
          o init prints: INIT: version 2.76 booting
          o can be changed with boot= parameter to lilo, eg boot=/bin/sh can be useful to rescue a system which is having trouble booting.

initrd

Allows setup to be performed before root FS is mounted

    * lilo or loadlin loads ram disk image
    * kernel runs /linuxrc
          o load modules
          o initialise devices
          o /linuxrc exits
    * "real" root is mounted
    * kernel runs /sbin/init

Details in /usr/src/linux/Documentation/initrd.txt (part of the kernel source).
/sbin/init

    * reads /etc/inittab (see man inittab which specifies the scripts below
          o Run boot scripts:
                + debian: run /etc/init.d/rcS which runs:
                      # /etc/rcS.d/S* scripts
                      # /etc/rc.boot/* (depreciated)
                + 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
          o switches to default runlevel eg 3.
                + run scripts /etc/rc3.d/S*
                + run programs specified in /etc/inittab

Run Levels

    * 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:
          o id:3:initdefault:
    * 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
          o Scripts prefixed with S will be started when the runlevel is entered, eg /etc/rc5.d/S99xdm
          o Scripts prefixed with K will be killed when the runlevel is entered, eg /etc/rc6.d/K20apache
          o X11 login screen is typically started by one of S99xdm, S99kdm, or S99gdm.
    * Run programs for specified run level
    * /etc/inittab lines:
          o 1:2345:respawn:/sbin/getty 9600 tty1
                + Always running in runlevels 2, 3, 4, or 5
                + Displays login on console (tty1)
          o 2:234:respawn:/sbin/getty 9600 tty2
                + Always running in runlevels 2, 3, or 4
                + Displays login on console (tty2)
          o l3:3:wait:/etc/init.d/rc 3
                + Run once when switching to runlevel 3.
                + Uses scripts stored in /etc/rc3.d/
          o ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
                + Run when control-alt-delete is pressed

Boot Summary

    * lilo
          o /etc/lilo.conf
    * debian runs
          o /etc/rcS.d/S* scripts
          o /etc/rc3.d/S* scripts
    * redhat runs
          o /etc/rc.d/rc.sysinit script
          o /etc/rc.d/rc3.d/S* scripts

No comments:

Post a Comment