Provided by: manpages_4.04-2_all bug

NAME

       boot - System bootup process based on UNIX System V Release 4

DESCRIPTION

       The  bootup  process  (or  "boot  sequence")  varies  in  details among
       systems, but can be roughly  divided  into  phases  controlled  by  the
       following components:

       1.  hardware

       2.  operating system (OS) loader

       3.  kernel

       4.  root user-space process (init and inittab)

       5.  boot scripts

       Each of these is described below in more detail.

   Hardware
       After  power-on  or hard reset, control is given to a program stored in
       read-only memory (normally PROM); for historical reasons involving  the
       personal computer, this program is often called "the BIOS".

       This  program  normally  performs  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"; outside of the PC world, it is usually called  "the  NVRAM"
       (nonvolatile RAM).

       The  parameters  stored  in  the  NVRAM  vary  among  systems, but as a
       minimum, they should specify which device can supply an OS  loader,  or
       at least which devices may be probed for one; such a device is known as
       "the boot device".  The hardware boot stage loads the OS loader from  a
       fixed position on the boot device, and then transfers control to it.

       Note:  The  device from which the OS loader is read may be attached via
              a network, in which case the  details  of  booting  are  further
              specified by protocols such as DHCP, TFTP, PXE, Etherboot, etc.

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

       In  a  traditional PC, the OS loader is located in the initial 512-byte
       block of the boot device; this block is known as "the MBR" (Master Boot
       Record).

       In  most  systems,  the  OS  loader  is  very  limited  due  to various
       constraints.  Even on non-PC systems, there are some limitations on 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 much functionality into it.

       Therefore,  most  systems  split  the  role of loading the OS between a
       primary OS loader and a secondary OS loader; this secondary  OS  loader
       may be located within a larger portion of persistent storage, such as a
       disk partition.

       In Linux, the OS loader is often either lilo(8) or grub(8).

   Kernel
       When the kernel is loaded, it initializes  various  components  of  the
       computer and operating system; each portion of software responsible for
       such  a  task  is  usually  consider  "a  driver"  for  the  applicable
       component.   The  kernel  starts  the  virtual  memory swapper (it is a
       kernel process, called "kswapd" in a modern Linux kernel),  and  mounts
       some filesystem at the root path, /.

       Some of the parameters that may be passed to the kernel relate to these
       activities  (for  example,  the  default   root   filesystem   can   be
       overridden);  for  further information on Linux kernel parameters, read
       bootparam(7).

       Only then does the kernel create the initial userland process, which is
       given  the  number  1  as  its  PID  (process ID).  Traditionally, this
       process executes the  program  /sbin/init,  to  which  are  passed  the
       parameters that haven't already been handled by the kernel.

   Root user-space process
       Note:  The  following description applies to an OS based on UNIX System
              V Release 4.  However, a number  of  widely  used  systems  have
              adopted  a related but fundamentally different approach known as
              systemd(1), for which the bootup  process  is  detailed  in  its
              associated bootup(7).

       When /sbin/init starts, it reads /etc/inittab for further instructions.
       This file defines what should be run when  the  /sbin/init  program  is
       instructed to enter a particular run-level, giving the administrator an
       easy way to establish an environment for some usage; each run-level  is
       associated  with a set of services (for example, run-level S is single-
       user mode, and run-level 2 entails running most network services).

       The administrator may change the current  run-level  via  init(1),  and
       query the current run-level via runlevel(8).

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

   Boot scripts
       Note:  The  following description applies to an OS based on UNIX System
              V  Release  4.   However,  a  number  of  widely  used   systems
              (Slackware  Linux,  FreeBSD,  OpenBSD) have a somewhat different
              scheme for 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" to display the  service  status,  etc.).   Running  the
       script without parameters displays the possible arguments.

   Sequencing directories
       To  make  specific  scripts  start/stop at specific run-levels and in a
       specific order, there are sequencing directories, normally of the  form
       /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);  this
       primary  script  calls each service's script via a link in the relevant
       sequencing directory.  Each link whose name begins with 'S'  is  called
       with  the  argument  "start" (thereby starting the service).  Each link
       whose name begins with 'K' is called with the argument "stop"  (thereby
       stopping the service).

       To define the starting or stopping order within the same run-level, the
       name of a link contains an order-number.  Also, for clarity,  the  name
       of a link usually ends with the name of the service to which it refers.
       For  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 these links is to manage the boot order and run-levels; under
       many   systems,   there  are  tools  to  help  with  this  task  (e.g.,
       chkconfig(8)).

   Boot configuration
       A program that provides a service is often called a "daemon".  Usually,
       a  daemon  may receive various command-line options and parameters.  To
       allow a system administrator to change these inputs without editing  an
       entire  boot  script,  some separate configuration file is used, and is
       located in a specific directory where an  associated  boot  script  may
       find it (/etc/sysconfig on older Red Hat systems).

       In  older  UNIX  systems, such a file contained the actual command line
       options for a daemon, but in modern Linux systems (and also in  HP-UX),
       it  just  contains shell variables.  A boot script in /etc/init.d reads
       and  includes  its  configuration  file  (that  is,  it  "sources"  its
       configuration file) and then uses the variable values.

FILES

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

SEE ALSO

       bootup(7)  systemd(1)  inittab(5),  bootparam(7), init(1), runlevel(8),
       shutdown(8)

COLOPHON

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