Страница 1 из 1

Развалился raidz2 на файлопомойке

Добавлено: 2013-12-09 12:29:08
SS
Ситуация следующая: есть гипервизор (проксмокс), на котором крутятся виртуалки, в том числе и файлопомойка на базе Nas4Free. Ей выдано было пять дисков, где один системный на 3 гига, 4 по 400 гигов отдавались в пул zfs. Недавно виртуалка перестала отвечать, а после перезагрузки ушла в ребут-цикл -- при попытке подмонтировать пул система выдавала панику. Попытки смонтировать пул в других дистрибутивах, основанных на FreeBSD, также не увенчались успехом, также вылетала паника. В свежескачанном 11 солярисе пул "монтировался" только с ключом -V, но найти его было невозможно. Поиски способов восстановления привели в том числе и к статье от BlackCat http://www.lissyara.su/articles/freebsd ... _recovery/. С её помощью выяснил, что последней удачной транзакцией zfs считала некоторую 4273868-ю, а в массиве уберблоков были за 4400000. Собственно, как и что можно сделать, чтобы хотя бы скопировать данные?

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-09 12:39:57
SS
Вывод zdb. На неизменённые диски солярис не ругалася, но говорил, что пул в состоянии faulted.

Код: Выделить всё

LABEL 0
--------------------------------------------
    version: 28
    name: 'r1'
    state: 0
    txg: 4273868
    pool_guid: 4651652232851139502
    hostname: ''
    top_guid: 5698945487837190948
    guid: 5103665716231737406
    vdev_children: 1
    vdev_tree:
        type: 'raidz'
        id: 0
        guid: 5698945487837190948
        nparity: 2
        metaslab_array: 30
        metaslab_shift: 33
        ashift: 9
        asize: 1717968044032
        is_log: 0
        create_txg: 4
        children[0]:
            type: 'disk'
            id: 0
            guid: 5103665716231737406
            path: '/dev/vtbd1'
            phys_path: '/dev/vtbd1'
            whole_disk: 1
            create_txg: 4
        children[1]:
            type: 'disk'
            id: 1
            guid: 2955603279638369563
            path: '/dev/vtbd2'
            phys_path: '/dev/vtbd2'
            whole_disk: 1
            create_txg: 4
        children[2]:
            type: 'disk'
            id: 2
            guid: 10457907822566881951
            path: '/dev/vtbd3'
            phys_path: '/dev/vtbd3'
            whole_disk: 1
            create_txg: 4
        children[3]:
            type: 'disk'
            id: 3
            guid: 12784877634711548437
            path: '/dev/vtbd4'
            phys_path: '/dev/vtbd4'
            whole_disk: 1
            create_txg: 4
После попытки тупо скорректировать значение txg на первое попавшееся, солярис стал говорить corrupted data на все диски

Код: Выделить всё

--------------------------------------------
LABEL 0
--------------------------------------------
    version: 28
    name: 'r1'
    state: 0
    txg: 4401792
    pool_guid: 4651652232851139502
    hostname: ''
    top_guid: 5698945487837190948
    guid: 5103665716231737406

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-09 12:48:33
lazhu

Код: Выделить всё

zpool clear -F <poolname>
не спасет отца русской демократии?

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-09 13:27:51
SS
Для этого пул должен быть смонтирован, верно? Солярис хоть и импортирует, но устройствам даёт статус unavailable.

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-09 16:53:13
lazhu
Зачем солярис? В фряхе zpool status показывает пул? К нему и применяйте, не надо ничего монтировать.

Код: Выделить всё

# man zpool
...
zpool clear [-F [-n]] pool [device]

         Clears device errors in a pool. If no arguments are specified, all
         device errors within the pool are cleared. If one or more devices is
         specified, only those errors associated with the specified device or
         devices are cleared.

         -F      Initiates recovery mode for an unopenable pool. Attempts to
                 discard the last few transactions in the pool to return it to
                 an openable state. Not all damaged pools can be recovered by
                 using this option. If successful, the data from the discarded
                 transactions is irretrievably lost.

         -n      Used in combination with the -F flag. Check whether discard?
                 ing transactions would make the pool openable, but do not
                 actually discard any transactions.
...

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-09 18:25:33
SS
Изначальная машина перезагружается, а если загрузится с лив-сд, то zpool status сначала скажет, что no pool available, пока не импортирую. А как импортирую, так ловлю fatal trap 12. Я что-то упускаю?

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-11 12:18:45
skeletor
Сталкивался с похожей ситуацией. Тут выход только 1: грузиться с Solaris и смотреть, что с пулом. В 99% случаев придёться пересоздавать пул или удалять, добавлять диски в него. Никакие scrub ни импорт не помогают. Фря с zfs как-то хреновенько дружит, если дисковые контроллеры (то есть без рейда, обычные порты на материнке) такие себе. На нормальных (lsi, adaptec, areca, 3com, ...) всё нормально работает.

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-11 15:22:53
SS
А данные по крайней мере попробовать-то вытащить как-то можно же? Сейчас пробую при помощи foremost что-то выцепить -- отдельные куски файлов есть, ворд с экселем даже что-то открывают. Но вот если второй, изменённый видать, вариант файла открыть, то там совсем чуть-чуть, только имена страниц книг да немного текста в вородовских. Для zfs есть что-то более подходящее? Или где-нибудь какой-нибудь скрипт существует, чтоб данные содрать? Массив уберблоков вроде цел, zdb его нормально показывает, правда в солярисе открыть может лишь первые две метки.

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-11 20:07:44
f_andrey
Да, конечно можно, причём элементарно, берёте резервную копию или снапшоты на удалённом хранилище и прекрасно открываете.
Ну сколько можно детский сад разводить.

Re: Развалился raidz2 на файлопомойке

Добавлено: 2013-12-20 13:50:45
SS
Для тех, кто столкнётся с подобным:

есть недокументированный ключ -T, который позволяет напрямую указать транзакцию, на момент которой надо импортировать пул.
http://www.c0t0d0s0.org/archives/7621- ... ort-T.html

В моём случае я указал такую транзакцию, которая имела намного больший номер и была в каком-то уберблоке.