In short: initrd is old, wastes memory, gets cached (which is another waste of memory,) and needs to be located with a kernel command argument. initramfs is new, and is cache, makes much better use of memory, and can either be loaded the same way as an initrd (through the
root=
kernel argument) or compiled straight into the kernel. initrd is of fixed size, which you must calculate before you create it, and then are limited to while it's running. initramfs will grow and shrink as it needs to.[3/15/07 Nota Bene:] The kernel treats an initrd like any other disk at startup. It tries to execute
/linuxrc
, /bin/init
, then /sbin/init
(or whatever you specify in the init=
kernel argument,) which may be symbolic links. You also have to specify root=/dev/ram0
to tell it where to find the image. Under initramfs, you may omit the root=
argument, and the kernel only looks for /init
, which may not be a symlink. It's either what you want to run, or a hard link to it. (I use a hardlink to /bin/busybox
.)