什么是initrd

initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。

在 linux内核启动前, boot loader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。

在 boot loader 配置了 initrd 的情况下,内核启动被分成了两个阶段,第一阶段先执行 initrd 文件系统中的"某个文件",完成加载驱动模块等任务,第二阶段才会执行真正的根文件系统中的 /sbin/init 进程。

这里提到的"某个文件",Linux2.6 内核会同以前版本内核的不同,所以这里暂时使用了"某个文件"这个称呼,后面会详细讲到。

第一阶段启动的目的是为第二阶段的启动扫清一切障爱,最主要的是 加载根文件系统存储介质的驱动模块。

initrd产生原因

要想明白initrd产生的原因,带要从linux启动说起。其实装入本地linux系统时可以不用initrd,只要在kernel参数中加入root参数就可以了。

在boot loader如grub等装入kernel后, kernel需要执行系统中的/sbin/init, 读取这个文件就必须先mount根文件系统。 早期是通过启动时的root=参数告诉内核根文件系统在哪个设备上。

随着硬件和技术的发展,现在根文件系统可能位于一个网络存储如NFS上, 可能由于RAID而散布于多个设备上, 可能位于一个加密设备上需要提供用户名和密码,这时root=参数就显得不够了。

为了应付这种局面, 先后出现两种机制来作为boot loader装载kernel到真正的/sbin/init执行这个启动过程的桥梁:initrd和initramfs。

两者有类似的地方,比如都是由内核执行其上的某个程序(initrd是/linuxrc, initramfs是/init),由这个程序决定加载什么驱动以及如何装载根文件系统。

例如,把linux装入U盘中时,就要用到initrd。这里不是指把系统做成initrd直接加载成内存式linux,而是像本地硬盘上那样是非镜像型的linux系统。

为什么必须要用initrd?我们可以从启动过程来看。首先,由如GRUB的引导加载器加载内核,这时可以识别U盘,如果你是从U盘启动的,那么U盘为hd0。这一切都是GRUB可以识别U盘的存在。

当内核加载后情况就不一样了,内核之中一般是没有U盘驱动的,那它就 找不到U盘,更不用说U盘中的系统了。所以就要用initrd来加载U盘驱动,并执行系统中的/sbin/init。

initrd 的用途

1. linux 发行版的必备部件

linux 发行版必须适应各种不同的硬件架构,将所有的驱动编译进内核是不现实的,initrd 技术是解决该问题的关键技术。Linux 发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的 initrd,无非是一种即可行又灵活的解决方案。

2. livecd 的必备部件

同 linux 发行版相比,livecd 可能会面对更加复杂的硬件环境,所以也必须使用 initrd。

3. 制作 Linux usb 启动盘必须使用 initrd

usb 设备是启动比较慢的设备,从驱动加载到设备真正可用大概需要几秒钟时间。如果将 usb 驱动编译进内核,内核通常不能成功访问 usb 设备中的文件系统。因为在内核访问 usb 设备时, usb 设备通常没有初始化完毕。所以常规的做法是,在 initrd 中加载 usb 驱动,然后休眠几秒中,等待 usb设备初始化完毕后再挂载 usb 设备中的文件系统。

4. 在 linuxrc 脚本中可以很方便地启用个性化 bootsplash。

linux中initrd的含义,什么是initrd相关推荐

  1. linux中特殊字符的含义,Linux中的特殊符号以及特殊语法

    辨别||.&&.;.$*等符号在linux中的含义 与或 # 将&&前后的两个命令当做一个表达式,如果表达式出错,那么可以认为该表达式为false ➜ ~ ls / & ...

  2. linux中mkdir命令含义,Linux中mkdir命令详解

    Linux中mkdir命令详解 linux mkdir用来创建目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1. 新建一个文件夹 one 2. 新建三个 ...

  3. linux中touch命令含义,Linux中touch命令起什么作用呢?

    摘要: 下文讲述Linux中touch命令的功能说明,如下所示: touch命令功能: 其功能为: 1.创建一个空文件 2.修改已存在文件的时间戳属性 touch命令的语法格式: touch [参数] ...

  4. linux中touch命令含义,Linux中的touch命令的详细解释

    Linux下的touch命令是用来干嘛的呢?小编告诉你它是修改文件或目录的时间属性,下面由学习啦小编为大家整理了linux下的touch命令的详细解释,希望对大家有帮助! Linux中的touch命令 ...

  5. Linux中fan的含义,Linux 常用命令总结

    大三这学期选了一门 Linux 操作系统,虽然之前学过一些,但是不够系统,以下简单整理了一下常用的一些命令. 一.初识 Linux 发行版本 Ubuntu debian deepin CentOS r ...

  6. Linux中vgextend的含义,vgextend(8)

    将PV添加到VG中 命令语法格式 vgextend position_args [ option_args ] vgextend VG PV - [ -A|–autobackup y|n ] [ -f ...

  7. linux中resize的含义,linux的resize2fs命令

    Linux下的resize2fs命令被用来增大或收缩未加载的文件系统的大小.下面由学习啦小编为大家整理了linux下resize2fs命令的相关知识,希望对大家有帮助! linux的resize2fs ...

  8. Linux中的EAGAIN含义

    在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞 ...

  9. Linux中fan的含义,GitHub - FineFan/TranslateProject: Linux中国翻译项目

    2013/09/10 倡议并得到了大家的积极响应,成立翻译组. 2013/09/11 采用 GitHub 进行翻译协作,并开始进行选题翻译. 2013/09/16 公开发布了翻译组成立消息后,又有新的 ...

最新文章

  1. Android 通过http协议数据交互
  2. 月薪没过20K的程序员要注意了!(文末送书)
  3. Windows.Web.Http.HttpClient.GetStringAsync 总是返回相同的结果
  4. ubuntu 20.04 安装circos
  5. [SQL实战]之统计出当前各个title类型对应的员工当前薪水对应的平均工资
  6. iOS 使用SourceTree注意事项
  7. 使用 RxJava 的正确姿势
  8. 【转】【C#.NET】ASP.NET状态管理 APPlication,Session,Cookie和ViewStat用法
  9. XTP: 从XTP看Rust与C++接口FFI通信
  10. windows10与windows98虚拟机共享文件
  11. Spring-boot-2.1.X源码编译
  12. c语言 面试前必备基础知识
  13. MD5加密算法简单实现
  14. Apple Pencil平替哪个好?Apple Pencil平替笔推荐
  15. MAC OSX stdio.h或iostream等头文件无法找到的解决办法
  16. excel图片技巧:如何为报表配上节日祝福动画
  17. java-php-python-springboo垃圾分类网站计算机毕业设计
  18. VBA的form相关实验2,form里的变量传递和模块里有什么不同?(---未完成-----)
  19. succi -测手速游戏
  20. 中国石油大学计算机科学与技术在哪个校区,庞善臣 - 中国石油大学 - 计算机科学与技术学院...

热门文章

  1. 1290 - 【入门】二进制转换十进制
  2. 王者s19服务器维护到什么时候,王者荣耀S19新版本玄雍危机维护到几点 王者荣耀今天几点维护完...
  3. 基于UE4的多RHI线程实现
  4. 从键盘输入两个数,求它们的和并输出
  5. UE5出现:File:D:\build\++UE5\Sync\Engine\Source\Runtime\Windows\D3D11RHI\Private\D3D11Util.cpp
  6. ES6_04- 模板字符串+标签模板字符串
  7. qt运行时插件目录设置
  8. python 继续学习第七天 字典
  9. arm linux php,在ARM Linux系统上面安装Apache+sqlite+PHP的详细讲解 - Apache - 数安时代(GDCA)SSL证书官网...
  10. arduinoesp8266定时器_Arduino ESP8266