mkinitrd Command in Linux

Introduction

In this lab, you'll discover how to leverage the Linux mkinitrd command for creating and customizing an initial RAM disk (initramfs) image, a vital element in the Linux boot sequence. You will gain insights into the role of the mkinitrd command, build a tailored initramfs image, and resolve kernel boot problems using this tool. This tutorial encompasses fundamental disk and file system administration skills, enriched with practical examples and detailed, step-by-step instructions.

Understand the Purpose of mkinitrd Command

In this section, you'll delve into the significance of the mkinitrd command within Linux environments. The mkinitrd command serves the purpose of generating an initial RAM disk (initramfs) image, an indispensable part of the Linux startup procedure.

The initramfs functions as a temporary file system, loaded into memory during the initial phases of booting. It houses essential drivers and modules necessary for mounting the root file system, potentially located on diverse storage mediums such as hard disks, RAID configurations, or network-attached storage.

Absent the initramfs, the kernel would be unable to access the root file system, thereby halting the boot process. The mkinitrd command is responsible for creating this initramfs image, customizable to incorporate specific drivers, modules, and utilities tailored to your system's requirements. This is a key task for any systemadmin.

Let's examine the mkinitrd command and how it is used:

sudo mkinitrd -v -f /boot/initramfs-$(uname -r).img $(uname -r)

Example output:

Creating initramfs image file '/boot/initramfs-5.15.0-58-generic.img'
Copying modules to initramfs image...
Preparing initramfs image...

The preceding command generates a fresh initramfs image file named initramfs-$(uname -r).img, storing it in the /boot directory. The -v option provides detailed output, while the -f option enforces the creation of a new image file.

The mkinitrd command extracts the kernel version from the uname -r command and utilizes it to generate the initramfs image appropriate for that kernel.

Create a Custom initramfs Image

This section guides you through the process of creating a custom initramfs image using the mkinitrd command. Customizing the initramfs proves advantageous when integrating additional drivers, modules, or utilities not included in the standard initramfs.

Begin by establishing a directory to house the custom initramfs files:

mkdir ~/project/custom-initramfs
cd ~/project/custom-initramfs

Subsequently, we'll craft a custom configuration file for the initramfs, specifying the supplementary content to incorporate within the image.

nano ~/project/custom-initramfs/initramfs.conf

Insert the following content into the initramfs.conf file:

add_dracutmodules+="custom-module"

This configuration will incorporate a custom module named custom-module into the initramfs image.

Now, let's generate the custom initramfs image. This is a key skill for any Linux systemadmin:

sudo mkinitrd -v -f /boot/custom-initramfs.img --with-modules --with-firmware --with-usb --with-i18n --with-nfs --with-crypt --with-dm --with-lvm --with-raid --with-md --with-fips --with-selinux --with-plymouth --with-shutdown --with-network --with-multipath --with-kernel-modules=custom-module

The above command generates a custom initramfs image named custom-initramfs.img and saves it in the /boot directory. The --with-* options indicate which additional modules, drivers, and utilities should be included in the initramfs.

Example output:

Creating initramfs image file '/boot/custom-initramfs.img'
Copying modules to initramfs image...
Preparing initramfs image...

Troubleshoot Kernel Boot Issues with mkinitrd

In this step, you will discover how to utilize the mkinitrd command to troubleshoot kernel boot problems. The initramfs image, generated by mkinitrd, is a critical part of the Linux startup, and a misconfiguration can cause startup issues.

Let's replicate a boot issue by modifying the initramfs image, then using mkinitrd to troubleshoot the problem. This is valuable knowledge for a systemadmin or anyone working with Linux.

First, create a backup of the current initramfs image:

sudo cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak

Now, intentionally corrupt the initramfs image by removing a critical file:

sudo rm /boot/initramfs-$(uname -r).img

Attempting to reboot the system at this point will likely result in a kernel boot error, as the initramfs image is missing.

To resolve the issue, use the mkinitrd command to recreate the initramfs image. This is a common task for Linux systemadmin roles:

sudo mkinitrd -v -f /boot/initramfs-$(uname -r).img $(uname -r)

Example output:

Creating initramfs image file '/boot/initramfs-5.15.0-58-generic.img'
Copying modules to initramfs image...
Preparing initramfs image...

After running the mkinitrd command, the initramfs image should be regenerated, enabling the kernel to boot successfully. The systemadmin can then proceed with verifying system function.

To confirm that the problem is resolved, reboot the system and check the boot logs for any errors pertaining to the initramfs. Understanding root file systems and the boot process is key to being a Linux systemadmin.

Summary

In this lab, you initially learned about the role of the mkinitrd command in Linux, which creates an initial RAM disk (initramfs) image. The initramfs is a crucial component of the Linux boot process, containing the drivers and modules needed to mount the root file system. Next, you explored creating a custom initramfs image by including drivers, modules, or utilities absent in the default initramfs. Finally, you learned to troubleshoot kernel boot issues using the mkinitrd command, useful when the default initramfs can't mount the root file system. This is an essential skill for any Linux systemadmin or anyone managing Linux servers.

400+ Linux Commands