ZFS на Linux Недостаточно реплик

3

Резюме

Один из моих пулов ZFS больше не может быть импортирован из-за следующего сообщения:

status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
...
    data1       UNAVAIL  insufficient replicas

Я хотел бы понять, что означает «недостаточное количество реплик», и если есть какой-то способ безопасно восстановить его, прежде чем вытащить резервные копии и перестроить пул хранения.

Я также хотел бы понять, что вызвало это и что я могу сделать, чтобы предотвратить эту ситуацию в будущем. Я понимаю, что ZFS рулит, но как новичку в ZFS, мне страшно, что мне нужно вытащить резервные копии для чего-то столь же безобидного, как вытащить диск из коробки.

Фон

Я недавно выключил эту коробку и вытащил SATA диск sda. Я на 99% уверен, что полностью отключил питание системы, прежде чем отсоединять ее от стены, но возможно, что я мог отключить питание, если выключение занимало слишком много времени.

Я полагаю, что при подключении диска обратно к тому же порту SATA на материнской плате, но, возможно, я подключил его к другому порту.

Коробка также содержит старый SATA-диск PATA, на котором установлен Debian в качестве единственной операционной системы в разделе ext.

Раньше я загружался, все мои пулы импортировались и монтировались тома. На этот раз я ничего не получил.

сегодня

Когда я загрузил коробку, я был на обычном экране входа в GDM и понял, что не могу войти. Позже я обнаружил, что у меня нет домашних каталогов пользователей, так как все они находятся в пуле.

Из командной строки я обнаружил следующее:

# zfs list
no datasets available

# zpool list
no pools available

# zpool status
no pools available

Мои диски были доступны; fdisk выдал ожидаемый результат, и у меня были устройства / dev / sdaX и / dev / sdbX.

zpool import дал мне интересные результаты. Другие пулы сообщили ONLINE, но тот, о котором идет речь, сообщил об этом:

   pool: ...
     id: ...
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
    see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

        data1       UNAVAIL  insufficient replicas
          sda2      UNAVAIL

Я смог импортировать другие пулы в этот момент, используя zpool import poolname а затем посмотреть, что все было в порядке с ними zfs list,

Нет, так с этим:

# zpool import data1
cannot import 'data1': one or more devices are already in use

zpool import показал тот же вывод для этого пула.

Я думал об удалении /etc/zfs/zpool.cache файл. Я экспортировал все, а затем проверил каталог:

# zpool export -a
# ls /etc/zfs

После экспорта zpool.cache не было, поэтому я просто перезагрузился. (Я не знаю, что произойдет, если я удалил zpool.cache во время импорта пулов, поэтому я не пытался.)

Те же результаты после перезагрузки. Другие пулы в порядке, и этот не может быть импортирован.

jia103
источник
ZFS, как правило, нечувствителен к именам устройств и будет искать устройство, если оно не там, где указано в кеш-файле. (Каждое устройство поддержки ZFS хранит уникальный идентификатор, 64-разрядные IIRC, а все устройства в пуле хранят список устройств этого пула по идентификатору.) Тем не менее, мы можем увидеть выходные данные zdb /dev/sda и / или zdb /dev/sda2 (при условии, что проблемный диск ZFS фактически идентифицируется ОС как / dev / sda, в противном случае настройте его соответствующим образом), пожалуйста?
a CVn

Ответы:

1

Я хотел бы понять, что означает "недостаточно реплик"

Это означает, что ZFS обнаружила ошибку при чтении или записи в пул, а затем обнаружила, что в пуле недостаточно избыточности для устранения проблемы. Поскольку кажется, что вы настроили ZFS для пулов с одним диском, это просто означает, что он столкнулся с проблемой и теперь не может восстановиться самостоятельно.

В простом случае zpool status -v сообщит об отдельных файлах, которые сейчас безвозвратно повреждены. Восстановление их из резервных копий или удаление их вернет пул в не поврежденное состояние. Это одно из преимуществ, которые вы получаете с ZFS, по сравнению с отдельной файловой системой, менеджером логических томов и подсистемами RAID. Ошибка на уровне диска, затрагивающая один файл, может быть сообщена как ошибка в этом конкретном файле, в то время как при сбое FS + LVM + RAID ошибка на более низких уровнях не может поддерживать семантический контекст, поскольку она распространяется вверх по стеку.

По вашему вопросу, однако, zpool status является не сообщение о проблеме с определенными файлами, что означает, что с единственным диском в пуле проблем произошла ошибка. На этом этапе я бы посмотрел на диагностику самого диска: smartctl, badblocksSpinRite, поставщик диагностических инструментов и т. Д.

В будущем настоятельно рекомендуем использовать хотя бы зеркала с ZFS. ZFS может либо исправить такие проблемы, если вам предоставлена ​​некоторая избыточность для работы, либо, по крайней мере, позволить вам хромать, пока вы не сможете организовать замену диска.

Любой способ восстановить это безопасно, прежде чем я вытащить резервные копии

Если бы ZFS могла это сделать, она бы это сделала. ZFS не сдается легко, но когда это происходит, это означает, что вы не можете безопасно использовать данные в пуле.

На данный момент, ваша лучшая надежда состоит в том, что проблема заключается в том, что базовый носитель имеет мягкую ошибку, которая позволит SpinRite, badblocksили что-то подобное, чтобы прийти и заставить диск в последний раз извлечь чистую копию поврежденного сектора и скопировать ее в резервный сектор.

Помните, что в этом отношении ZFS более строгая, чем другие файловые системы, поскольку она не примет частичное восстановление сектора. Надежная контрольная сумма данных означает, что только полное восстановление каждого сектора может заставить ZFS признать, что файловая система теперь чиста.

Если вы убеждены, что частичные данные лучше, чем никаких данных, это означает, что ZFS является для вас проблемой. Если вместо этого вы считаете, что неверные данные неверны, ZFS делает именно то, что вам нужно.

одно или несколько устройств уже используются

Это не хорошо.

Это также означает, что вы позволили подключить к этому диску какой-либо другой драйвер ядра до того, как ZFS сможет на него попасть, или ZFS находит один и тот же диск по нескольким путям.

Ваша лучшая надежда на то, что вы находитесь во втором случае, и принуждение ZFS к поиску дисков только по одному пути поможет вам преодолеть эту проблему:

$ sudo ZPOOL_IMPORT_PATH="/dev/disk/by-id" zpool import -a

Если это работает, то экспорт и повторный импорт проблемного пула может работать без принуждения, поскольку ZFS обычно запоминает путь, по которому его vdevs последний раз импортировался.

Warren Young
источник