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 во время импорта пулов, поэтому я не пытался.)

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

1 ответ1

1

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

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

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

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

В будущем настоятельно рекомендуем использовать хотя бы зеркала с 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 последний раз импортировался.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .