升级到 20.04 后 ZFS 池无法自动挂载

升级到 20.04 后 ZFS 池无法自动挂载

Ubuntu 18.10 启动时自动导入 zfs 池

已更新至 20.04,池不再在启动时导入 - 我没有看到任何地方有任何错误,但可能缺少了一些东西。

sudo zpool import pool -- 运行正常。文件都在那里,没有问题。

zpool update 显示不需要更新。zpool
status 显示一切正常。

/etc/default/zfs ::(删减大部分,但我认为重要的问题在下面得到解答)

zfs mount -a#在系统启动时运行?

ZFS_MOUNT='是'

zfs unmount -a#在系统停止期间运行?

ZFS_UNMOUNT='是'

挂载到与池同名的特定位置,因此如果我运行 zpool import pool,挂载位置将是:/pool

/ 是 SSD 上的 ext4 卷。因此,除了安装 zfs 卷之外,系统可以正常启动和运行。

我完全了解 apt update 等。但真的有点停滞不前,不知道该看什么?

答案1

在我的案例中,ZFS 无法导入 zpool,因为它位于云持久卷上,而该卷未物理连接到机器。我猜网络卷在启动过程中比预期的要晚一些才可用。

启动后运行systemctl status zfs-import-cache.service出现以下消息:

● zfs-import-cache.service - Import ZFS pools by cache file
     Loaded: loaded (/lib/systemd/system/zfs-import-cache.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2021-09-07 18:37:28 UTC; 3 months 17 days ago
       Docs: man:zpool(8)
    Process: 780 ExecStart=/sbin/zpool import -c /etc/zfs/zpool.cache -aN (code=exited, status=1/FAILURE)
   Main PID: 780 (code=exited, status=1/FAILURE)

Sep 07 18:37:26 ingress-zfs-2 systemd[1]: Starting Import ZFS pools by cache file...
Sep 07 18:37:28 ingress-zfs-2 zpool[780]: cannot import 'data': no such pool or dataset
Sep 07 18:37:28 ingress-zfs-2 zpool[780]:         Destroy and re-create the pool from
Sep 07 18:37:28 ingress-zfs-2 zpool[780]:         a backup source.
Sep 07 18:37:28 ingress-zfs-2 systemd[1]: zfs-import-cache.service: Main process exited, code=exited, status=1/FAILURE
Sep 07 18:37:28 ingress-zfs-2 systemd[1]: zfs-import-cache.service: Failed with result 'exit-code'.
Sep 07 18:37:28 ingress-zfs-2 systemd[1]: Failed to start Import ZFS pools by cache file.

解决方案是修补zfs-import-cache.service服务文件以包含remote-fs.target依赖项:

[Unit]
...
After=remote-fs.target
...

在 Ubuntu 20.04 上,此文件位于:/etc/systemd/system/zfs-import.target.wants/zfs-import-cache.service

我认为指定After=remote-fs.target相当于_netdev在文件中使用该选项/etc/fstab(参见:https://unix.stackexchange.com/a/226453/78327)。

答案2

这里还有一些建议。

尝试将池添加到 ZFS 缓存文件:

sudo zpool set cachefile=/etc/zfs/zpool.cache pool

确保 ZFS 服务已启用:

sudo systemctl enable zfs.target

还要确保 ZFS 导入缓存服务已启用:

sudo systemctl enable zfs-import-cache.service

我可以确认我自己的 ZFS 池是/etc/zfs/zpool.cache在启动时通过文件导入的。

请让我知道这是否对你有用。

答案3

Ubuntu 20.04 就在这里。我遇到了挂载顺序问题。我按照这里的说明操作后就成功了:

https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html

  1. 文件系统挂载顺序
mkdir /etc/zfs/zfs-list.cache
touch /etc/zfs/zfs-list.cache/mypool
ln -s /usr/lib/zfs-linux/zed.d/history_event-zfs-list-cacher.sh /etc/zfs/zed.d

zfs set canmount=on mypool

重新启动后,挂载顺序正确,我可以从 ZFS 卷绑定挂载目录。

相关内容