背景
我正在使用 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 之前卸载。它还尝试卸载/data
squashfs 映像,但由于它们正在使用而失败。
有没有办法告诉 systemd 保留这些安装?我读过文档关于如何为存储守护进程执行此操作,但他们没有指定如何为安装执行此操作。
答案1
您不需要将 /data 绑定安装到 /sysroot/data。
一旦退出 initrd,您就可以再次挂载块设备,没有任何问题,例如mount /dev/sda1 /data