Linux 上的 ZFS 从 0.6.2 升级到 0.6.3 导致我的 zpool 无法读取,帮助将 CentOS 命令转换为 Ubuntu 命令

Linux 上的 ZFS 从 0.6.2 升级到 0.6.3 导致我的 zpool 无法读取,帮助将 CentOS 命令转换为 Ubuntu 命令

使用并重新启动升级我的ubuntu 13.10服务器后sudo apt-get upgrade,我的 zpool 不会显示。

messier@ANDERSON:~$ sudo zpool status
no pools available
messier@ANDERSON:~$ sudo zpool import
zpool: ../../lib/libzfs/libzfs_import.c:356: Assertion `nvlist_lookup_uint64(zhp->zpool_config, ZPOOL_CONFIG_POOL_GUID, &theguid) == 0' failed.
messier@ANDERSON:~$

我查看了 Linux github 上的 zfs,发现针对 CentOS 的修复即删除旧的内核模块,然后重新安装软件以获取新的内核模块。

$ 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")

人们说这是在修复它。我只是不知道如何在我的 ubuntu 服务器上运行此修复程序。谢谢你的帮助!

最后编辑:如果您因为 zfs 更新错误而进入此页面。最简单的解决方案就像 Scott Simon 所说的那样。

# apt-get update
# apt-get dist-upgrade
# reboot

答案1

$ sudo find /lib/modules/$(uname -r)/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
$ sudo apt-get install --reinstall ubuntu-zfs
$ sudo apt-get install --reinstall $(dpkg-query --show --showformat='${binary:Package}\n' | egrep 'spl|zfs')

Ubuntu 将其所有 dkms 保存在 中/lib/modules/$(uname -r)/updates,而不是像 CentOS 那样保存在/lib/modules/$(uname -r)/extra和中。find /lib/modules/$(uname -r)/weak-updates

yum resinstall相当于apt-get install --reinstall。Ubuntu
的 zfs 元包是 ,ubuntu-zfszfs-release不是 CentOS 中的 。
rpm -qa相当于dpkg-query --show --showformat='${binary:Package}\n'

我也不确定是否真的需要运行 find 命令,因为apt-get可能已经解决了这个问题,但运行它不会破坏该过程。

具有更多知识或经验的人dpkg可能能够编写稍微更有效的命令,但我认为这对于大多数目的来说已经足够了。

答案2

官方错误页面为 Ubuntu 和 Debian 用户修复了此问题:

# apt-get update
# apt-get dist-upgrade
# reboot

答案3

我在 proxmox 3.2 上安装了 debian-zfs(使用此内核 pve-headers-2.6.32-26-pve)。这是我在升级后修复它的方法。

aptitude purge dkms debian-zfs spl-dkms zfs-dkms

我对所有提示都选择了“是”,将其全部删除。完成后,我检查了一下是否有任何 dkms 剩余。以下命令应显示一个空目录。

ls /lib/modules/2.6.32-26-pve/updates/dkms/

如果你看到其中有任何内容(上述目录),则需要将其全部删除(除非您有其他自定义内核模块)

然后就很简单了:

apt-get install debian-zfs

然后导入我的池(我的池叫做tank):

zpool import tank

zfs 很不高兴,因为在所有戏剧性事件发生之前它没有被正确导出。

cannot import 'tank': pool may be in use on another system

这不是问题,我再次尝试了这个:

zpool import -f tank

上述操作有效,我可以用以下命令查看我的池:

zpool status
    root@proxmox-01:~# zpool status
  pool: tank
 state: ONLINE
  scan: scrub repaired 0 in 0h8m with 0 errors on Tue Jul  8 20:39:13 2014
config:

        NAME                                           STATE     READ WRITE CKSUM
        tank                                           ONLINE       0     0     0
          raidz2-0                                     ONLINE       0     0     0
            scsi-SATA_WDC_WD1001FALS-_WD-WMATV4198253  ONLINE       0     0     0
            scsi-SATA_WDC_WD1002FAEX-_WD-WCAW30398837  ONLINE       0     0     0
            scsi-SATA_WDC_WD1002FAEX-_WD-WCAW30404054  ONLINE       0     0     0
            scsi-SATA_WDC_WD1002FAEX-_WD-WCAW30406039  ONLINE       0     0     0

errors: No known data errors

我对此很满意。但是 proxmox 有点难。我不得不弄乱 proxmox 的挂载点,因为它会自动创建您添加到 proxmox 的“存储”目录结构。

首先我/tank使用 来检查 zfs 池是否可用du -hs /tank。我的池中有很多东西,远远超过 12KB。

我导出(断开)我的 zfs 池zpool export tank

我删除了空/tank目录rm -R /tank (请再检查一遍!!)

然后我导入我的池(连接)zpool import tank,你的 zfs 存储应该可以工作,并且可以被 proxmox 访问。

这是我首先让 zfs 在 proxmox 上运行的方法:

http://www.anotherlan.com/proxmox-zfs-on-linux-local-storage

答案4

用户 84104 的解决方案“有效”。我执行了第一行。然后其余的都不太管用。所以我试了一下,sudo apt-get remove ubuntu-zfs dkms然后sudo apt-get install ubuntu-zfs dkms出现了同样的错误。Dkms 没有识别出 zfs/0.6.3 和 spl/0.6.3 与 3.11.0-23-generic 内核附带的不同。所以我去使用了sudo dkms remove zfs/0.6.3 --all和,然后我使用和sudo dkms remove zfs/0.6.3 --all强制安装了这两个模块sudo dkms install zfs/0.6.3 --forcesudo dkms install spl/0.6.3 --force

基本上,解决方案是使用 dkms 删除模块,然后强制重新安装 0.6.3。

相关内容