### Linux初始RAM磁盘(initrd)概述 #### 什么是初始RAM磁盘? Linux初始RAM磁盘(initrd)是一种特殊的临时根文件系统,在系统启动过程中被挂载以支持两阶段启动过程。在真实根文件系统的可用性之前,initrd作为初始根文件系统存在。它与内核绑定,并作为内核引导程序的一部分加载。内核随后会挂载此initrd,以加载必要的模块使真实文件系统可用,并最终到达真实的根文件系统。 #### initrd的作用 initrd包含了最少的目录和可执行文件集来实现这一目标,例如`insmod`工具用于将内核模块安装到内核中。对于桌面或服务器Linux系统而言,initrd是一个短暂存在的文件系统,其生命周期很短,仅作为通向真实根文件系统的桥梁。而在没有可变存储的嵌入式系统中,initrd则是永久的根文件系统。本文将探讨这两种不同的上下文。 #### initrd的结构 initrd镜像包含了支持Linux系统第二阶段启动所需的可执行文件和系统文件。根据您运行的Linux版本不同,创建初始RAM磁盘的方法可能会有所差异。在Fedora Core 3之前的版本中,initrd是通过循环设备(loop device)构建的。循环设备是一种设备驱动程序,允许您将一个文件挂载为块设备,并解释其所代表的文件系统。循环设备可能不在您的内核中,但您可以通过内核配置工具(如`make menuconfig`)启用它,具体步骤是选择“Device Drivers” > “Block Devices” > “Loopback Device Support”。 您可以通过以下命令检查循环设备(请注意,您的initrd文件名可能会有所不同): ```sh # 例如查看initrd.img-2.6.9-11.ELsmp losetup -f /path/to/initrd.img-2.6.9-11.ELsmp ``` 这将把指定的initrd文件映射到一个循环设备上,例如`/dev/loop0`。 #### 创建initrd 创建initrd的过程涉及以下几个主要步骤: 1. **创建临时文件系统:** - 使用`mkdir`命令创建一个临时目录。 - 将所需的文件复制到该目录下,这些文件通常包括但不限于基本的二进制文件(如`bash`、`mount`等)、必要的内核模块以及脚本文件。 2. **压缩临时文件系统:** - 使用`cpio`和`gzip`工具将临时文件系统压缩成一个单一的文件。 3. **生成init脚本:** - 编写一个简单的shell脚本(通常是`init`),该脚本定义了在initrd环境中执行的操作顺序。 4. **将init脚本打包进initrd:** - 在创建的initrd文件中包含这个初始化脚本。 5. **测试initrd:** - 在实际环境中测试initrd以确保所有必需的组件都已正确安装并且能够正常工作。 #### initrd在Linux启动过程中的作用 在Linux启动过程中,initrd的主要功能是提供一个临时的根文件系统,以便在真实根文件系统可用之前加载必要的模块和支持。当计算机开机时,BIOS首先加载内核并传递任何必要的参数。内核接着挂载initrd并从中运行初始化脚本。初始化脚本通常会执行以下操作: 1. **加载必要的内核模块:** 这些模块可能是硬件驱动程序或其他支持特定文件系统格式的模块。 2. **挂载真实根文件系统:** 一旦所有必要的模块都已加载,initrd会挂载真实根文件系统。 3. **执行清理任务:** 当真实根文件系统成功挂载后,initrd执行清理任务,释放其占用的内存空间。 #### 结论 initrd在Linux启动过程中扮演着关键角色,特别是在需要额外支持的情况下,比如加载特定硬件驱动程序或文件系统。对于桌面或服务器Linux系统来说,initrd仅在启动过程早期短暂存在;而对于许多嵌入式Linux系统而言,initrd可能就是最终的根文件系统。理解initrd的工作原理对于深入掌握Linux启动过程至关重要。
Learn about its anatomy, creation, and use in the Linux boot process
Document options
Print this page
E-mail this page
Rate this page
Help us improve this content
Level: Intermediate
M. Tim Jones (mtj@mtjones.com), Consultant Engineer, Emulex
31 Jul 2006
The Linux? initial RAM disk (initrd) is a temporary root file system that is mounted during system boot to support the two-state boot process. The initrd contains various executables and drivers that permit the real root file system to be mounted, after which the initrd RAM disk is unmounted and its memory freed. In many embedded Linux systems, the initrd is the final root file system. This article explores the initial RAM disk for Linux 2.6, including its creation and use in the Linux kernel.
What's an initial RAM disk?
The initrd contains a minimal set of directories and executables to achieve this, such as the insmod tool to install kernel modules into the kernel.
In the case of desktop or server Linux systems, the initrd is a transient file system. Its lifetime is short, only serving as a bridge to the real root file system. In embedded systems with no mutable storage, the initrd is the permanent root file system. This article explores both of these contexts.
Back to top
Anatomy of the initrd
The initrd image contains the necessary executables and system files to support the second-stage boot of a Linux system.
Depending on which version of Linux you're running, the method for creating the initial RAM disk can vary. Prior to Fedora Core 3, the initrd is constructed using the loop device. The loop device is a device driver that allows you to mount a file as a block device and then interpret the file system it represents. The loop device may not be present in your kernel, but you can enable it through the kernel's configuration tool (make menuconfig) by selecting Device Drivers > Block Devices > Loopback Device Support. You can inspect the loop device as follows (your initrd file name will vary):
Listing 1. Inspecting the initrd (prior to FC3)
# mkdir temp ; cd temp
# cp /boot/initrd.img.gz .
# gunzip initrd.img.gz
# mount -t ext -o loop initrd.img /mnt/initrd
# ls -la /mnt/initrd
#
剩余12页未读,继续阅读
- 粉丝: 3
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ruitls.js 涵盖了前端开发常用的工具方法,有字符串、数字、数组、缓存、文件等,尽可能的避免前端在开发中重复造轮子.zip
- Egg + React 全栈开发记账本-前端页面代码.zip
- 基于python的简单爬取百度百科内容demo
- python用opencv读取图片并转为灰度图
- faked 是一个在前端开发中用于模拟服务端接口的模块.zip
- MPSK调制解调MATLAB仿真源代码
- IOT管理系统(vue-element-ui+spring boot前后端分离开发).zip
- Android开发基础入门搭建helloword搭建
- gatsby前端框架,一键部署到云开发平台.zip
- beancount-gs 前端页面,使用 react 开发.zip