Provided by: manpages_3.54-1ubuntu1_all bug

NAME

       boot-scripts - general description of boot sequence

DESCRIPTION

       The  boot  sequence  varies  in  details  among  systems but can be roughly divided to the
       following steps: (i) hardware boot,  (ii)  operating  system  (OS)  loader,  (iii)  kernel
       startup,  (iv) init and inittab, (v) boot scripts.  We will describe each of these in more
       detail below.

   Hardware-boot
       After power-on or hard reset, control is given to a program  stored  on  read-only  memory
       (normally PROM).  In PC we usually call this program the BIOS.

       This  program  normally  makes  a  basic self-test of the machine and accesses nonvolatile
       memory to read further parameters.  This memory in the PC is battery-backed  CMOS  memory,
       so  most  people  refer to it as the CMOS, although outside of the PC world, it is usually
       called nvram (nonvolatile ram).

       The parameters stored in the nvram vary between systems, but as a  minimum,  the  hardware
       boot  program  should  know what is the boot device, or which devices to probe as possible
       boot devices.

       Then the hardware boot stage accesses the boot device,  loads  the  OS  loader,  which  is
       located on a fixed position on the boot device, and transfers control to it.

       Note:  We  do  not  cover  here  booting from network.  Those who want to investigate this
              subject may want to research: DHCP, TFTP, PXE, Etherboot.

   OS loader
       In PC, the OS loader is located in the first sector of the boot device - this is  the  MBR
       (Master Boot Record).

       In  most systems, this primary loader is very limited due to various constraints.  Even on
       non-PC systems there are some limitations to the size and complexity of this  loader,  but
       the  size  limitation  of  the  PC  MBR (512 bytes including the partition table) makes it
       almost impossible to squeeze a full OS loader into it.

       Therefore, most operating systems make the primary loader call a secondary OS loader which
       may be located on a specified disk partition.

       In Linux the OS loader is normally lilo(8) or grub(8).  Both of them may install either as
       secondary loaders (where the DOS installed MBR points to them), or as a  two  part  loader
       where  they  provide  special MBR containing the bootstrap code to load the second part of
       the loader from the root partition.

       The main job of the OS loader is to locate the kernel on the disk, load  it  and  run  it.
       Most  OS  loaders  allow  interactive  use,  to enable specification of alternative kernel
       (maybe a backup in case the last compiled one isn't  functioning)  and  to  pass  optional
       parameters to the kernel.

   Kernel startup
       When  the  kernel  is  loaded,  it initializes the devices (via their drivers), starts the
       swapper (it is a "kernel process", called kswapd in modern Linux kernels), and mounts  the
       root filesystem (/).

       Some  of  the parameters that may be passed to the kernel relate to these activities (e.g:
       You can override the default root filesystem).  For further information  on  Linux  kernel
       parameters read bootparam(7).

       Only  then  the  kernel  creates  the first (user land) process which is numbered 1.  This
       process executes the program /sbin/init, passing any parameters that  weren't  handled  by
       the kernel already.

   init and inittab
       When  init  starts it reads /etc/inittab for further instructions.  This file defines what
       should be run in different run-levels.

       This gives the system administrator an easy management scheme,  where  each  run-level  is
       associated  with  a  set  of  services  (e.g, S is single-user, on 2 most network services
       start).  The administrator may change the current run-level  via  init(8)  and  query  the
       current run-level via runlevel(8).

       However,  since  it  is not convenient to manage individual services by editing this file,
       inittab only bootstraps a set of scripts that actually start/stop the individual services.

   Boot scripts
       Note:  The following description applies  to  System  V  release  4-based  systems,  which
              currently covers most commercial UNIX systems (Solaris, HP-UX, Irix, Tru64) as well
              as the major Linux distributions (Red Hat, Debian, Mandriva, SUSE,  Ubuntu).   Some
              systems  (Slackware  Linux,  FreeBSD,  OpenBSD) have a somewhat different scheme of
              boot scripts.

       For each managed service (mail, nfs server, cron, etc.) there is a single  startup  script
       located  in  a  specific directory (/etc/init.d in most versions of Linux).  Each of these
       scripts accepts as a single argument the word "start" -- causing it to start the  service,
       or  the  word  "stop" -- causing it to stop the service.  The script may optionally accept
       other "convenience" parameters (e.g: "restart",  to  stop  and  then  start,  "status"  do
       display  the service status).  Running the script without parameters displays the possible
       arguments.

   Sequencing directories
       To make specific scripts start/stop at specific run-levels and in  specific  order,  there
       are  sequencing  directories.   These  are  normally in /etc/rc[0-6S].d.  In each of these
       directories there  are  links  (usually  symbolic)  to  the  scripts  in  the  /etc/init.d
       directory.

       A  primary  script  (usually  /etc/rc)  is  called  from inittab(5) and calls the services
       scripts via the links in the sequencing directories.  All links with names that begin with
       'S'  are being called with the argument "start" (thereby starting the service).  All links
       with names that begin with 'K' are being called with the argument "stop" (thereby stopping
       the service).

       To define the starting or stopping order within the same run-level, the names of the links
       contain order-numbers.  Also, to make the names clearer, they usually end with the name of
       the  service  they refer to.  Example: the link /etc/rc2.d/S80sendmail starts the sendmail
       service on runlevel  2.   This  happens  after  /etc/rc2.d/S12syslog  is  run  but  before
       /etc/rc2.d/S90xfs is run.

       To  manage the boot order and run-levels, we have to manage these links.  However, on many
       versions of Linux, there are tools to help with this task (e.g: chkconfig(8)).

   Boot configuration
       Usually the daemons started may optionally receive command-line  options  and  parameters.
       To allow system administrators to change these parameters without editing the boot scripts
       themselves, configuration files are used.  These  are  located  in  a  specific  directory
       (/etc/sysconfig on Red Hat systems) and are used by the boot scripts.

       In  older  UNIX  systems,  these  files  contained the actual command line options for the
       daemons, but in modern Linux systems (and also in HP-UX), these files just  contain  shell
       variables.   The  boot scripts in /etc/init.d source the configuration files, and then use
       the variable values.

FILES

       /etc/init.d/, /etc/rc[S0-6].d/, /etc/sysconfig/

SEE ALSO

       inittab(5), bootparam(7), init(8), runlevel(8), shutdown(8)

COLOPHON

       This page is part of release 3.54 of the Linux man-pages project.  A  description  of  the
       project,     and    information    about    reporting    bugs,    can    be    found    at
       http://www.kernel.org/doc/man-pages/.