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 就在这里。我遇到了挂载顺序问题。我按照这里的说明操作后就成功了:
- 文件系统挂载顺序
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 卷绑定挂载目录。