什么是ramfs?

ramfs是一个非常简单的文件系统,它将Linux的磁盘缓存机制(页面缓存和dentry缓存)导出为一个动态可调整大小的基于ram的文件系统。
Linux通常将所有文件缓存在内存中。从后备存储(通常是挂载文件系统的块设备)读取的数据页被保留下来,以防再次需要,但标记为干净(可自由),以防虚拟内存系统需要内存做其他事情。类似地,写入文件的数据一旦写入后备存储,就会被标记为干净,但会保留下来用于缓存,直到VM重新分配内存。类似的机制(dentry缓存)大大加快了对目录的访问速度。
对于ramfs,没有后备存储。写入ramfs的文件像往常一样分配条目和页面缓存,但是没有地方可以写入它们。
这意味着页面永远不会被标记为干净的,因此当VM寻求回收内存时,它们无法被释放。
实现ramfs所需的代码量很少,因为所有的工作都是由现有的Linux缓存基础设施完成的。基本上,您将把磁盘缓存挂载为文件系统。正因为如此,ramfs不是一个可通过menuconfig删除的可选组件,因为节省的空间可以忽略不计。

ramfs and ramdisk

旧的“ramdisk”机制在ram区域之外创建一个合成块设备,并将其用作文件系统的后备存储。这个块设备的大小是固定的,因此挂载在它上面的文件系统的大小也是固定的。使用ram磁盘还需要不必要地将内存从假块设备复制到页面缓存中(并将更改复制回来),以及创建和销毁dentry。此外,它还需要一个文件系统驱动程序(比如ext2)来格式化和解释这些数据。

与ramfs相比,这浪费了内存(和内存总线带宽),为CPU创建了不必要的工作,并污染了CPU缓存。(有一些技巧可以通过玩弄页表来避免这种复制,但它们令人不快地复杂,而且结果证明和复制一样昂贵。)更重要的是,ramfs所做的所有工作都必须发生,因为所有文件访问都要经过页面和dentry缓存。RAM磁盘是完全不必要的;Ramfs在内部要简单得多。

ramdisk半过时的另一个原因是,环回设备的引入提供了一种更灵活、更方便的方式来创建合成块设备,现在是从文件而不是从内存块创建。

ramfs and tmpfs

ramfs的一个缺点是,您可以一直向它写入数据,直到填满所有内存,并且VM无法释放它,因为VM认为应该将文件写入后备存储(而不是交换空间),但是ramfs没有任何后备存储。因此,应该只允许root(或受信任的用户)对ramfs挂载进行写访问。

创建了一个名为tmpfs的ramfs衍生物,以增加大小限制,并能够将数据写入交换空间。可以允许普通用户对tmpfs挂载进行写访问。

什么是rootfs?

Rootfs是ramfs(或tmpfs,如果启用了的话)的一个特殊实例,它总是存在于2.6系统中。不能卸载rootfs的原因与不能终止init进程的原因大致相同;对于内核来说,不需要专门的代码来检查和处理空列表,只需要确保某些列表不会变为空,这样做更小、更简单。

大多数系统只是在rootfs上挂载另一个文件系统,并忽略它。ramfs的空实例占用的空间量很小。

如果启用了CONFIG_TMPFS, rootfs将默认使用tmpfs而不是ramfs。要强制使用ramfs,请在内核命令行中添加"rootfstype=ramfs"。

什么是initramfs?

initramfs是一个可以编译进内核的根文件映像,在Linux在启动init进程之前,用来准备系统,挂载真正的root文件系统.

所有2.6版本的Linux内核都包含一个gzip的“cpio”格式的存档文件,在内核启动时将其提取到rootfs中。在提取之后,内核检查rootfs是否包含一个文件“init”,如果是,它将其作为PID1执行。如果找到了,这个init进程负责将系统启动,包括定位和挂载真正的根设备(如果有的话)。如果在将嵌入的cpio归档文件提取到rootfs中后,它不包含init程序,那么内核将使用旧代码来定位和挂载根分区,然后从中执行/sbin/init的某些变体。
参考

ramfs, rootfsinitramfs相关推荐

  1. 嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs

    Linux支持多种文件系统,包括ext2.ext3.vfat.ntfs.iso9660.jffs.romfs和nfs等,为了对各类文件系统 进行统一管理,Linux引入了虚拟文件系统VFS(Virtu ...

  2. 精通init ramfs构建

    一.init ramfs是什么 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件.当内核启动时,会 从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootf ...

  3. nuc972的ramfs的配置yaffs2,ubi文件系统

    按照技术支持的推荐,使用ramfs文件系统.那么就可以在uboot的nuc970_evb.h中将JEFS  yaffs ubi 的相关支持去掉就可以了.这样理应能减少很大部分的uboot大小.剩下就是 ...

  4. loading linux img2a,嵌入式Linux中initrd的应用--浅析ramdisk、ramfs、initrd和initramfs

    看到这样的一句话很让我费解,因为似乎我理解为这样做能够提高一点嵌入式linux启动速度,我对此是非常地感兴趣 自此,就开始了我的解惑之旅 首先需要知道的是ramdisk和ramfs http://ww ...

  5. ramfs, rootfs and initramfs

    Ramfs.rootfs 和initramfs_RToax-CSDN博客Ramfs, rootfs and initramfs - The Linux Kernel documentationhttp ...

  6. Ramfs、rootfs 和initramfs

    Ramfs, rootfs and initramfs - The Linux Kernel documentationhttps://www.kernel.org/doc/html/latest/f ...

  7. linux中的rootfs/initrd/ramfs/initramfs

    什么是ramfs? ramfs是空间规模动态变化的RAM文件系统.它非常简单,是用来实现Linux缓存机制(缓存page cache and dentry cache)的文件系统. 通常情况下,Lin ...

  8. Linux下tmpfs与ramfs的区别

    转自:http://www.linuxidc.com/Linux/2012-11/74356.htm ramfs是Linux下一种基于RAM做存储的文件系统.在使用过程中你就可以把ramfs理解为在普 ...

  9. 介绍-fs、ramdisk、ramfs、tmpfs、initramfs和rootfs

    看了一些关于Linux根文件系统.initramfs的帖子和文档,这里写一下自己的理解. 1.文件系统fs 什么是文件系统,我自己的理解就是数据的组织结构.要理解一个概念,首先应该知道为什么会\提出这 ...

最新文章

  1. 登录加密的前后端测试
  2. JAVA数字处理类使用2
  3. JS根据日期比较显示时分或者月日
  4. 漫画:什么是二叉堆?(修正版)
  5. matlab_ga(),matlab遗传算法ga函数
  6. 计算机加一块硬盘,老电脑卡顿不一定没救了 加一块SSD就能焕发新生
  7. Centos启动卡住,starting auditd: [failed]
  8. Python编程 | 新手必会的 9 个 Python 技巧
  9. QT5 串口收发实例代码
  10. php连接虚拟机中mysql数据库吗,PHP连接MySQL数据库的三种方式
  11. vim 配置_一步步配置VIM(3)-与latex结合
  12. oracle装一半报错要卸掉,OpenSUSE下oracle11gR2的安装卸载
  13. 测试有道:微软测试技术心得 1
  14. 2019年10月江苏计算机二级C语言编程题解析
  15. 网易设计师:交互设计要承担的8大工作职能
  16. Android性能优化之内存优化浅析
  17. WIN7安装官方漏洞补丁,错误代码0x80240037的解决方法
  18. PDF删除水印怎么在PDF编辑软件内执行
  19. 16届智能车竞赛单车拉力国二经验分享
  20. F1C100S电阻触摸屏驱动

热门文章

  1. MDT CustomSettings.ini Tips Tricks
  2. 阿里云轻量级GPU计算型vgn6i云服务器配置性能详解
  3. 操作系统LAB1实验报告
  4. 海量数据去重之SimHash算法简介和应用
  5. getInputStream/getReader() has already been called for this request
  6. android 消息轮训,Android消息机制Handler,有必要再讲一次
  7. Spring5的IOC容器
  8. Latex 插入列举条目、编号item及间隔调整
  9. TypeScript报错信息表(备注)
  10. java rmi tcp_Tomcat启动失败报错[RMI TCP Connection(4)-127.0.0.1] [RMI TCP Connection(3)-127.0.0.1]...