The stages involved in Linux Booting Process are:
BIOS/uefi boot
Boot Loader
– MBR
– GRUB
Kernel
Init
Runlevel scripts
BIOS
This is the first thing which loads once you power on your machine.
When you press the power button of the machine, CPU looks out into ROM for further instruction.
The ROM contains JUMP function in the form of instruction which tells the CPU to bring up the BIOS
BIOS determines all the list of bootable devices available in the system.
Prompts to select bootable device which can be Hard Disk, CD/DVD-ROM, Floppy Drive, USB Flash Memory Stick etc (optional)
Operating System tries to boot from Hard Disk where the MBR contains primary boot loader.
Boot Loader
To be very brief this phase includes loading of the boot loader (MBR and GRUB/LILO) into memory to bring up the kernel.
MBR (Master Boot Record)
It is the first sector of the Hard Disk with a size of 512 bytes.
The first 434 – 446 bytes are the primary boot loader, 64 bytes for partition table and 6 bytes for MBR validation timestamp.
NOTE: Now MBR directly cannot load the kernel as it is unaware of the file-system concept and requires a boot loader with file system driver for each supported file systems, so that they can be understood and accessed by the boot loader itself.
To overcome this situation GRUB is used with the details of the filesystem in /boot/grub.conf and file system drivers
GRUB (GRand Unified Boot loader)
This loads the kernel in 3 stages
GRUB stage 1:
The primary boot loader takes up less than 512 bytes of disk space in the MBR – too small a space to contain the instructions necessary to load a complex operating system.
Instead the primary boot loader performs the function of loading either the stage 1.5 or stage 2 boot loader.
GRUB Stage 1.5:
Stage 1 can load the stage 2 directly, but it is normally set up to load the stage 1.5.
This can happen when the /boot partition is situated beyond the 1024 cylinder head of the hard drive.
GRUB Stage 1.5 is located in the first 30 KB of Hard Disk immediately after MBR and before the first partition.
This space is utilized to store file system drivers and modules.
This enabled stage 1.5 to load stage 2 to load from any known location on the file system i.e. /boot/grub
GRUB Stage 2:
This is responsible for loading kernel from /boot/grub/grub.conf and any other modules needed
Loads a GUI interface i.e. splash image located at /grub/splash.xpm.gz with list of available kernels where you can manually select the kernel or else after the default timeout value the selected kernel will boot
The original file is /etc/grub.conf of which you can observe a symlink file at /boot/grub/grub.conf
Sample /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-194.26.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.26.1.el5 ro root=/dev/VolGroup00/root clocksource=acpi_pm divisor=10
initrd /initrd-2.6.18-194.26.1.el5.img
title Red Hat Enterprise Linux Server (2.6.18-194.11.4.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.11.4.el5 ro root=/dev/VolGroup00/root clocksource=acpi_pm divisor=10
initrd /initrd-2.6.18-194.11.4.el5.img
title Red Hat Enterprise Linux Server (2.6.18-194.11.3.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.11.3.el5 ro root=/dev/VolGroup00/root clocksource=acpi_pm divisor=10
initrd /initrd-2.6.18-194.11.3.el5.img
Kernel
This can be considered the heart of operating system responsible for handling all system processes.
Kernel is loaded in the following stages:
Kernel as soon as it is loaded configures hardware and memory allocated to the system.
Next it un-compresses the initrd image (compressed using zlib into zImage or bzImage formats) and mounts it and loads all the necessary drivers.
Loading and unloading of kernel modules is done with the help of programs like insmod, and rmmod present in the initrd image.
Looks out for hard disk types be it a LVM or RAID.
Unmounts initrd image and frees up all the memory occupied by the disk image.
Then kernel mounts the root partition as specified in grub.conf as read-only.
Next it runs the init process
Init Process
Executes the system to boot into the run level as specified in /etc/inittab
Sample output defining the default boot runlevel inside /etc/inittab
# Default runlevel. The runlevels used by RHS are:
# 0 – halt (Do NOT set initdefault to this)
# 1 – Single user mode
# 2 – Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 – Full multiuser mode
# 4 – unused
# 5 – X11
# 6 – reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
As per above O/P system will boot into runlevel 5
You can check current runlevel details of your system using below command on the terminal
# who -r
run-level 3 Jan 28 23:29 last=S
Next as per the fstab entry file system’s integrity is checked and root partition is re-mounted as read-write (earlier it was mounted as read-only).
Runlevel scripts
A no. of runlevel scripts are defined inside /etc/rc.d/rcx.d
Runlevel Directory
0 /etc/rc.d/rc0.d
1 /etc/rc.d/rc1.d
2 /etc/rc.d/rc2.d
3 /etc/rc.d/rc3.d
4 /etc/rc.d/rc4.d
5 /etc/rc.d/rc5.d
6 /etc/rc.d/rc6.d
Based on the selected runlevel, the init process then executes startup scripts located in subdirectories of the /etc/rc.d directory.
Scripts used for runlevels 0 to 6 are located in subdirectories /etc/rc.d/rc0.d through /etc/rc.d/rc6.d, respectively.
Lastly, init runs whatever it finds in /etc/rc.d/rc.local (regardless of run level). rc.local is rather special in that it is executed every time that you change run levels.
NOTE: rc.local is not used in all the distros as for example Debian.
Next if everything goes fine you should be able to see the Login Screen on your system.
########################################################
Introducing process basics
A running instance of a program is called as process. A program stored in the hard disk or pen drive is not a process. When that stored program starts executing, then we say that process has been created and is running. Let’s very briefly understand the Linux operating system boot-up sequence:
1. In PCs, initially the BIOS chip initializes system hardware, such as PCI bus, display device drivers, and so on.
2.Then the BIOS executes the boot loader program.
3.The boot loader program then copies kernel in memory, and after basic checks, it calls a kernel function called start_kenel() .
4.The kernel then initiates the OS and creates the first process called init .
5.You can check the presence of this process with the following command:
$ ps –ef
6.Every process in the OS has one numerical identification associated with it. It is called a process ID. The process ID of the init process is 1. This process is the parent process of all user space processes.
7.In the OS, every new process is created by a system call called fork() .
8.Therefore, every process has a process ID as well as the parent process ID.
9.We can see the complete process tree using the following command:
$ pstree
https://linoxide.com/booting/boot-process-of-linux-in-detail/
###################################################################
Linux Boot process
As soon as you switch ON’s your machine. The first thing that happens is the BIOS is loaded. And it is present in ROM(read only memory) which is present on a chip-set in motherboard.
So the first role of the bios is to perform POST. And make sure the h/w attached to the system is working fine, it loads the generic system drivers it loads.
Bios can be bootted from any of the device, or you specify sequence from from which its going to boot.
Bios hand’s over the control to the first sector of the disk, thus first sector will have information about how to start booting.
And first sector consist of master boot record MBR(512-Bytes). MBR knows how to boot from that particular harddisk.
If you multi boot environment you could have lilo or grub installed on it.
Incase that is installed on MBR that grub is first that is loaded, after grub is loaded, It provides you a menu, where u can see no of OS present on it.
If you section corresponding to it, it will have
root (hd0,0) hd0=first hard-disk 0=first-parition
hd(hd0,0) is the first boot partition
Kenel /vmlinuz-x.x.x.xv(ro-readonly filesystem) Initially kernel is loaded into readonly filesystem. Kernel is the statically complied with various drivers, but these drivers are not sufficient to load operating system i.e root partitions. So Initrd is Intial Ramdisk which consist’s of device drivers which are necessary to load the actual root file system.
initrd /initrramfs-x.x.x.
Dracut is actually initrd infrastructure.
After checking the filesystem with fsck it will remount the filessytem in rw mode. And check in /etc/fstab for the presence of various partitions in fstab. And then start’s the services present in runlevel, The first process that was initiated after the kernel was mounted was /sbin/init
