1.什么是 Initramfs

在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。然后执行 /sbin/init程序完成系统的后续初始化工作。

 2.Linux2.6 内核对 Initramfs 的处理流程

(1. boot loader 把内核以及 Initramfs 文件加载到内存的特定位置。
     (2. 内核判断Initramfs的文件格式,如果是cpio格式。
     (3. 将Initramfs的内容释放到rootfs中。
     (4. 执行Initramfs中的sbin/init文件,执行到这一点,内核的工作全部结束,完全交给init文件处理。

3.  cpio格式的Initramfs制作方法

假设当前目录位于准备好的Initramfs文件系统的根目录下
         find . | cpio -o -Hnewc | gzip - > ../initrd.img.gz

解压:
        假设当前目录就是要解压后的目录   gunzip | cpio -idmv < ../initrd.img

4.  挂载rootfs文件系统

rootfs是基于内存的文件系统,所有的操作都是在内存中完成,没有实际的存储设备,不需要设备驱动程序的参与。linux系统启动阶段使用rootfs文件系统,当磁盘驱动程序与磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。

所有的2.6版本linux内核都有一个特殊的文件系统rootfs,是内核启动的初始根文件系统,initramfs的文件会复制到rootfs。如果把initramfs比作种子,那么rootfs就是它生长的土壤。大部分linux系统正常运行后都会安装另外的文件系统,然后忽略rootfs。
        rootfs是ramfs文件系统的一个特殊实例。ramfs是一种非常简单的文件系统,是基于内存的文件系统。ramfs文件系统没有容量大小的限制,它可以根据需要动态增加容量。
    ramfs直接利用了内核的磁盘高速缓存机制。所有的文件的读写数据都会在内存中做高速缓存(cache),当系统再次使用文件数据时,可以直接从内存中读写,以提供系统的I/O性能。高速缓存中的写入数据会在适当的时候回写到对应的文件系统设备(如磁盘等)中,这时它的状态就标识为clean,这样系统在必要时可以释放掉这些内存。ramfs没有对应文件系统设备,所以它的数据永远都不会回写回去,也就不会标识为clean,因此系统也永远不会释放 ramfs所占用的内存。
        因为ramfs直接使用了内核已有的磁盘高速缓存机制,所以它的实现代码非常小。也由于这个原因,它可能不停的动态增长直到耗尽系统的全部内存。

最新文章

  1. Spring 自带的定时任务
  2. 有关DTCoreText无法加载网络图片及应用问题
  3. 安全生产应急救援指挥系统之GIS一张图-flex/java
  4. LoadRunner使用技巧-IP欺骗的使用
  5. git和github
  6. lightoj 1074 spfa判断负环
  7. fusioncharts图例(legend)属性
  8. Chapter 4: Tomcat Default Connector
  9. Android Launcher 详解
  10. JAVA 基础 重新开始
  11. [python] 如何用python操作Excel
  12. Flex Robotlegs
  13. ASP.NET MVC AJAX的调用示例
  14. Echarts---柱状图实现
  15. Java爬虫----有道翻译初步
  16. 【BZOJ3993】星际战争(网络流,二分答案)
  17. LeetCode算法题-Set Mismatch(Java实现)
  18. June. 24th 2018, Week 26th. Sunday
  19. Apache Spark 2.2.0新特性介绍(转载)
  20. vue的高阶组件

热门文章

  1. mysql常用引擎
  2. 洛谷 题解 P2280 【[HNOI2003]激光炸弹】
  3. linux安装mysql(yum)
  4. jquery(第一章)认识jquery
  5. 【AtCoder】AGC008
  6. linux安装java jdk
  7. Scala学习二十二——定界延续
  8. c# internal关键字
  9. SIP协议入门:初学者必须明白的几个重要概念
  10. 封装AJAX库(参考JQ)