据我所知,initrd
充当块设备,因此需要一个文件系统驱动程序(如 ext2
)。内核必须至少有一个用于检测 initrd
文件系统的内置模块。在 引入 initramfs,一种用于初始 RAM 磁盘的新模型这篇文章中写道:
但是由于缓存,ramdisk 实际上浪费了更多的内存 设计用于缓存从中读取或写入的所有文件和目录条目 阻塞设备,因此 Linux 将数据从内存磁盘复制到 “页面缓存”(用于文件数据)和“ dentry 缓存”(用于文件数据) 虚拟磁盘假装是一个 阻塞装置就是把它当作阻塞装置来对待。
什么是 page cache
和 dentry cache
?在该段中,这是否意味着数据得到了重复,因为 ramdisk
被视为一个块设备,因此所有的数据被缓存?
相比之下,ramfs
:
几年前,Linus Torvalds 有一个很好的想法: 如果 Linux 的缓存 可以像文件系统一样挂载 除非他们被删除或者系统重新启动,否则永远不会删除它们? Linus 在缓存周围编写了一个名为“ ramfs”的小包装器 内核开发人员创建了一个名为“ tmpfs”的改进版本(它 可以将数据写入交换空间,并限制给定挂载的大小 点,以便它在消耗所有可用内存之前填满) 是 tmpfs 的一个实例。
这些基于内存的文件系统会自动增大或缩小以适应 将文件添加到 ramfs (或扩展 )自动分配更多的内存,并删除或 截断文件可以释放内存 块设备和缓存,因为没有块设备 缓存是数据的唯一副本。最重要的是,这不是新的 而是针对现有 Linux 缓存代码的一个新应用程序,它 意味着它几乎没有增加大小,非常简单,并且是基于 测试良好的基础设施。
总之,ramfs
只是打开并加载到内存中的文件,不是吗?
initrd
和 ramfs
都是在编译时压缩的,但不同的是,initrd
是一个块设备,在启动时由内核解压装,而 ramfs
是通过 cpio 解压装到内存中的。我说的对吗?或者 ramfs
是一个非常小的文件系统?
最后,直到今天,initrd
映像仍然在最新的内核中显示。然而,initrd
实际上是 ramfs
今天使用和名称只是为了历史的目的?