initramfs 和实际的主文件系统有什么区别?

initramfs 和实际的主文件系统有什么区别?

initramfs是用于启动系统的临时文件系统,挂载后将控制权交给根FS(文件系统)。我不能只使用 ramfs 来做事情的原因是你保存的任何东西都不会保留,每次重新启动时它都会被删除。

但是,即使关闭电源,安装的根文件系统也可以写入并记住内容。为什么是这样?为什么 rootfs 可以记录更改,而 initramfs 却不能?

更重要的是,这个根文件系统应该在哪里?我正在查看根分区,看到了uinitfs.image,但我没有看到任何其他应该是我要挂载的根文件系统的存档。它物理存储在哪里?

答案1

initramfs 是一个压缩映像,通常存储在/boot(例如在我的 CentOS 7 机器上,我有/boot/initramfs-3.10.0-327.18.2.el7.x86_64.img)。这可能是经过 gzip 压缩的 cpio 存档。

例如

sudo gzip -dc /boot/initramfs-3.10.0-327.4.5.el7.x86_64.img | cpio -t | head
.
etc
etc/modprobe.d
etc/modprobe.d/mlx4.conf
etc/ld.so.conf.d
etc/ld.so.conf.d/kernel-3.10.0-327.3.1.el7.x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-327.4.4.el7.x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-229.20.1.el7.x86_64.conf
etc/ld.so.conf.d/mariadb-x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-327.4.5.el7.x86_64.conf

这存储了使操作系统进入可以看到根设备的状态所需的最少例程集。例如,它可能包含与您的 HBA 通信所需的驱动程序。

它在启动时解压到 RAM 中并执行。因为它是 RAM 映像,所以任何更改都将丢失。

一旦找到真正的根磁盘,就会安装它并将根切换到此磁盘。然后引导继续正常进行。因为这个根是一个真正的文件系统(而不是内存映像),所以此处保存的更改是持久的。

相关内容