我在 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