从 zfs-0.6.2-1.el6.x86_64 到 zfs-0.6.3-1.el6.x86_64 的更新使 zpool 无法读取

841*_*104 4 linux zfs centos6 zfsonlinux

运行# yum update zfs并重新启动后,我的CentOS 6 ZFS on Linux系统无法再看到它的 zpools 或与其交互。

# zpool status
no pools available
# zpool import
zpool: ../../lib/libzfs/libzfs_import.c:356: Assertion `nvlist_lookup_uint64(zhp->zpool_config, ZPOOL_CONFIG_POOL_GUID, &theguid) == 0' failed.
Aborted
# dmesg | grep -i spl 
SPL: Loaded module v0.6.2-1 
SPL: using hostid 0x43a4c8a0
Run Code Online (Sandbox Code Playgroud)

这是一个金丝雀系统,所以我不担心它的内容,但我有其他机器,我最终希望安全升级。我做错了什么,更重要的是我怎样才能对重要的系统做正确的事?

eww*_*ite 5

这出现在ZFS 邮件列表上的讨论

内核 ABI 在 0.6.2 和 0.6.3 之间变化,使得 0.6.3 用户端工具无法与 0.6.2 内核模块交互,这是升级到 0.6.3 后的配置。根据此列表中的大量消息,正确的方法是重新启动。

ZFS 错误报告中涵盖了这一点: https //github.com/zfsonlinux/zfs/issues/2400#issuecomment-46118193

我只将 ZFS 用于数据分区,所以我卸载了软件包,摆脱了弱模块引用并重新安装了 ZFS。

# rpm -e `rpm -qa | egrep '(spl|zfs)'`
# cd /lib/modules/2.6.32-431.17.1.el6.x86_64/weak-updates/
# rm -fr spl* z*
# yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release$(rpm -E %dist).noarch.rpm
# yum install zfs
Run Code Online (Sandbox Code Playgroud)

编辑:我仍然必须重新启动。

编辑:

遵循提出的两种解决方法会导致 ZFS 安装出现一些问题。由于缺少关键参数 ( zfs: Unknown parameterzfs_vdev_max_pending'`) ,模块加载存在一些问题。我认为这个版本对于现有系统的一般版本或盲目更新是不安全的。


Mic*_*ton 5

这看起来像……一个错误。事实上,这是一个错误。ZFS 用户空间已更新,但 DKMS 未更新内核模块。此断言是由版本不匹配引起的。

您可以通过对错误的注释中给出的过程来解决它,方法是删除旧的内核模块,然后重新安装所有内容。

$ find /lib/modules/$(uname -r)/extra -name "splat.ko" -or -name "zcommon.ko" -or -name "zpios.ko" -or -name "spl.ko" -or -name "zavl.ko" -or -name "zfs.ko" -or -name "znvpair.ko" -or -name "zunicode.ko" | xargs rm -f
$ find /lib/modules/$(uname -r)/weak-updates -name "splat.ko" -or -name "zcommon.ko" -or -name "zpios.ko" -or -name "spl.ko" -or -name "zavl.ko" -or -name "zfs.ko" -or -name "znvpair.ko" -or -name "zunicode.ko" | xargs rm -f
$ yum reinstall zfs-release
$ yum reinstall $(rpm -qa | egrep "zfs|spl")
Run Code Online (Sandbox Code Playgroud)