什么是 Initrd 映像?如何在 Linux 中创建 initrd 映像

2024-03-18 08:48
文章标签 linux 创建 映像 initrd

本文主要是介绍什么是 Initrd 映像?如何在 Linux 中创建 initrd 映像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux 系统的引导过程涉及多个阶段。其中包括 BIOS 初始化、读取 MBR、引导加载程序、内核初始化和 init 进程。

initrd(初始 ramdisk)在引导系统中起着非常重要的作用。本教程讨论 initrd ramdisk 以及在需要重新创建它时如何创建它。

GRUB 引导加载程序和 initrd

引导加载程序是在启动过程中运行的第一个软件程序。它负责引导操作系统。Bootloader 将内核加载到内存中,内核挂载根分区,以便启动第一个进程,即 init 进程。让我们看一下引导加载程序为这些任务执行的命令:

root (hd0,0)

kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00

initrd /initrd-2.6.18-238.el5.img

第一个命令“root (hd0,0)”告诉引导加载程序内核映像存在于硬盘 hd0 的第一个分区(即 hd0,0)。这是内核映像的位置。

第二个命令是内核映像本身。在这种情况下,它是“/vmlinuz-2.6.18-238.el5”。传递给该命令的参数是 ro 和 root。ro 指定只读模式,root 告诉根文件系统所在的分区。内核以只读模式挂载这个根分区。

第三个命令是 initrd 的位置。现在要了解 initrd 是什么,让我们看一下内核在挂载根分区时面临的一个问题。

鸡蛋模块问题

我们刚刚看到内核必须以只读模式挂载根分区。但是根文件系统可以位于具有以下一项或多项功能的分区上:

• Logical Volume Management (as in our case).

• Software RAID.

• NFS.

• Encrypted partition.

• SCSI controller support.

内核需要这些设备的模块,因为它们没有编译到内核本身中。因此,内核将在运行时为这些设备加载模块。这些模块存在于“/lib/modules/”目录中。该目录存在于根文件系统本身上,并且尚未安装根分区(这就是全部内容)。那么,内核如何访问用于挂载根分区本身的根分区的模块(不挂载它)?

这里 initrd 来拯救。initrd ramdisk 包含挂载根分区所需的模块。此 initrd 驻留在内核映像所在的同一分区上。因此内核将 initrd 加载到内存中,访问模块并以只读模式挂载根分区。

创建 initrd

当文件系统硬件或软件发生变化时,我们需要重新创建 initrd。initrd 可以使用“mkinitrd”命令创建。initrd 的位置是 /boot 目录。为其创建 initrd 映像的内核版本需要作为参数传递给 mkinitrd 命令。可以使用uname 命令检查当前内核版本。

# uname -r

2.6.18-238.el5

我们可以使用此命令通过命令替换传递所需的参数:

# mkinitrd /boot/initrd-latest.img $(uname -r)

$(uname -r) 将替换命令“uname -r”的输出。

initrd 映像是压缩映像。您可以使用文件命令检查这一点:

# file /boot/initrd-latest.img

/boot/initrd-latest.img: gzip compressed data, from Unix, last modified: Fri Aug 3 10:47:47 2012, max compression

这篇关于什么是 Initrd 映像?如何在 Linux 中创建 initrd 映像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/821821

相关文章

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti