据我所知,initrd
它充当块设备,因此需要文件系统驱动程序(例如ext2
)。内核必须至少有一个内置模块来检测initrd
. 在这篇文章introducing initramfs,一种用于初始 RAM 磁盘的新模型中,它写道:
但是由于缓存,ramdisk 实际上浪费了更多的内存。Linux 旨在缓存从块设备读取或写入的所有文件和目录条目,因此 Linux 将数据从 ramdisk 复制到“页面缓存”(用于文件数据)和“dentry 缓存”(用于目录条目) . 伪装成块设备的 ramdisk 的缺点是它被视为块设备。
什么是page cache
和dentry cache
?在段落中,这是否意味着数据被重复,因为ramdisk
被视为块设备,因此所有数据都被缓存了?
相反,ramfs
:
几年前,Linus Torvalds 有一个绝妙的想法:如果 Linux 的缓存可以像文件系统一样挂载会怎样?只是将文件保存在缓存中,直到它们被删除或系统重新启动之前永远不会摆脱它们?Linus 为缓存编写了一个名为“ramfs”的小型包装器,其他内核开发人员创建了一个名为“tmpfs”的改进版本(它可以将数据写入交换空间,并限制给定挂载点的大小,以便在使用之前填满)所有可用内存)。Initramfs 是 tmpfs 的一个实例。
这些基于 ram 的文件系统会自动增长或缩小以适应它们包含的数据的大小。将文件添加到 ramfs(或扩展现有文件)会自动分配更多内存,删除或截断文件会释放该内存。块设备和缓存之间没有重复,因为没有块设备。缓存中的副本是数据的唯一副本。最重要的是,这不是新代码,而是现有 Linux 缓存代码的新应用程序,这意味着它几乎不增加任何大小,非常简单,并且基于经过严格测试的基础架构。
总之,ramfs
只是文件打开并加载到内存中,不是吗?
两者initrd
和ramfs
都是在编译时压缩的,但不同的是,initrd
块设备解压缩后由内核在启动时挂载,而ramfs
通过 cpio 解压缩到内存中。我对么?或者是ramfs
一个非常小的文件系统?
最后,直到今天,该initrd
图像仍以最新内核呈现。但是,这initrd
实际上是ramfs
今天使用的名称,并且只是出于历史目的吗?