После обновления моего 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:~$
Я посмотрел zfs на linux github и нашел исправление для 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. Как сказал Скотт Саймон, самое простое решение.
# 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)/extra
и find /lib/modules/$(uname -r)/weak-updates
как это делает CentOS.
yum resinstall
эквивалентно apt-get install --reinstall
.
Метапакет zfs Ubuntu: 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
У меня установлен debian-zfs на proxmox 3.2 (с использованием этого ядра 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
. В моем пуле много всего, намного больше 12 КБ.
Я экспортирую (отключаю) свой пул 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
Решение пользователя 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. Итак, я пошел и использовал 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.