web-dev-qa-db-ja.com

zfs-0.6.2-1.el6.x86_64からzfs-0.6.3-1.el6.x86_64への更新により、zpoolが読み取り不能になりました

# yum update zfsを実行し、CentOS 6ZFS 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

これはカナリアシステムなので、内容は気になりませんが、他にも安全にアップグレードしたいマシンがあります。私は何を間違えましたか、そしてもっと重要なことに、重要なシステムに対してどうすればそれを正しく行うことができますか?

4
84104

それは...バグのように見えます。実際、 これはバグです 。 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")
5
Michael Hampton

これは 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 parameterzfs_vdev_max_pending'`)。このリリースは、既存のシステムでの一般的なリリースやブラインドアップデートには安全ではないと思います。

5
ewwhite

このページにアクセスして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

4
DjDCH