# yum update zfs
を実行し、CentOS 6
ZFS on Linux
システムを再起動すると、システムはそのzpoolを表示または操作できなくなります。
# 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
これはカナリアシステムなので、内容は気になりませんが、他にも安全にアップグレードしたいマシンがあります。私は何を間違えましたか、そしてもっと重要なことに、重要なシステムに対してどうすればそれを正しく行うことができますか?
それは...バグのように見えます。実際、 これはバグです 。 ZFSユーザーランドは更新されていますが、カーネルモジュールはDKMSによって更新されていません。このアサーションは、バージョンの不一致が原因で発生します。
古いカーネルモジュールを削除してからすべてを再インストールすることで、バグに対する comment で指定されたプロセスで回避できます。
$ 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")
これは 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-4611819
私はデータパーティションにZFSのみを使用しているので、パッケージをアンインストールし、weak-modules参照を削除して、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
編集:まだ再起動する必要がありました。
編集:
提示された両方の回避策に従うと、ZFSのインストールでいくつかの問題が発生しました。重要なパラメータが欠落しているため、モジュールのロードにいくつかの問題があります(zfs: Unknown parameter
zfs_vdev_max_pending'`)。このリリースは、既存のシステムでの一般的なリリースやブラインドアップデートには安全ではないと思います。
このページにアクセスしてDebian
を実行している場合は、次の手順を実行するだけで問題を解決できます。
# apt-get update
# apt-get dist-upgrade
# reboot
この問題は、単純なupdate
が古いライブラリファイルを新しいライブラリファイルに置き換えないために発生しました。これがdist-upgrade
が必要です。 apt-get manpage から:
dist-upgradeアップグレードの機能を実行することに加えて、新しいバージョンのパッケージとの依存関係の変更もインテリジェントに処理します。 apt-getには「スマートな」競合解決システムがあり、必要に応じて重要度の低いパッケージを犠牲にして、最も重要なパッケージのアップグレードを試みます。したがって、dist-upgradeコマンドは一部のパッケージを削除する場合があります。
出典: http://bernaerts.dyndns.org/linux/75-debian/312-debian-wheezy-zfsonlinux-zpool-lost