I'm running a "reasonably" stock RedHat/SGI configuration -- which means that:
I've set things up so that my root filesystem is on an LVM logical volume. While this leads to flexible storage management, it presents some interesting problems.
It doesn't work. To boot my system, the initrd needs, minimally:
Unfortunately, the initrd built with lvmcreate_initrd only contains the LVM driver, and is thus dead in the water. Additionally, unlike RedHat's mkinitrd, the lvmcreate_initrd script doesn't provide any way of telling it to include additional modules.
To solve the booting problem, I've built an initrd image based on busybox, a suite of standard utilities designed for "small" installations (such as embedded systems, or initial ram disks). This gives me a flexibile pre-boot environment, including a real shell, and is especially useful when something is wrong with the boot process.
You'll need to make sure that your kernel has the following drivers built in:
I've also got tmpfs (CONFIG_TMPFS) compiled in, which I mount on /tmp in the initrd shell so that I have a place to drop command output or copy files from floppies without overrunning the end of the ramdisk.
To boot a system with root on an LVM volume, you need at least the following on your initrd image:
You also need some sort of script interpreter. I use the version of ash built into busybox; RedHat uses their custom nash program on their ramdisks.
You'll also need the mount command: you're going to need to mount the /proc filesystem and later on your root filesystem.
Once you've created your initrd directory tree and populated it with files, you need to create a filesystem image. Instructions on doing this can be found elsewhere, although I'll try to include them here when I have more time.
You'll probably want to compress the image using gzip. If your image is on the large (> 4M) size, you may want to include the ramdisk_size option in your kernel command line.