学习啦>学习电脑>操作系统>Linux教程>

initrd与initramfs区别

时间: 若木635 分享

学习啦在线学习网   initrd与initramfs

  Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。

  initrd:

学习啦在线学习网   ram disk是一个基于ram的块设备,因此它占据了一块固定的内存,而且事先要使用特定的工具比如mke2fs格式化,还需要一个文件系统驱动来读写其上的文件。

  如果这个disk上的空间没有用完,这些未用的内存就浪费掉了,并且这个disk的空间固定导致容量有限,要想装入更多的文件就需要重新格式化。

  由于Linux的块设备缓冲特性, ram disk上的数据被拷贝到page cache(对于文件数据)和dentry cache(对于目录项), 这个也导致内存浪费.

  initramfs:

学习啦在线学习网   最初的想法是Linus提出的: 把cache当作文件系统装载。

  他在一个叫ramfs的cache实现上加了一层很薄的封装,其他内核开发人员编写了一个改进版tmpfs,这个文件系统上的数据可以写出到交换分区,而且可以设定一个tmpfs装载点的最大尺寸以免耗尽内存。initramfs就是tmpfs的一个应用。

  优点:

  (1)tmpfs随着其中数据的增减自动增减容量.

  (2)在tmpfs和page cache/dentry cache之间没有重复数据.

学习啦在线学习网   (3)tmpfs重复利用了Linux caching的代码, 因此几乎没有增加内核尺寸, 而caching的代码已经经过良好测试, 所以tmpfs的代码质量也有保证.

  (4)不需要额外的文件系统驱动.

学习啦在线学习网   另外, initrd机制被设计为旧的"root="机制的前端,而非其替代物,它假设真正的根设备是一个块设备, 而且也假设了自己不是真正的根设备,这样不便将NFS等作为根文件系统。最后/linuxrc不是以PID=1执行的, 因为1这个进程ID是给/sbin/init保留的。 initrd机制找到真正的根设备后将其设备号写入/proc/sys/kernel/real-root-dev, 然后控制转移到内核由其装载根文件系统并启动/sbin/init。

  initramfs则去掉了上述假设, 而且/init以PID=1执行, 由init装载根文件系统并用exec转到真正的/sbin/init, 这样也导致一个更为干净漂亮的设计。

initrd与initramfs区别

initrd与initramfs Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不
推荐度:
点击下载文档文档为doc格式

精选文章

  • 什么是initrd
    什么是initrd

    什么是initrd initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。 在 linux内核启动前, boot loader 会将存储介质中的 initrd 文件加

  • 如何解决The UTS Release version in include/linux/version.h
    如何解决The UTS Release version in include/linux/version.h

    学习啦在线学习网The UTS Release version in include/linux/version.h does not match current version 问题 打开你的kernel里的version_vars.mk,位于 /linux-2.6.33.2/debian/ruleset/misc/version_vars.mk 目录下。

  • 如何最简内核配置
    如何最简内核配置

    学习啦在线学习网最简内核配置 怎样得到一个最简内核配置呢? (1)首先,用内核的 allnoconfig 配置目标,得到一个最最基本的内核配置。即,执行下面的命令: make allnoconfig

  • 如何编译内核及制作RPM包
    如何编译内核及制作RPM包

    学习啦在线学习网编译内核及制作RPM包 编译步骤 第一步: # cd /home # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.5.tar.gz # tar -zxvf linux-2.6.32.5.tar.gz -C /usr/src # cd /usr/src # l

75354