Initrd

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

基本原理

同其他Unix系统,Linux首先要将内核載入到内存。initrd通常被壓縮成gzip類型,開機時由bootloader(如LILO、GRUB)來告知核心initrd的位置,使其被核心存取,掛載成一個loop型態的檔案。在2.6版本内核之后出现了initramfs,它的功能類似initrd,但是它基于CPIO格式,无须挂载就可以展开成一个文件系统。

initramfs 與 initrd

initramfs是initrd的替代品。initrd是一个被加载的块设备,内部有ext2一类文件系统的存在,于是由于Linux内核的缓存机制,其中的内容还会被缓存到内存上,造成一定的内存空间浪费。而initramfs本身就是一个tmpfs的RAM 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 檔案系統內
  • 一個小的ext4或FAT檔案系統的分割區(通常掛載到 /boot)
  • TFTP server內

bootloader 會將內核與 initrd 載入到記憶體中並將 initrd 的位址傳給內核。initrd會被掛載當成 initial root file system。

現在的 Linux 發行版會建立客製化只包含必要元件的 initrd 映像檔,例如只包含 IDE、SCSI、SATA、SAS 以及檔案系統核心模組。

参考

  • Landley, Rob, Introducing initramfs, a new model for initial RAM disks, linuxdevices.com, 15 March 2005 [2007-08-22], (原始内容存档于2009-03-01)  initramfs 簡介,一個新的 initial RAM disks 的模型, [2018-12-17], (原始内容存档于2019-09-07) 
  1. ^ Almesberger, Werner, Booting linux: the history and the future, Proceedings of the Ottawa Linux Symposium, 2000 [2012-12-26], (原始内容存档于2008-07-24) 
  2. ^ The difference between initrd and initramfs?. Stack Overflow. [2014-04-24]. (原始内容存档于2021-01-26). 

更多链接

  • A detailed comparison (页面存档备份,存于互联网档案馆) of initrd-generating toolkits
  • Kernel documentation (页面存档备份,存于互联网档案馆) on Early userspace support
  • 分析linux initrd文件
组织
内核
支持
技术
调试
  • CRIU英语CRIU
  • ftrace英语ftrace
  • kdump
  • Linux内核oops
  • SystemTap英语SystemTap
启动过程
ABI
API
用户空间
FS守护进程
封装库
内核部分
系统调用接口
内核内
  • ALSA
  • DRI
  • Video4Linux
  • New API英语New API
  • Crypto API英语Crypto API (Linux)
内核组件
  • 内核模块
  • BlueZ英语BlueZ
  • cgroups
  • 控制台
  • bcache英语bcache
  • 设备映射器
  • dm-cache英语dm-cache
  • dm-crypt
  • DRM
  • EDAC
  • evdev英语evdev
  • 内核同页合并(KSM)
  • LIO
  • 帧缓冲区(Framebuffer)
  • LVM
  • KMS驱动
  • Netfilter
  • Netlink
  • nftables英语nftables
  • 网络调度器
  • perf英语perf (Linux)
  • SLUB
  • zram
  • zswap
  • 安全模块AppArmor
  • Exec Shield英语Exec Shield
  • grsecurity英语grsecurity
    • PaX英语PaX
  • seccomp英语seccomp
  • SELinux
  • Smack
  • TOMOYO Linux英语TOMOYO Linux
  • Linux PAM英语Linux PAM
  • initramfs
  • kexec
  • kGraft英语kGraft
  • kpatch英语kpatch
  • Ksplice
变种
虛擬化
采用
使用范围
采用者
  • Linux采用者列表
  • GENIVI联盟
  • Linux专有软件
人物
  • 分类 分类
  • 共享资源页面 共享资源
  • 维基百科图书 教科书
  • 维基学院页面 学院
  • 主题 主题