在 systemd initrd 中,如何将挂载持久保存到新根目录中

在 systemd initrd 中,如何将挂载持久保存到新根目录中

背景

我正在使用 dracut 构建自定义 initrd。它:

  • 将 ext4 磁盘分区挂载到/data
  • 通过网络检索存储在其中的 squashfs 映像/data
  • 安装squashfs
  • 安装一个overlayfs到/sysroot,squashfs镜像作为下层目录,/data/overlay上层目录
  • 绑定挂载/data/sysroot/data

完成最后一步是为了在新的根中我可以将新图像写入数据文件系统,以便我可以检查正在覆盖的内容。据我所知,这不能在新根中完成。

我正在使用 systemd.mount 单元实现这些安装,例如最后一个安装:

[Unit]
After=sysroot.mount
After=data.mount

[Mount]
Where=/sysroot/data
What=/data
Type=none
Options=bind

[Install]
WantedBy=initrd.target

问题

/sysroot/data不幸的是,systemd在 switch_root 之前卸载。它还尝试卸载/datasquashfs 映像,但由于它们正在使用而失败。

有没有办法告诉 systemd 保留这些安装?我读过文档关于如何为存储守护进程执行此操作,但他们没有指定如何为安装执行此操作。

答案1

您不需要将 /data 绑定安装到 /sysroot/data。

一旦退出 initrd,您就可以再次挂载块设备,没有任何问题,例如mount /dev/sda1 /data

相关内容