什么是 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
相关文章
- linux驱动开发--字符设备:通过cdd_cdev结构中的led变量区分是哪个节点,private_data使用
- [kernel]如何深度裁剪、定制Linux Kernel
- Linux安全配置
- Linux下防火墙iptables设置
- Linux里如何查找文件内容
- linux中FTP自动备份VPS脚本
- Linux中RM快速删除大量文件/文件夹方法
- linux 安装mysql
- Docker 基础技术之 Linux cgroups 详解
- linux 如何查找io的进程
- 如何在linux下开启FTP服务
- linux fedora35 zsh & oh-my-zsh 的配置与使用
- 如何在Windows,Linux下查看JAVA端口占用情况(阿里)
- Linux如何查看ip地址
- 如何在windows上安装centos单系统,以及安装事项和 centOS Linux和centOS Stream区别
- L61.linux命令每日一练 -- 第九章 Linux进程管理命令 -- renice和nohup
- L52.linux命令每日一练 -- 第八章 Linux磁盘与文件系统管理命令 -- resize2fs和fsck
- 如何在 Linux 中检查打开的端口
- Ubuntu如何下载geo的数据 Linux下载geo R安装Cairo
- 宝塔Linux面板如何设置WeCenter伪静态规则?
- Linux 内存泄漏了,我该如何定位和处理?
- Linux内核Thermal框架详解四、Thermal Core(3)
- Linux如何将文件中的多行转换成1行
- Linux下CMake简明教程(五)正规一点的组织结构
- Linux编译 --prefix和DESTDIR用法(十)
- [ Linux ] 如何在CentOS、RedHat和Ubuntu系统下检查是否安装过某个软件包