Packing and unpacking initrd

From Leo's Notes
Last edited on 22 November 2021, at 19:16.

Determine initrd format

To modify initird.img or other similar images, first determine the compression method used by the initrd file. Below, we see that it's using gzip which is typical.

## Using gzip
# file initrd.img
initramfs.gz: gzip compressed data, last modified: Thu Jul 22 04:16:52 2021, max compression, from Unix, original size 46489600

## ASCII SVR4 archive
# file initramfs.img                              
initramfs.img: ASCII cpio archive (SVR4 with no CRC)

Extracting initrd

Gzip

To unpack and extract initird.img using gzip:

## Go to an empty directory before extracting the image.
# mkdir -p /mnt/initrd_extract && cd /mnt/initrd_extract
# gzip -dc < /path/to/initrd.img | cpio -i

ASCII cpio archive

To unpack initramfs using ASCII cpio archive that's generated by dracut, use skipcpio.

# /usr/lib/dracut/skipcpio initramfs.img | xz -d |cpio -id

Repacking initrd

To re-pack files back into initrd.img after making your changes:

# Go to the directory containing the contents of the image.
# cd /mnt/initrd_extract
# find . | cpio -o -c | gzip -9 > /path/to/initrd.img