📂系统:ramdisk 与 ramfs

type
status
date
slug
summary
tags
category
icon
password
对于 ramdisk 与 ramfs,困扰了我很久,这其中有部分技术发展历史的原因,也有部分中文博客在解释时给出的错误引导。于是写下这篇文章,只做探讨,不下结论。

一、根文件系统

1.1 概念

rootfs,Root Filesystem,是指在 Linux 中,对应 / 的挂载点。

1.2 分类

rootfs 又分为虚拟 rootfs 和真实 rootfs。
虚拟 rootfs 是内核自己创建并加载,仅仅存在于 内存之中,断电之后就会消失,其真实的文件系统类型为 tmpfs 或 ramfs 类型。(这就是 ramfs 的实现)
真实 rootfs 是指存在于硬盘上的真实存储,内核在创建虚拟文件系统之后,使用 chroot 技术切换到这个真实的文件系统上。(这就是 ramdisk 实现)

二、ramdisk 与 ramfs

2.1. 相同点

ramdisk 和 ramfs 使用的都是 ram 作为存储根文件系统的技术。

2.2. 不同点

2.2.1 原理

ramdisk的技术,是将系统一部分内存区域实现为 /dev/ram,把 /dev/ram 作为作为一个存储设备,最终将根目录切换到 /dev/ram。从原理上属于真是rootfs。
ramfs,将一个包含有根文件系统的文件、目录、节点的 cpio 压缩的描述包直接释放到虚拟 rootfs 的内存区域中,后续无需块设备参与。

2.2.2. 技术差异

ramdisk,使用的某个类型的文件系统,比如 ext2,ext4 等,只要内核支持就行。
ramfs,使用的是 CPIO 的打包,之后再经过 gz 压缩。

2.2.3. 数据流程差异

ramdisk,需要经过ext2文件系统和 /dev/ram 设备,而 ramfs 不需要。
notion image

2.2.4. 初始化进程差异

ramdisk 初始化会去寻找 /linuxrc
ramfs 会去寻找 /init

2.3 优缺点

ramfs 省去了创建 /dev/ram 设备,挂载文件系统,和切换的动作,启动过程会更加快速。
ramfs 使用的是 cpio,压缩比例不如 ramdisk高,做成的镜像体积偏大。

三、initrd 的种类

3.1. ramdisk

老式的技术,俗称 image-initrd,支持 ext2,ext3,ext4。

3.2. 外挂式 ramfs

对 rootfs 目录进行 cpio 压缩,在 gzip 压缩。

3.3. 集成式 ramfs

在内核编译的时候,指定 ramfs 路径,将之与内核一块打包。

四、内核配置

4.1. ramdis

4.1.1. 内核配置

4.1.2. 启动参数

4.2. ramfs 配置

内核配置

4.3. 集成配置

内核配置

五、制作

5.1. ramdisk 的制作

5.2. ramfs 的制作

5.3. 集成式 ramfs

集成式与 ramfs 一样,只是在编译内核时,需要选择 ramfs 路径。

六、参考文档

系统:时间错误内核:编译
飞行日志
常用链接
韭菜搞钱
三省吾身
无问东西
从入门到放弃
知行合一