initramfs 启动时应导入的池列表

initramfs 启动时应导入的池列表

我在自动挂载具有嵌套挂载点的单独池时遇到问题。我使用的是 ZfsOnLinux 0.6.2。

目前情况如下:

zpool1      ---> /var
zpool1/log  ---> /var/log
zpool1/mail ---> /var/mail

现在我需要为 db 添加一个单独的 zpool。为了保持目录层次结构的一致性,我考虑了这一点:

zpool2      ---> /var/db

现在,问题是当首先挂载 zpool2 时,zpool1 无法挂载(这是合乎逻辑的)。

除了使用旧式挂载选项外,还有什么方法可以强制池的挂载顺序,以允许在 zpool1 内挂载 zpool2?类似 zpools 依赖项?还是我应该不惜一切代价避免这种嵌套挂载?

答案1

不要将其安装zpool2/var/db,而是将其安装为/zpool2/db或任何对您有意义的内容。

然后建立/var/db一个符号链接到/db

答案2

您可以设置文件系统挂载点属性legacy并使用/etc/fstab来定义它们。

这样,您将能够定义它们的安装顺序。

编辑:我刚刚注意到您已经考虑了传统方法。不过它可能是唯一的方法。

答案3

在同一个池内,挂载路径的组成决定了挂载顺序。在一个池内,Zfs 会按照各自的挂载点路径对要挂载的文件系统进行排序,从而保证挂载顺序正确。

当涉及 2 个或更多池时,没有类似的设施来自动在池之间强制执行安装顺序。

换句话说,Zfs 有一个内置机制,可确保任何挂载点组合都会使 fs-s 以正确的顺序挂载,但是当涉及多个池时,它没有类似的功能来做出此保证。

如果pool2 有一个文件系统,该文件系统设置为挂载在挂载点上,而该挂载点是通过首先在pool1 中挂载 fs 而提供的,则管理员需要确保pool1 确实首先挂载。例如:必须编写脚本。因此答案是“不要指望这个问题会自行解决”。

答案4

在 ubuntu 和 debian 中您可以编辑文件 /etc/default/zfs ....

initramfs 启动时应导入的池列表

而不是尝试导入所有可用池。如果设置了

那么 ZFS_POOL_EXCEPTIONS 将被忽略。

这是一个以分号分隔的列表。

#ZFS_POOL_IMPORT="rpool;bpool;cpool"

也许您可以设置 ZFS_POOL_IMPORT="zpool1;zpool2" 并尝试是否按照列出的顺序导入它们。如果没有,则只需将 zpool1 放入其中,并创建一个名为 zpool2-import.service 的 systemd 文件

[单元] 描述=Zpool2 安装后=zfs-import.target 需要=zfs-mount.service

[服务] Type=oneshot ExecStart=/sbin/zpool import zpool2 -N Exec=/sbin/zfs mount -a (或 zpool2/var/db)

[安装] WantedBy=zfs-import.target.wants

################# 或者编辑 zpool1 的挂载点 zfs set canmount=off zpool1/var zfs set mountpoint=none zpool1/var mkdir -p /var/db

因此 /var 中的其他数据集都可以挂载,例如 zpool1/var/cache 将挂载

在 /var/cache 上,如果首先导入 zpool2,则 pool1 是否挂载并不重要,因为目标( /var/db )仍然在根文件系统上。

也以同样的方式编辑 zpool2 zfs set canmount=off zpool2/var zfs set mountpoint=none zpool2/var

zfs 设置挂载点=/var zpool2 zfs 设置挂载点=/var/db zpool2/var/db zfs 设置覆盖=on zpool2

然后它应该挂载

相关内容