initrd and initramfs

Both initrd (initial RAM disk) and initramfs (initial RAM filesystem) are used to bootstrap the Linux operating system. They provide the necessary environment to mount the real root filesystem and continue the boot process.

initrd

initrd stands for initial RAM disk. It is a scheme for loading a temporary root file system into memory to bootstrap the Linux kernel. Here are the key points:

  • Format: initrd is typically a compressed file system image, such as a cpio archive or a filesystem image like ext2.

  • Mounting: The kernel loads the initrd image into memory and mounts it as a temporary root file system.

  • Purpose: The main purpose of initrd is to perform initial setup tasks, such as loading necessary drivers to access the actual root filesystem, before switching to the real root file system.

initramfs

initramfs stands for initial RAM filesystem. It is an alternative to initrd and has become the standard method for early user space in Linux. Here are the key points:

  • Format: initramfs is a cpio archive, often compressed with gzip, bzip2, or xz.

  • Mounting: The kernel unpacks the initramfs archive directly into memory and uses it as the initial root file system.

  • Purpose: Similar to initrd, initramfs is used to load drivers and perform initial setup tasks, but it is more flexible and efficient than initrd.

  • Differences from initrd: Unlike initrd, initramfs does not require an additional filesystem layer; it directly unpacks into the rootfs. This results in a simpler, faster boot process.

Creating and Managing initrd and initramfs

Creating initrd

Creating an initrd image is typically done using the mkinitrd or dracut command.

Example using mkinitrd:

sudo mkinitrd -o /boot/initrd.img-$(uname -r) $(uname -r)

Example using dracut:

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

Creating initramfs

Creating an initramfs image is typically done using the mkinitramfs or dracut command.

Example using mkinitramfs:

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

Example using dracut:

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

Using initrd and initramfs

Both initrd and initramfs images are specified in the bootloader configuration, such as GRUB, to be loaded by the kernel during the boot process.

Example GRUB entry:

menuentry 'Linux' {
    set root='hd0,1'
    linux /vmlinuz-5.4.0-26-generic root=/dev/sda1
    initrd /initrd.img-5.4.0-26-generic
}

For initramfs:

menuentry 'Linux' {
    set root='hd0,1'
    linux /vmlinuz-5.4.0-26-generic root=/dev/sda1
    initrd /initramfs-5.4.0-26-generic.img
}

Conclusion

Both initrd and initramfs serve the same fundamental purpose of providing an initial environment for the Linux kernel to boot and mount the real root filesystem. While initrd is an older method, initramfs has become the standard due to its simplicity and efficiency. Understanding how to create and manage these images is crucial for Linux system administrators, especially when dealing with custom kernels or troubleshooting boot issues.

Last updated