使用并重新启动升级我的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-zfs
而zfs-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 --force
sudo dkms install spl/0.6.3 --force
基本上,解决方案是使用 dkms 删除模块,然后强制重新安装 0.6.3。