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