The switch from initrd to initramfs for newer Debian kernels
This information is of historical interest only.
Debian kernels require an initial ramdisk to work
Debian has for some time distributed and installed modular kernels by default, depending on the helper package initrd-tools to add the needed modules in a cramfs initrd-image.
2.6 has a newer format, initramfs, which is an cpio gzipped archive. The handoff to early userspace is much earlier. Initramfs allows a cleaner interface. The initrd hacks for nfs root and such are scheduled to be removed for 2.7.
Initrd-tools relies on devfs and on removed or deprecated /proc interfaces. It has no maintainer. Its CodingStyle is weird. There is no support for sata thus responsible for many sarge install failures nor scsi for kernels >= 2.6.10. Its use with recent 2.6 linux kernels is discouraged.
Several tools produce initramfs images, each with some spiffy features and annoying limitations...the comparison below use the following symbols:
Legend |
|
|
Great |
|
Not great |
|
Bad |
|
Probably, but needs confirmative tests |
Features of the different initrd-tools replacements
Architectures |
Yaird |
|
amd64 |
|
|
arm |
|
|
armeb |
|
|
alpha |
|
|
hppa |
|
|
i386 |
|
|
ia64 |
|
|
m68k |
|
|
mips |
|
|
mipsel |
|
|
powerpc |
|
|
s390 |
|
|
sh |
|
|
sparc |
|
|
xen |
|
|
|
||
Root Devices |
initramfs-tools |
yaird |
fstab label and UUID |
|
|
md (fs directly) |
|
|
|
|
|
LVM-over-md |
|
|
EVMS (fs directly) |
|
|
LVM-over-EVMS |
|
|
md-over-EVMS |
|
|
LVM-over-md-over-EVMS |
|
|
Encrypted root (dm-crypt) |
|
|
Encrypted root (luks) |
|
|
Encrypted root (dm-crypt/luks) over md |
|
|
Encrypted root (dm-crypt/luks) over LVM |
|
|
LVM over encrypted root (dm-crypt/luks) |
|
|
Encrypted root (loop-AES) |
|
|
|
|
|
NFSv4 |
|
|
|
|
|
|
|
|
USB-stick |
|
|
IEEE1394 |
|
|
Compaq Smart Arrays (cciss) |
|
|
Compaq Smart Arrays (ida) |
|
|
dmraid |
|
|
|
||
Fancy graphics |
initramfs-tools |
yaird |
usplash |
|
|
splashy |
|
|
|
||
Other features |
initramfs-tools |
yaird |
cramfs initrd 3 |
|
|
USB keyboard |
|
|
uswsusp |
|
|
swsusp |
|
|
swsusp2 4 |
|
|
External hooks |
|
|
|
||
Summary |
initramfs-tools |
yaird |
|
40 |
17 |
|
0 |
6 |
|
2 |
5 |
|
4 |
18 |
Requirements of the different initrd-tools replacements
Package requirements (risk of delays on some archs) |
initramfs-tools |
yaird |
klibc |
|
|
busybox |
|
|
|
|
|
perl |
|
|
HTML::Template |
|
|
Parse::RecDescent |
|
|
Arch: any |
|
|
Runtime requirements |
initramfs-tools |
yaird |
sysfs5 |
|
|
/boot/config.<kernelversion> |
|
|
Boot-time requirements |
initramfs-tools |
yaird |
udev7 |
|
|
Only some kernel versions work
Recent Linux kernels query the ramdisk tool prior to use if it is expected to succeed. Currently the following simplified queries try to handle all of the above contraints:
kernel-package query |
initramfs-tools |
yaird |
Supported host version |
any |
>=2.6.8 |
Supported target version |
>=2.6.12 |
>=2.6.8 |
The above has the consequense of yaird not able to provide an official upgrade path from sarge to etch. As the default debian-installer for sarge installed 2.4.27, which as any 2.4 has no /sys (new driver modell).
Comparable hilites beyond simply working
The main goal of all initrd tools is off course to generate an initial ramdisk to help boot a kernel properly. But beyond that, the tools have fundamental differences in their approach:
Hilite |
initramfs-tools |
yaird |
Composing initramfs |
Builds generic initramfs with all relevant ide, scsi, fs modules, and probes at boot time what to load |
Builds optimized initramfs containing only modules required to boot the currently running system, loading them all at boot time |
Ramdisk size |
Relatively large by default - option of relatively small |
quite small |
Dealing with MD (lvm, md, evms) |
Activates all md, evms devices and all logical volumes of the root volume group. |
Activates only md and/or LVM volumes needed for mounting rootfs |
Dealing with errors at build time |
Creates per default an generic initramfs without probing. |
Refuses to build initramfs if uncertain it will work. |
Dealing with errors at boot time |
Drops into a shell to let you fix stuff. |
By default simply stops boot process on error - manual editing config file allows for including an error recovering shell instead. |
Copying root |
Works out of the box. Noticed on boot by the new root bootparam. |
Needs a newly regenerated initramfs. |
libc used |
Both klibc and (externally pulled in) glibc |
glibc (can be compiled against klibc if needed) |
Hilites not directly comparable
initramfs-tools
- Written in shell - has backward compatible initrd-tools invocations and an "update-initramfs" for endusers
- Debian default since linux-2.6 2.6.15 release
- Used by default on Ubuntu releases Breezy, Dapper, Edgy
Debian package is maintained by ?JeffBailey, maximilianattems
Upstream Adam Conrad, Scott James Remnant https://wiki.ubuntu.com/Initramfs
yaird
- Written in perl
- Tries hard to spot problems in the image build proces and fails _before_ reboot in such cases.
- Upstream software is developed for both Debian-based and Redhat-based systems. The build process is expressed in a single config file, making it easy to do extreme customizations (support for initrd format is possible too, just abandoned upstream).
Debian package is maintained publicly at Alioth by the Yaird Team (starring the upstream maintainer).
Homepage (with details on (un)supported features and limitations): http://yaird.alioth.debian.org/
The root partition is passed as a parameter from the bootloader cmdline and can easily be set to /dev/disc/by-label/whatever or /dev/disc/by-uuid/whatever (i.e. no need to parse fstab) (1)
Fstab labels and UUID on yaird works but yuckilly: Needs to be rewritten to blkid, there are good ideas in http://bootutils.sourceforge.net/ (2)
any reason to include this?) (3)
swsusp2 is not in mainline kernel (4)
sysfs required at runtime means to depend on a mounted /sys tree. This limits to installing only from 2.6.8 and newer - specifically making upgrades directly from Linux 2.4.x to Linux 2.6.x impossible (Debian Sarge installed 2.4.x kernel by default on many arches!) (5)
sysfs is required for initramfs-tools at runtime in "dep" mode, but not in "most" mode (the default mode in Debian). Images created in "most" mode might be too big for some arches or bootloaders. (6)
udev required at boot-time limits to installing only Linux 2.6.12 and newer (7)