Monday, April 8, 2019

Recover or restore initramfs file in RHEL or CentOS 7

What if "initramfs" file is deleted or corrupted on your RHEL or CentOS 7 ?

Lets know what is initramfs image ?

The INITial RAM Disk (initrd) is an initial root file system that usually get mounted prior to when the real root file system gets available. The "initrd" image is also known as "initramfs (Initial RAM FileSystem)" from RHEL 6.x onwards. The initrd/initramfs gets bound to the kernel and loaded as part of the kernel boot procedure. The kernel then mounts this initrd/initramfs as part of the two-stage boot process to load the modules to make the real file systems available and mount's the real root file system.

Initrd/Initramfs image provides the capability to load a RAM disk by the boot loader. This RAM disk can then be mounted as the root filesystem and programs can be run from it. Afterwards, a new root file system can be mounted from a different device. The previous root filesystem which was mounted from initrd/initramfs is then moved to a directory and can be subsequently unmounted.

Yes, their are chances that either you might have accidentally deleted "initramfs" file from the /boot partition or it is corrupted due to some reason. 

Then boot process will get interrupted and you will see below error:

error: file '/initramfs-3.10.0-957.el7.x86_64.img' not found.

Good news is you can still recover this "initramfs" by following below steps:

Step 1 : Mount RHEL or CentOS 7 ISO image on your physical server and boot from it. In case you are using HPE Prolient server you can mount this ISO image on iLO, if this is virtual environment then mount it accordingly and reboot server or VM from ISO. Once rebooted you will see below options:

Step 2 : Scroll down and select "Troubleshooting" option from menu and PRESS "Enter"

Step 3 : Select "Rescue a CentOS system" and press ENTER:

Step 4 : Press ENTER key again to continue:

Step 5 : To continue, Type "1" and press ENTER, this will bring you to rescue mode, chroot sysimage filesystem using below command:

# chroot /mnt/sysimage

Step 6 : Next step is to verify if "initramfs" file is located in /boot directory. If not then we will generate a new one.

 # dracut -f /boot/initramfs-$(uname -r).img $(uname -r)

Once file is generated, exit from the chroot and again exit to reboot the server ==> ISSUE FIXED.

1 comment: