initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, bootloader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。第一阶段启动的目的是为第二阶段的启动扫清一切障爱,最主要的是加载根文件系统存储介质的驱动模块。我们知道根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核会多么庞大、臃肿。
  
  initrd.img是Linux启动过程中很重要的一个文件,(如果你编译内核时将一部分功能编译为可加载模块。如果系统的一些设备的驱动编译为可加载模,那么启动时如果没有指定INITRD=/path_to_initrd.img,那么系统启动或者会失败,或者启动后会有设备无法使用(像网卡或者其它设备)。如果没指定initrd.img或者指定的initrd.img中并没有包含正确的驱动模块,则系统启动时会挂起,并报告"kernel panic: VFS: Unable to mount root fs on 08:06"的错误。)
  
    它把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新mount到其他设备上。
   initrd.img不像通常的以.img为扩展名的ramdisk cramfs文件。它是经过用gzip -9进行压缩过的ramdisk文件。所以,需要先解压缩然后在mount,否则会出错。以下是操作过程。 
  首先将initrd.img拷贝到操作目录下:
  cp initrd.img /work/initrd.gz
  然后解压缩:
  gunzip initrd.gz
  解压后可以看到一个没有gz后缀的文件initrd
  直接mount该文件:
  mount -o loop initrd /mnt 
  mount成功后,/mnt目录中将能看到initrd.img中的所有文件及目录
  在work下建一个目录initrd
  将mnt下的文件都拷贝到initrd下
  cp /mnt/* ./initrd
  现在就可以对目录里的文件进行修改了。
  修改完成后
  mkcramfs initrd my.initrd
  gzip -9 my.initrd my.initrd.gz
  再将生成的文件拷贝到/boot目录下即可
  cp my.initrd.gz /boot/initrd.img
  
  如果自己根据内核来制作initrd.img,如下
Decide on the RAM disk size that you want. Say 8 MB for this example.
dd if=/dev/zero of=imitrd.img bs=1k count=8192
b) Make a filesystem on it. Say ext2fs for this example.
$mke2fs -F -vm0 initrd.img
/*看有的帖子上说是这样制作initrd文件系统的,不过个人以为下面那个才对,没试验过!*/

 cd /lib/modules/kernel_version
  mkinitrd /tmp/initrd-kernel_version.img kernel_version
  cp /tmp/initrd-kernel_version.img /boot
  
  这是一个grub.conf的内容,可以修改一下!
    default=1 
    timeout=10 
    splashimage=(hd0,6)/grub/splash.xpm.gz 
    title Psyche (2.4.18-14 standard)//在启动菜单里显示的名字 
    root (hd0,6) //在E盘
    kernel /vmlinuz-2.4.18-14.standard ro root=/dev/hda8  
    initrd /initrd-2.4.18-14.standard.img //改成initrd-kernel_version.img
    title Windows xp 
    rootnoverify (hd0,0) 
    chainloader +1

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

我想做一个U盘启动的linux,照处面的步骤进行:
建立initrd.img文件
# mkdir -p /mnt/initrd 
# cd /tmp 
# mkinitrd /tmp/initrd.gz 2.6.18 
2.解压initrd.img文件,修改启动脚本linuxrc 
# gunzip initrd.gz 
# mount -o loop /tmp/initrd /mnt/initrd
到这步就出现:mount: you must specify the filesystem type
怎样指定文件系统都无法mount上去,
我也试过生成2.6.18.img文件,
再mv 2.6.18.img 2.6.18.gz
然后再用gunzip解压,也是不行。
到底要怎样才行呢?

你的文件是cpio文件 不是影像文件
你可以用 file initrd看下 文件类型就可以了
从 Fedora Core 3 开始,默认的 initrd 映像变成了一个经过压缩的 cpio 归档文件。我们不用再使用 loop 设备来将 initrd 作为压缩映像进行挂载,而是可以将其作为 cpio 归档文件来使用

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

cpio –idcmv < 文件名解压

制作cpio格式initrd
非常简单:
1. find . | cpio -c -o > initrd.img
2. gzip initrd.img
3. mv initrd.img.gz initrd.img

要注意,cpio 的-c选项别忘了,否则initrd不能正确挂载。

initrd.img相关相关推荐

  1. 详解Linux Initrd

    在Linux操作系统中,有一项特殊的功能--初始化内存盘INITRD(INITial Ram Disk)技术,而且内核支持压缩的文件系统映像.有了这两项功能,我们可以让Linux系统从小的初始化内存盘 ...

  2. 详解linux的initrd

    作者: easylife     http://www.mike.org.cn/blog/index.php?load=read&id=635 在Linux操作系统中,有一项特殊的功能--初始 ...

  3. Linux中的Ramdisk和Initrd

    Ramdisk简介 先简单介绍一下ramdisk,Ramdisk是虚拟于RAM中的盘(Disk).对于用户来说,能把RAM disk和通常的硬盘分区(如/dev/hda1)同等对待来使用,例如: re ...

  4. Ubuntu 8.04 Linux系统下面编译更新内核版本

    在 VirtualBox 虚拟机上面测试的,ubuntu 8.04系统. 1. 下载内核源代码 http://www.kernel.org/ 下载The latest stable version o ...

  5. linux内核生成img,linux内核探索:定制自己的initrd.img-转载并修改

    1. 什么是initrd.img,它有什么用? initrd.img是Linux启 动过程中很重要的一个文件,如果你编译内核时将一部分功能编译为可加载模块.如果系统的一些设备的驱动编译为可加载模,那么 ...

  6. linux相关面试题总结!

    选择题 1 在终端下输入mount -a命令的作用是:C A 强制进行磁盘检查 B 显示当前挂载的所有磁盘分区的信息 C 挂载/etc/fstab文件中的除noauto以外的所有磁盘分区 D 以只读方 ...

  7. 【转载】linux2.6内核initrd机制解析

    题记 很久之前就分析过这部分内容,但是那个时候不够深入,姑且知道这么个东西存在,到底怎么用,来龙去脉咋回事就不知道了.前段时间工作上遇到了一个initrd的问题,没办法只能再去研究研究,还好,有点眉目 ...

  8. linux 下的 initrd ramdisk

    在Linux操作系统中,有一项特殊的功能--初始化内存盘INITRD(INITial Ram Disk)技术,而且内核支持压缩的文件系统映像.有了这两项功能,我们可以让Linux系统从小的初始化内存盘 ...

  9. linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析

    1.什么是 Initrdinitrd 的英文含义是 boot loaderinitialized RAM disk,就是由 boot loader 初始化的内存盘.在 linux内核启动前, boot ...

最新文章

  1. tensorflow-gpu 常用网址
  2. CountDownLatch——常用并发工具类
  3. 【阿里云课程】神经网络:从生物学机制到全连接神经网络的局限性
  4. web浏览器_vs2019使用webview2开发web浏览器 - 左正
  5. install_mysql57.sh
  6. android ButterKnife的简单使用
  7. 不可变集合相比可变集合_简单的基准测试:不可变集合VS持久集合
  8. project 打印的时候上面的表格和下面的图例中间有个很大的空白,这块东西怎么能去掉呢?
  9. ICANN拟删旧国别域名 含英国gb苏联su塞黑cs
  10. python 校验邮箱格式、手机号格式
  11. Excel中数据截取
  12. 使用空驱动消除设备管理器里面的未知设备
  13. KILE 报 contains an incorrect path. 错误
  14. python + 数学公式 + 图像 表白 LOVE YOU❤
  15. modelsim 无objects窗口 的解决方法
  16. Web安全基础一漏洞产生原理漏洞探测(持续更新)
  17. 利用python如何抓取微博评论?
  18. c语言中如果产量的隐藏类型是,如果随着产量的增加,生产函数首先表现出边际产量增加,然后表现出边际产量递减,那么相应的边际成本曲线将 答案:是U形的...
  19. Python多进程写Kafka
  20. 《博客服务自律公约》现征求意见了!

热门文章

  1. 【数据结构与算法】之深入解析“删除链表的倒数第N个结点”的求解思路与算法示例
  2. @1.0.0 dev: `webpack-dev-server --inline --progress --config
  3. 2018/Province_Java_C/2/猴子分香蕉
  4. 2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - B. 跳蚱蜢
  5. 【机器视觉】 measure_pairs算子
  6. 【Linux】一步一步学Linux——dircolors命令(239)
  7. 【Linux】一步一步学Linux——users命令(101)
  8. 【Linux】一步一步学Linux——rev命令(57)
  9. 【Linux】一步一步学Linux——touch命令(33)
  10. 【Linux网络编程】浅谈 TCP 三次握手和四次挥手