boot(7)                                           Miscellaneous Information Manual                                          boot(7)

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  rea‐
       sons 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  interac‐
       tive  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 limita‐
       tions 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 sec‐
       ondary 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 mem‐
       ory 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).   Tradi‐
       tionally, 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  sys‐
              tems 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 envi‐
       ronment 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  sys‐
              tems (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 "conve‐
       nience" 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, nor‐
       mally 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 start‐
       ing 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/syscon‐
       fig 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)

Linux man-pages 6.03                                         2023-02-05                                                     boot(7)