Remove ads

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.

Remove ads