Aramdisk
仅指内存中的磁盘映像。它是使用ramfs
内核中的 VFS 驱动程序实现的。ramdisk 的内容将在下次重新启动或重启时被擦除。
接下来我将给你详细initrd
介绍initramfs
。
简单来说,initrd
和都initramfs
指代早期用户空间root filesystem
(aka rootfs
),它可以让您在内存中运行非常小的文件系统。
出现在 linux 内核源代码树的一部分的文档Documentation/filesystems/ramfs-rootfs-initramfs.txt
,它也会给你一个关于这些是什么的详细描述。
是什么initrd
?
需要这种早期文件系统的一种常见情况是为硬盘控制器加载驱动程序模块。如果驱动器存在于硬盘驱动器上,这将成为一个先有鸡还是先有蛋的问题。将这些驱动程序作为早期 rootfs 的一部分有助于内核加载任何检测到的硬盘控制器的驱动程序,然后才能从硬盘驱动器挂载实际的根文件系统。此问题的另一个解决方案是将所有驱动程序模块都内置到内核中,但是您将通过这种方式增加内核二进制文件的大小。这种文件系统映像通常称为initrd
. 它是使用ramfs
或实现的tmpfs
。它使用环回块设备进行模拟。
引导加载程序将内核映像加载到一个内存地址,将 initrd 映像加载到另一个内存地址,并告诉内核在哪里可以找到 initrd,将引导参数传递给内核,并将控制权传递给内核以使其继续引导过程.
那么它与initramfs
那时有什么不同呢?
initramfs
initrd
与内置在内核中(当然由内核配置控制)相比,它是一个更早阶段的文件系统。
据我所知,两者initrd
都由initramfs
这个单一的内核配置控制,但在最近的内核中它可能已经改变了。
config BLK_DEV_INITRD
我不会深入探讨如何构建自己的 initramfs,但我可以告诉你它只是使用cpio
格式来存储文件,并且可以usr/Kconfig
在构建内核时使用它进行配置。即使您没有指定自己的 initramfs 映像,而是打开了对 initramfs 的支持,内核也会自动嵌入一个非常简单initramfs
的包含/dev/console
,/root
以及其他一些文件/目录。
此外,还有一个更新的tmpfs
文件系统,通常用于实现内存中的文件系统。事实上,较新的内核initrd
使用 usingtmpfs
而不是ramfs
.
更新:
刚刚偶然发现了一个类似的问题
这也可能有用