Initrd

Initrd ramdisk或者initrd是指一个临时文件系统，它在启动阶段被Linux内核调用。initrd主要用于当“根”文件系统被挂载之前，进行准备工作。

基本原理

同其他Unix系统一样，Linux操作系统首先要将内核引导入内存。内核驻留于操作系统与应用程序的整个活动周期，其中应用程序（软件）在“用户空间”内运行，位于内核控制之下。
为了使加载存储器最小化，一些核心Linux 程序转化成模块形式，可以动态加载系统中。
initrd 系统中的文件在引导阶段可以被核心访问，里面的内容会被挂载成一个loop 类型的文件，早期是将initrd 放在小的软盘片内。initrd 通常被压缩成gzip 类型，在引导的时候由bootloader(LILO, GRUB) 来告知核心initrd 的位置。不过在2.6版本内核之后出现了initramfs，它和initrd实现同样的功能，但是它基于一种cpio档，无须挂载就可以展开成一个文件系统，因此省去了各种相关的权限，在自动化方面更方便了。

initramfs 与 initrd

initramfs是initrd的一个替代品，以另外一种方式实现了曾经initrd的功能。initrd是一个被加载的块设备，内部有ext2一类文件系统的存在，于是由于Linux内核的缓存机制，其中的内容还会被缓存到内存上，造成一定的内存空间浪费。而initramfs本身就是一个tmpfs的内存盘，拥有最小化的设计，绕过了缓存机制，也消除了多余的内存占用。
initramfs的生成方式也远比initrd简单。对于initramfs，只需geninitramfs() { cd "$1"; find . -depth| cpio -o -H newc | ${3-cat}> "$2"; } 就可以利用cpio生成这样一个文件，同时使用一些程序进行压缩（通过额外的管道实现，其中使用cat仅用于无压缩时转发输出，可省去）。对于initrd，则涉及生成一定大小的空文件，然后创建文件系统，挂载并添加文件等等诸多步骤。