真是太不关注Linux Kernel发展,今天一大早抽了时间把initrd和initramfs的概念区分了一下,终于有点眉目,不敢独享。

都知道Linux有个Ram Disk的概念,很早就有了,至少2.4的时候就有,再早我也不了解。那么initrd,就如他的名字,initial ram disk,很好理解,就是为了root fs。

initramfs无非也如他的名字,initial ram file system。这个概念大概是2.6以后才推行的,并且现在是主流,也就是说initrd已经过时了,没什么人用了。这属于“时尚”界的事情,你肯定需要了解,至少需要知道这种流行趋势。

这个initramfs击败initrd的改朝换代的局面,是必然的,因为是有原因的,initramfs比initrd先进很多。同时为了保持兼容性,即使内核同时启用了initrd和initramfs,内核也可以自动的判断归档文件的格式和内容,自动很好的处理。

两者都需要制作归档文件,归档文件典型都叫ramdisk.cpio.gz,但是内容和制作过程差异较大。

先看先进的initramfs,只需一条命令

(cd "$1"; find . | cpio -o -H newc | gzip) > "$2"

但是initrd呢,8、9个步骤是至少的,因为他要涉及到loopback device和创建ext2文件系统之类(同时initrd的创建过程不会使用cpio),这里我就不详述了。

从制作的过程,我们可以看出一点问题。initrd强调的是最后的disk,initramfs强调的是file system。但是,disk也是需要被mount的,mount时候还是要涉及file system,而initramfs直接跳过了disk,上去就是file system,这就是initramfs比initrd先进的最直接的理由。

initrd由于是disk,所以制作的时候,你需要loop back device,并且把它格式化为一个文件系统,然后mount到你的host系统,再把需要的文件复制进去。

initramfs直接就是file system,一个cpio搞定。

当然从专业角度的解释,你可以去官方网站。他们会告诉你,initramfs避免了内存到disk cache的复制、也不会占用固定内存等等。

不过我认为,看我的文档就已经足够了。

Logo

更多推荐