Резюме
Один из моих пулов 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 во время импорта пулов, поэтому я не пытался.)
Те же результаты после перезагрузки. Другие пулы в порядке, и этот не может быть импортирован.
zdb /dev/sda
и / илиzdb /dev/sda2
(при условии, что проблемный диск ZFS фактически идентифицируется ОС как / dev / sda, в противном случае настройте его соответствующим образом), пожалуйста?Ответы:
Это означает, что 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 к поиску дисков только по одному пути поможет вам преодолеть эту проблему:
Если это работает, то экспорт и повторный импорт проблемного пула может работать без принуждения, поскольку ZFS обычно запоминает путь, по которому его vdevs последний раз импортировался.
источник