`

initrd的作用

 
阅读更多

initrd 是一个 ram disk 的 image. 一般是压缩过的.它存在的主要目的是在内核启动时加载它,安装其中的驱动.
总的来说分这几步
a.内核启动时加载 initrd img, mount 为 / 
b.依 /linuxrc 的指令执行, 一般有扫描系统硬件,从 当前文件系统中找到驱动安装之.
c.挂载系统中真正的 /

细说就是:
开机 bios 代电自检, 依 bios 指定的启动盘(如 hd1), 找到 头 416 字节引导程序,执行之(顺便说如果是lilo引导linux的话, 在#lilo 时就写入了这416字节,但仅这416字节是不够用来引导 linux 的,因此叫它 stage1 还有一个 stage2 就是我们看到的选系统的 lilo 菜单部分), 然后出现 选系统的菜单 选了 linux 后, lilo 依 liloconf 中指定的位置找到 内核 启动之,之后 initrd 内亮登场:
1.内核依 指定的 initrd 文件加载它, 解压之到 /etc/ram0 [内存] 中(一般initrd 采用 bz bz2 算法,内核是知道如何处理的)
2. mount ram0 作为 / 文件系统(可能是内核支持的ext2),这样做的目的是为了读取 initrd 中的内容.
3.initrd 文件系统一般有一个 /linuxrc 的文件,一般是一个 sh 脚本, kernel 执行之
--- 以下的步骤可能是脚本中指令,这个我没有仔细再研究过
4. 扫描系统,发现新硬件,在 initrd 文件系统中找到相应驱动安装之.
5. 加载真正的 / 文件系统, 而将原有的 / 系统 (initrd 解压后对应的) 如下处理:
a.如果真正的 / 文件系统下有 /initrd 这个目录,则由原来的/ mount 到此处
b.没有则umount 掉(此时如果有进程还在用initrd 中的文件,会报错)
6.找到 /etc/init 执行之,依 /etc/inittab 初始化系统 
到此initrd 使令结束

initrd 是编译内核时可选的功能,但为什么还要搞出一个 initrd 来,把所有驱动编译进内核不就行了?
我考虑是这样的,如何是发行版的内核,它要适应不同的硬件,如果把所有硬件驱动编译到内核是不现实的,因此只有一个适当大小的内核[只有适当的一些驱动如 ext2等], 它在启动时会得用 initrd 来实现对内核未支持的驱动的加载.这样,一个内核+不同的intird 可以适当大量的硬件

比如,你的 / 文件系统是 ext3 的,但内核未必支持 ext3 ,这样就可能通过 initrd 的方式加载了 ext3
的驱动,然后再mount 你的 / 就OK了. 设想如果此时没有 initrd (内核又不支持ext3),一定遇到
kernel panic.

inintrd 单独拿出来压缩成一个文件和内核放一起,而不是 你真正 / 文件系统中的一个 目录,可能是由于 前者结构上更紧凑和不容易被用户更改,何况遇到 需要在 initrd 中加载文件系统驱动时,后者是无能为力的.(而 initrd 一般采用 ext2 ,kernel 是支持的)

------------------------------------------

initrd能做的事情很多,initrd就是一个微型的linux系统,就象前面说的,它可以解决驱动的问题,经过了grub引导内核,再未执行init进程前就开始读取initrd
所以可以在initrd中加载系统所需要的特殊驱动。以供init继续引导系统
另外在liveCD中也是非常重要的,负责检查出将光盘挂载哪里,进行压缩文件系统的解压初始化,加载特殊模块,然后通过pivot_root chroot 将系统挂载到正常的根分区,开始init引导。
一般自己编译后的内核是不需要initrd的,但是发行版则可能需要它。
可以通过下面的命令挂载上你的initrd,其中linuxrc就是initrd的启动文件
看看它都有什么内容就知道你的initrd都做了什么。
cat initrd.img | gunzip > /tmp/myinitrdfs
mkdir /mnt/tmp
mount -o loop -t ext2 /tmp/myinitrdfs /mnt/tmp

Mandrakelinux 10.1O的initrd.img中的linuxrc:
#!/bin/nash

echo "Loading jbd.ko module"
insmod /lib/jbd.ko
echo "Loading ext3.ko module"
insmod /lib/ext3.ko
echo Mounting /proc filesystem
mount -t proc /proc /proc
echo Mounting sysfs
mount -t sysfs none /sys
echo Creating device files
mountdev size=1M,mode=0755
echo starting udev
udevstart
echo -n /sbin/hotplug > /proc/sys/kernel/hotplug
echo Creating root device
mkrootdev /dev/root
echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
echo 0x0100 > /proc/sys/kernel/real-root-dev
pivot_root /sysroot /sysroot/initrd
umount /initrd/sys
umount /initrd/proc
echo Initrd finished
可见插入了两个模块
echo "Loading jbd.ko module"
insmod /lib/jbd.ko
echo "Loading ext3.ko module"
insmod /lib/ext3.ko
如果正在使用ext3文件系统,没有这个initrd,就无法正常引导根系统了。

 

分享到:
评论

相关推荐

    initrd映像文档的作用和制作

    **initrd映像文档的作用** `initrd`全称是Initial RAM Disk,它是一个临时的根文件系统,用于系统引导期间加载必要的驱动程序和执行早期的初始化任务。在Linux操作系统中,`initrd`是一个非常重要的组件,尤其在...

    initrd 文件系统详解

    initrd 的主要作用是提供一个供 Linux 内核初始化的环境,以便 Linux 系统能够正确地启动。initrd 文件系统的引入解决了 Linux 系统在启动过程中的两个主要问题:一是提供一个可靠的文件系统,以便 Linux 内核可以...

    grub启动内核和initrd.img

    同时,我们也深入理解了`initrd.img`的作用及其制作方法,这对于进一步探索Linux系统的启动过程以及系统定制具有重要意义。最后,我们还了解了GRUB和Linux对于硬盘设备的不同表示方式,这对于正确配置GRUB及理解启动...

    官方下载initrd+vmlinuz打包

    在Linux操作系统,特别是Ubuntu系列中,`initrd`和`vmlinuz`是两个至关重要的文件,它们在系统启动过程中起到关键作用。本篇文章将详细解释这两个文件的含义、功能以及它们如何协同工作来完成系统的启动。 `initrd`...

    vmlinuz.txt与initrd 用于windows中安装linux

    在Linux操作系统中,vmlinuz和initrd(或initramfs)是两个至关重要的组件,它们在Linux系统启动过程中起着核心作用。vmlinuz是一个压缩的内核映像,包含了Linux内核的主要部分,而initrd则是一个临时的根文件系统,...

    linux中ramdisk和initrd的区别

    6. **灵活性**:由于tmpfs的存在,Ramdisk的作用已经减弱,而Initrd仍然是启动过程中的重要工具,特别是在支持多种硬件平台的系统中。 在嵌入式系统移植过程中,理解Ramdisk和Initrd的工作原理和区别非常重要,因为...

    bzImage+initrd.gz

    总结来说,`bzImage`和`initrd.gz`在Linux启动中起到至关重要的作用。`bzImage`承载了内核的执行代码,而`initrd.gz`则提供了启动时的临时环境,确保内核能正确地初始化硬件和挂载主根文件系统。在内核版本3.10.108...

    Debian6.0.7硬盘引导(initrd.gz、vmlinuz)

    在安装或维护Debian系统时,了解如何进行硬盘引导以及相关文件initrd.gz和vmlinuz的作用至关重要。 硬盘引导是指Linux系统从硬盘启动的过程,这是系统启动的关键步骤。在Debian6.0.7中,这个过程涉及到几个核心组件...

    debian5.02的vmlinuz和initrd.gz

    标题中的"debian5.02的vmlinuz和initrd.gz"指的是Debian 5.02(代号Lenny)操作系统的引导加载组件。...理解这两个文件的作用和功能对于任何想要部署或维护Debian系统的IT专业人员来说都是非常重要的。

    定制initrd,网络安装Linux.pdf

    3. initrd的作用 initrd(initial ramdisk)是一个小型的Linux操作系统,它的主要功能是在操作系统启动之前载入一些必要的可执行程序和系统文件,包括一些附加的设备驱动。然后,将挂载文件系统,建立设备文件所需...

    Linux initial RAM disk (initrd) overview

    #### initrd的作用 initrd包含了最少的目录和可执行文件集来实现这一目标,例如`insmod`工具用于将内核模块安装到内核中。对于桌面或服务器Linux系统而言,initrd是一个短暂存在的文件系统,其生命周期很短,仅作为...

    Linux2.6 内核的 Initrd 机制解析

    1. Initrd的概念与作用 Initrd是一个由引导加载器(boot loader)加载到内存中的小型文件系统,它包含了一些必要的驱动程序和初始化脚本。在内核启动时,initrd会作为临时的根文件系统被挂载,以便在加载真正的根...

    BT4汉化补丁 BT4 swap_256Mb fs_512 initrd

    BT4汉化补丁是针对BackTrack 4操作系统的一个重要更新,主要目的是为了改善系统对中文语言的支持。...在安装和使用这个补丁时,确保了解每个组件的作用并遵循正确的操作流程,将有助于更好地利用BackTrack 4的功能。

    Linux系统内存磁盘初始化技术详细解析

    1. initrd的作用: - 在系统启动的第二阶段,initrd被内核挂载,提供了一个包含基本驱动和程序的环境,这些驱动和程序可以用来加载和初始化硬件,特别是那些在内核编译时未静态编入的模块。 - 对于桌面和服务器...

    Linux2.6 内核机制解析

    它的主要作用是在内核访问真正的根文件系统之前提供一个临时的文件系统,以便加载驱动程序和执行其他启动任务。通过使用Initrd,内核可以在启动时保持较小的大小,避免将所有硬件驱动都编译进内核,从而提高了系统的...

    linux 4.8.2内核根目录

    总结起来,Linux 4.8.2内核根目录的研究涉及到对操作系统核心组件的理解,特别是initrd或initramfs在系统启动中的关键作用。通过深入学习和优化这部分,我们可以更好地掌握如何处理复杂硬件环境,提升系统的启动速度...

    BusyBox练习资料.rar

    在这个过程中,BusyBox起到了关键作用。它提供了许多基本的UNIX命令,如ls、mkdir、mount等,这些都是initrd中必不可少的工具。通过精简的BusyBox实现,可以减小initrd镜像的大小,加快启动速度。 学习如何创建和...

    linux启动过程分析

    6. initrd的作用 initrd文件是一个小的文件系统,用于加载更多的硬件支持和完成系统初始化。initrd文件可以在GRUB的配置文件中指定,并且可以被用于加载特殊的硬件驱动程序。 Linux启动过程是一个复杂的过程,涉及...

    linux系统裁剪指南

    下面将详细讨论内核定制以及initrd在系统启动过程中的作用。 一、Linux内核定制 1. **内核编译选项**:内核定制通常涉及选择编译时的配置选项。这包括启用或禁用某些硬件支持、裁剪不必要的模块,以减少内核大小并...

Global site tag (gtag.js) - Google Analytics