确保在关闭时卸载环回根和主机

确保在关闭时卸载环回根和主机

我正在尝试设置一个从 LVM 格式的映像文件运行的 Linux 系统。在对 initramfs 和引导选项进行一些修改之后,我设法通过将主机文件系统安装到/run/initramfs/hostlosetup将映像安装到/dev/loop0并确保内核和 udev 检测到其中的 LVM(和根 LV)来使其启动并运行。到目前为止,一切都很好。

问题是,当关闭(或重新启动,或......)系统时,根文件系统和主机都没有正确卸载,因为先有鸡还是先有蛋的情况:根(或/oldroot,如关机所指的那样) script) 无法卸载,因为/oldroot/run/initramfs/host仍然安装,并且主机无法卸载,因为这样做会导致/oldroot无法访问。

不干净的关闭并不是世界末日,因为两个文件系统都记录了日志,因此在下次启动时fsck只需重播日志,但显然干净的关闭会更好。

所以问题是:是否有可能以某种方式安排关闭顺序(我修改关闭脚本),或者启动顺序(也许通过将主机安装点移动到不同的位置)以便可以干净地卸载两个文件系统?

答案1

如果有人遇到同样的问题:

tmpfs我所需要的只是在进行任何卸载之前,在关闭脚本中将主机文件系统的挂载点移动到根文件系统之外的位置(这很好,因为它在枢轴根中运行):

mount --move /oldroot/run/initramfs/host /host

这样可以/oldroot干净地卸载。然后可以使用简单的命令卸载主机文件系统

umount /host

答案2

有一些操作系统做这种工作的技巧:

  • mount --move这让你交换挂载点上的文件系统
  • pivot_rootchroot与切换/根文件系统一起使用

最初,特征的目标是:

  1. initramdisk使用as启动内核根文件系统(保留一些RAM用于未压缩initrd)。
  2. 访问所需的所有模块和脚本真正的根设备在第一个引导步骤中启动。 (这可能包含网络初始化和网络设备安装)
  3. 准备好后,检查真正的根设备并安装为就绪的根文件系统。运行pivot_root(and chroot),因此运行后,ramdisk将变为未使用的内存盘安装于/initrd.
  4. 因此,从那里,可以umount /initrd释放内存。

看看man mount 并且man pivot_root

答案3

要将文件系统标记为完全卸载而不使其上的文件不可用,请将其重新挂载为只读:

mount -o remount,ro /mount/point

即使该文件系统上有打开的文件可供读取、运行可执行文件、当前目录或活动安装点,也可以完成此操作。只有打开用于写入的文件才能防止以只读方式重新挂载。

相关内容