Назад | Перейти на главную страницу

ZFS при обновлении linux с 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:~$

Я посмотрел 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.