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

使用sudo apt-get upgrade并重新启动升级我的ubuntu 13.10服务器后,我的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更新错误。 最简单的解决scheme就像Scott Simon说的那样。

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

 $ 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 ,而不是在/lib/modules/$(uname -r)/extrafind /lib/modules/$(uname -r)/weak-updates像CentOS一样find /lib/modules/$(uname -r)/weak-updates

yum resinstall相当于apt-get install --reinstall
Ubuntu的zfs metapackage是ubuntu-zfs而不是zfs-release因为它在CentOS中。
rpm -qa相当于dpkg-query --show --showformat='${binary:Package}\n'

我也不确定find命令是否真的需要运行,因为apt-get可能已经处理好了,但是运行它并不会打破这个过程。

dpkg有更多的了解或经验的人可能会写出一个稍微更高效的命令,但是我怀疑这对于大多数目的来说已经足够了。

官方错误页面为Ubuntu和Debian用户提供了这个修补程序:

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

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

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

我在所有提示中select了“是”,将其全部删除。 之后,我做了一些检查,如果有任何dkms剩菜。 下面的命令应该显示一个空目录。

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

如果你看到任何东西(上面的目录),你需要全部删除它(除非你有其他定制的内核模块)

然后就像这样简单:

 apt-get install debian-zfs 

然后导入我的池(我的池被称为坦克):

 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挂载点,因为它会自动创build您添加到proxmox的“存储”的目录结构。

首先我检查/tank是不是可爱的zfs池,使用du -hs /tank 。 我的游泳池里有很多东西,大大超过12KB。

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

我用rm -R /tank删除了EMPTY /tank目录(请仔细检查!!)

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

这就是我如何让我的zfs在proxmox上工作:

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

用户84104的解决scheme“工作”。 我做了第一行。 其余的都不起作用。 所以我尝试了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-通用内核的不同。 所以我去使用sudo dkms remove zfs/0.6.3 --allsudo 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。