Photo by Gabriel Heinzer on Unsplash
Mastering the Linux Boot Procedure: 6 Essential Steps Explained
Simplifying the 6 Fundamental Steps in Linux Booting
1. BIOS
BIOS stands for Basic Input/Output System
Performs some system integrity checks
Searches, loads, and executes the boot loader program.
It looks for boot loader in floppy, cd-rom, or hard drive. You can press a key (typically F12 of F2, but it depends on your system) during the BIOS startup to change the boot sequence.
Once the boot loader program is detected and loaded into the memory, BIOS gives the control to it.
So, in simple terms BIOS loads and executes the MBR boot loader.
2. MBR
MBR stands for Master Boot Record.
It is located in the 1st sector of the bootable disk. Typically /dev/hda, or /dev/sda
MBR is less than 512 bytes in size. This has three components
primary boot loader info in 1st 446 bytes
partition table info in next 64 bytes
mbr validation check in last 2 bytes.
It contains information about GRUB (or LILO in old systems).
So, in simple terms MBR loads and executes the GRUB boot loader.
3. GRUB
GRUB stands for Grand Unified Bootloader.
If you have multiple kernel images installed on your system, you can choose which one to be executed.
GRUB displays a splash screen, waits for few seconds, if you don’t enter anything, it loads the default kernel image as specified in the grub configuration file.
GRUB has the knowledge of the filesystem (the older Linux loader LILO didn’t understand filesystem).
Grub configuration file is /boot/grub/grub.conf (/etc/grub.conf is a link to this). The following is sample grub.conf of CentOS.
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.el5PAE)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/
initrd /boot/initrd-2.6.18-194.el5PAE.img
As you notice from the above info, it contains the kernel and initrd image.
So, in simple terms, GRUB just loads and executes Kernel and initrd images.
4. Kernel
Mounts the root file system as specified in the “root=” in grub.conf
Kernel executes the /sbin/init program
Since init was the 1st program to be executed by Linux Kernel, it has the process id (PID) of 1. Do a ‘ps -ef | grep init’ and check the pid.
initrd stands for Initial RAM Disk.
initrd is used by the kernel as a temporary root file system until the kernel is booted and the real root file system is mounted. It also contains necessary drivers compiled inside, which helps it to access the hard drive partitions and other hardware.
Mount: Mounting is the process of making a file system available for access and use by the operating system and its users. When you mount a file system, you are essentially connecting it to a directory (often referred to as a mount point) in the existing directory hierarchy. This allows you to access the files and directories on that file system as if they were part of the local directory structure. Commonly mounted file systems include hard drives, USB drives, network shares, and more.
Unmount: Unmounting is the process of detaching a mounted file system or device from the directory tree. When you unmount a file system, it's no longer accessible from the specified mount point, and it's safe to remove or disconnect the storage device.
5. Init
At this point, your system executes run-level programs. At one point it would look for an init file, usually found at /etc/inittab to decide the Linux run level.
Run Level 0 (halt): This run level is used to shut down the system. When you switch to run level 0, the system halts and is ready for power-off. It is important to note that halting the system this way should be done carefully to avoid data corruption.
Run Level 1 (Single User Mode): Run Level 1 is often referred to as "single-user mode" or "maintenance mode." In this mode, the system boots into a minimal environment with a single user (the root user) and very few services running. It is typically used for system maintenance, troubleshooting, or repairing system problems when you don't need a multi-user environment.
Run Level 2 (Multiuser, without NFS): Run Level 2 is similar to multi-user mode but without network file sharing (NFS) services. It provides a basic multi-user environment without additional network-related services.
Run Level 3 (Full Multiuser Mode): Run Level 3 is a full multi-user mode with all services and networking enabled. This is the default run level for many server systems where multiple users can log in simultaneously.
Run Level 4 (Unused): Run Level 4 is typically not used by most Linux distributions, and it is left unused. Administrators can customize it for their specific needs if necessary.
Run Level 5 (X11): Run Level 5 is the graphical user interface (GUI) mode. In this run level, the system starts the X Window System (commonly referred to as X11), which provides a graphical desktop environment for users. Most Linux desktop systems, such as Ubuntu and Fedora, use run level 5 by default.
Run Level 6 (Reboot): This run level is used to reboot the system. When you switch to run level 6, the system reboots.
Init identifies the default initlevel from /etc/inittab and uses that to load all appropriate programs.
Execute ‘grep initdefault /etc/inittab’ on your system to identify the default run level
If you want to get into trouble, you can set the default run level to 0 or 6. Since you know what 0 and 6 means, probably you might not do that.
Typically you would set the default run level to either 3 or 5.
NFS: NFS stands for Network File System, and it is a distributed file system protocol that allows remote access to files over a network. NFS allows one computer (known as the NFS server) to share its files and directories with other computers (known as NFS clients) as if they were local to those clients. It is a popular and widely used protocol for sharing files and data between Unix-like systems
6. Runlevel programs
Runlevel programs, in a simple way, are scripts or commands that control what happens when a computer starts up or shuts down. Think of them as sets of instructions that determine which services and processes should be running or stopped at different stages of your computer's operation.
When the Linux system is booting up, you might see various services getting started. For example, it might say “Starting sendmail …. OK”. Those are the run level programs, executed from the run-level directory as defined by your run level.
Depending on your default init level setting, the system will execute the programs from one of the following directories.
Run level 0 – /etc/rc.d/rc0.d/
Run level 1 – /etc/rc.d/rc1.d/
Run level 2 – /etc/rc.d/rc2.d/
Run level 3 – /etc/rc.d/rc3.d/
Run level 4 – /etc/rc.d/rc4.d/
Run level 5 – /etc/rc.d/rc5.d/
Run level 6 – /etc/rc.d/rc6.d/
Please note that there are also symbolic links available for this directory under /etc directly. So, /etc/rc0.d is linked to /etc/rc.d/rc0.d.
Under the /etc/rc.d/rc*.d/ directories, you would see programs that start with S and K.
Programs that start with S are used during startup. S for startup.
Programs starting with K are used during shutdown. K for kill.
There are numbers right next to S and K in the program names. Those are the sequence numbers in which the programs should be started or killed.
For example, S12syslog is to start the syslog daemon, which has the sequence number of 12. S80sendmail is to start the sendmail daemon, which has the sequence number of 80. So, the syslog program will be started before sendmail.
This article discusses the Linux boot process, covering the roles of BIOS, MBR, GRUB, Kernel, Init, and Runlevel programs. It explains the functions of each component, their interactions, and the various run levels in a Linux system. Additionally, the article touches upon concepts such as mounting and unmounting file systems, and the Network File System (NFS).