访问 iSCSI 块设备,在 CentOS7 上设置为 ZFS 卷 - 不会在启动时自动挂载,重新启动时挂起

访问 iSCSI 块设备,在 CentOS7 上设置为 ZFS 卷 - 不会在启动时自动挂载,重新启动时挂起

我在 Softlayer 的一个虚拟实例上运行 CentOS7。实例可以通过 multipath/iscsi 使用块存储设备

我已成功将此块设备挂载为 XFS。我决定尝试一下 ZFS。当我手动发出命令来“挂载”此 ZFS 卷时,它运行正常。

zpool import -f zfs-data

我在 CentOS7 上使用 ZFS 时遇到了两个问题。

  • a.) 我的 zpool 没有在启动时自动安装
  • b.) 系统在重启时挂起

我怀疑 (a) 的解决方案也可以解决 (b)。

让我们看看(A)第一的。

github 页面上有关于linux系统 CentOs 7. 重启后无法挂载/导入池

看来通过 yum 安装 ZFS 时不会创建 /etc/hostid 文件。因此,按照本页的建议,我运行以下命令来创建它。

dd if=/dev/urandom of=/etc/hostid bs=4 count=1

然后我突然想到它无法自动挂载,因为在机器启动时,ZFS 正在加载iSCSI 内容。

来自 /var/log/boot.log- 第一列是行号

81     Starting Import ZFS pools by cache file...
147    Starting Open-iSCSI...

如何更改加载顺序?

(二)重启时挂起

如果我导入池但不向其中写入任何内容,我可以正常重新启动。但是,只要在安装时交换任何数据,重新启动/关闭日志就会包含这些行。

Stopping Import network configuration from initramfs...


[  550.096199] end_request: I/O error, dev dm-0, sector 5514152

^^ 用不同的数字重复十次。

WARNING: Pool 'zfs-data' has encountered an uncorrectable I/O failure and has been suspended
[...]
Unmounting /zfs-data...
[...]
A stop job is running for /zfs-data

这个过程永远不会结束,需要进行硬重启才能重新进入实例。

任何见解都将不胜感激。

答案1

好问题……我不确定我是否建议以这种方式使用 ZFS,尤其是因为块设备在启动时应该在那里。但是,请记住有几种服务与 ZFS 相关。

zfs-import-cache.service # Import ZFS pools by cache file
zfs-mount.service # Mount ZFS filesystems
zfs-share.service # ZFS file system shares
zfs.target # ZFS startup target

您可以修改时间或依赖关系以适合延迟的 iSCSI 安装。

[Unit]
Description=Import ZFS pools by cache file
DefaultDependencies=no
Requires=systemd-udev-settle.service
After=systemd-udev-settle.service
After=cryptsetup.target
ConditionPathExists=/etc/zfs/zpool.cache

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/sbin/modprobe zfs
ExecStart=/sbin/zpool import -c /etc/zfs/zpool.cache -aN

相关内容