Восстановление/импорт пула ZFS из одного старого зеркала

Это проблема, с которой я столкнулся при запуске скриптов через cron. Я не уверен, применимо ли это здесь, но попробуйте добавить свой путь в начало скрипта. Что-то вроде...

    #!/bin/bash

    PATH="/your/path"
   ...
7
07.02.2020, 06:16
1 ответ

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

Резюме:

  • Существует неподдерживаемая, -официально -не поддерживаемая labelfixутилита для исправления меток на некоторых типах поврежденных (и автономных/отключенных )томов ZFS, которую можно использовать для создания неимпортируемых пул импортный.
  • Прежде чем что-либо делать, обязательно клонируйте старые запасные устройства и работайте только с клонами.
  • Если у вас возникла ситуация, описанная в вопросе, с двумя пулами с одинаковыми именами (из-за ошибки createили другой ошибки ), убедитесь, что подключены только устройства с нужным вам пулом. выздороветь.
  • Кроме того, удалите все устройства, которые когда-либо могли быть связаны с пулом, который вы хотите восстановить, но которые неисправны. (Это применимо, даже если вы считаете, что полностью уничтожили все другие пулы и отключили эти устройства.Инструменты восстановления попытаются собрать воедино фрагменты старых пулов и могут считывать старые метки/уберблоки для объединения устройств и данных непредсказуемым образом.)

Подробнее:

Похоже, в Linux существует способ восстановления автономных и отсоединенных дисков из пулов zpool. Пользователь jjwhitney создал порт утилиты labelfix , о которой я упоминал в вопросе, первоначально написанной Джеффом Бонвиком (, изобретателем ZFS ), почти 12 лет назад . По причинам, которые я не могу понять, эта утилита не была включена в сборки ZFS, хотя она позволяла бы восстанавливать данные для неповрежденных пулов в случае сбоя импорта по ряду причин из-за неверных меток. (Некоторое обсуждение вопроса здесь .)

(Замечание :Один из моментов, который я осознал в ходе этого процесса, заключается в том, что средств восстановления ZFS катастрофически не хватает, и никто не должен использовать эту файловую систему для чего-либо без постоянного выполнения полных резервных копий данных.. И не полагайтесь на этот старый зеркальный диск, лежащий в вашем шкафу, как на последнюю -резервную копию, если вы не уверены, что его можно импортировать. ZFS, по-видимому, отлично справляется с поддержанием целостности данных, когда ZFS взаимодействует, но невероятно хрупок. И когда он сломается --или вы сделаете что-то мелкое, но глупое --ваши данные могут просто все быть недоступными и нечитаемыми, даже если они целы.)

В любом случае утилита labelfix не обновлялась 5 лет, поэтому она не компилируется с современными библиотечными файлами ZFS. К счастью, у меня все еще была установлена ​​исходная версия ОС, и я мог загрузиться с нее, а затем загрузить старый ZFS в Linux tar-архив с исходным кодом и использовать его для получения соответствующих библиотек ZFS и создания среды в системе, где все по-прежнему работает. (Я начал дорабатывать утилиту labelfix, чтобы попытаться работать с современными библиотеками ZFS,но это казалось немного опасным, учитывая, как мало я понимаю обо всех внутренних компонентах, которые мне нужно исправить, чтобы соответствовать текущей кодовой базе. Легче просто построить его на старой версии.)

И вот, labelfixсразу же и легко переписал этикетку на моем устройстве на что-то, что zpool importмог бы хотя бы интерпретировать!

Должен сказать, что я использовал ddrescue, чтобы скопировать все это с исходного диска, прежде чем пытаться сделать что-либо из этого. И я очень рекомендую это, так как можно делать ошибки, как это сделал я. Исходный пул, который я случайно переписал, назывался backup, поэтому zdbначал видеть несколько версий разных пулов backupи не мог понять, почему все метаданные не совпадают. Мне пришлось настроить vdev_validate_skip=1в модуле ядра ZFS, чтобы получить пул для импорта, но затем он просто импортировал более новыйbackupпул (, а не тот, который я хотел ). Обратите внимание, что это произошло, несмотря на то, что я указал точный путь к диску, который я хотел importиз :, при принудительном импорте с помощью этого метода, казалось, что он полностью игнорировал мою спецификацию и использовал совершенно другую конфигурацию с устройства, которое не было не указан в команде.

К счастью, я сделал еще один клон диска, так что я мог попытаться еще раз запустить. Тем не менее, labelfixтакже умен и, кажется, считывает текущую конфигурацию диска, поэтому он уловил тот факт, что у меня было два старых диска с «поврежденными данными» из первого пула backup. Повреждение, к сожалению, означало, что метка «fixed» указывала пул не только как DEGRADED, но также и как FAULTEDи, таким образом, неспособный -import-.

В этот момент я понял, что мне просто нужно отключить все старые диски и вообще работать без них в системе, чтобы избежать поврежденных попыток восстановления. К сожалению, labelfix, кажется, исправляет ситуацию только один раз, поэтому я сейчас клонирую #3 этого диска (, который в настоящее время копируется из моего первого резервного клона ). Как только процесс клонирования завершится,Я запущу labelfixбез каких-либо других старых дисков, и, надеюсь, я получу пул DEGRADED, который смогу затем import.

3
28.04.2021, 23:25

Теги

Похожие вопросы