Provided by: manpages_4.16-1_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

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

COLOPHON

       This page is part of release 4.16 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 https://www.kernel.org/doc/man-pages/.