Initrd ramdisk或者initrd是指在启动阶段被Linux内核调用的临时文件系统,用于根目录挂载之前的准备工作。[1]

基本原理

同其他Unix系统,Linux首先要将内核载入到内存。initrd通常被压缩成gzip类型,开机时由bootloader(如LILOGRUB)来告知核心initrd的位置,使其被核心存取,挂载成一个loop型态的档案。在2.6版本内核之后出现了initramfs,它的功能类似initrd,但是它基于CPIO格式,无须挂载就可以展开成一个文件系统。

initramfs 与 initrd

initramfs是initrd的替代品。initrd是一个被加载的块设备,内部有ext2一类文件系统的存在,于是由于Linux内核的缓存机制,其中的内容还会被缓存到内存上,造成一定的内存空间浪费。而initramfs本身就是一个tmpfsRAM disk,拥有最小化的设计,绕过了缓存机制,也消除了多余的内存占用。[2]

initramfs的生成方式也远比initrd简单。对于initramfs,只需 geninitramfs() { cd "$1"; find . -depth| cpio -o -H newc | ${3-cat}> "$2"; } 就可以利用cpio生成这样一个文件,同时使用一些程序进行压缩(通过额外的管道实现,其中使用cat仅用于无压缩时转发输出,可省去)。对于initrd,则涉及生成一定大小的空文件,然后创建文件系统,挂载并添加文件等等诸多步骤。

实现

Linux内核 与 initrd/initramfs 必须储存在 bootloader 可以存取的位置,通常是在:

  • root 档案系统内
  • 一个小的ext4FAT档案系统的分割区(通常挂载到 /boot)
  • TFTP server内

bootloader 会将内核与 initrd 载入到记忆体中并将 initrd 的位址传给内核。initrd会被挂载当成 initial root file system。

现在的 Linux 发行版会建立客制化只包含必要元件的 initrd 映像档,例如只包含 IDESCSISATASAS 以及档案系统核心模组。

参考

更多链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.