Need to tinker with an initrd.img or initramfs.img? Here are the steps to unpack these files and then put them back together again if you've made any changes.

First step, make a copy of the initrd.img or initramfs.img in question:

cp /boot/initramfs-*.img /tmp  

The .img hides the fact that these files are actually gzip archives, so they need to be uncompressed.

cd /tmp  
gunzip -S .img initramfs*.img  
# -S .img allows gunzip to accept the .img extension
# alternative is to rename the image
mv initramfs*.img initramfs.gz  
gunzip initramfs.gz  

The result will be a file of the same name as the ramdisk without any extension. If you're concerned about repacking later it might be worth checking how the image was archived -- odds are it's in the newc format. If that's the case the file command will output something similar to this message:

file initramfs-3.8.9-200.fc18.x86_64  
initramfs-3.8.9-200.fc18.x86_64: ASCII cpio archive (SVR4 with no CRC)  

You can look up the other possible formatting options by reading the cpio manpage.

Now to unpack the cpio archive and get at the contents of the image:

# probably worth making a new directory to unpack this to. keeps things clean
mkdir ramdisk  
cd ramdisk  
cpio -id < ../initramfs*  
105643 blocks  

Now you can examine and play around with the contents of the image:

ls  
bin  dev  etc  init  lib  lib64  proc  root  run  sbin  shutdown  sys  sysroot  tmp  usr  var  

If you want to put it all back together just reverse the steps above:

pwd        # make sure we're in the root of the unpacked ramdisk  
/tmp/ramdisk
find . | cpio --create --format='newc' > /tmp/newinitramfs  
105731 blocks  
cd /tmp  
gzip -S .img newinitramfs  
mv newinitramds.img /boot/initramfs-[kernel version].img