Восстановить недоступный пул ZFS

Вопрос или проблема

Миграция с https://stackoverflow.com/questions/79240445/

У меня есть пул ZFS с 6 дисками и 3 зеркалами, который был смонтирован на виртуальной машине. К сожалению, скрипт отформатировал один из дисков в зеркале. Кроме того, я неправильно экспортировал zpool. Теперь виртуальная машина исчезла, и у меня новая ОС (NixOS) вместо предыдущего гипервизора (Proxmox). Я пытаюсь импортировать zpool в NixOS напрямую, но пул отображается в состоянии degraded и не может быть импортирован. Вот вывод того, как это выглядит, когда я пытаюсь импортировать пул.

root@host1:/tmp/mnt/ > zpool import -fd /dev/sdb1 -fd /dev/sdc1 -fd /dev/sdd1 -fd /dev/sde1 -fd /dev/sdf1 -d /dev/sdg1 -o readonly
   pool: data
     id: 14999838061156736712
  state: UNAVAIL
status: The pool was last accessed by another system.
 action: The pool cannot be imported due to damaged devices or data.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY
 config:

        data                               UNAVAIL  insufficient replicas
          mirror-0                         DEGRADED
            sde                            ONLINE
            pci-0000:01:05.0-scsi-0:0:0:4  UNAVAIL
          mirror-1                         ONLINE
            sdb                            ONLINE
            sdc                            ONLINE
          indirect-2                       ONLINE
          mirror-3                         UNAVAIL  insufficient replicas
            pci-0000:01:01.0-scsi-0:0:0:0  UNAVAIL
            pci-0000:01:06.0-scsi-0:0:0:5  UNAVAIL

Я понимал, что пока у меня есть одна реплика для зеркала в пуле, я должен быть в состоянии импортировать и восстановить данные. Однако mirror-3 не показывает доступной реплики. Есть один indirect-2, который я не понимаю, и он показывает онлайн. Я полагаю, что один из них является действительным диском. Внутри виртуальной машины я импортировал zpool, используя /dev/dis/by-path, поэтому он показывает pci-000xxxxx. Я считаю, что причина, по которой все pci-000xxx отображаются как UNAVAIL, заключается в том, что новая ОС больше не распознает их как PCI-диски.

Вывод zpool import -a говорит, что нет доступных пулов для импорта

root@host1:~/ > zpool import -a
no pools available to import

Ответ или решение

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

Шаг 1: Оценка текущего состояния пула

Вероятно, что при попытке импорта ZFS-пула вы столкнулись с проблемой "UNAVAIL", что указывает на то, что ZFS не может видеть достаточно реплик данных для некоторых зеркал. В вашем случае, следующее состояние пула:

  • mirror-0: содержит один доступный диск (sde) и один UNAVAIL диск.
  • mirror-1: полностью доступен, все диски онлайн (sdb и sdc).
  • mirror-3: оба диска UNAVAIL, что критично для восстановления.
  • indirect-2: этот элемент требует дополнительного внимания.

Шаг 2: Проверка доступных устройств

Поскольку вы наблюдаете, что некоторые устройства были идентифицированы как pci-..., а не /dev/sdX, и так как вы находитесь на новой ОС, необходимо убедиться, что все устройства корректно распознаны. Выполните команду для отображения всех доступных устройств:

lsblk

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

Шаг 3: Работа с отсутствующими репликами

Для зеркала, где отсутствуют реплики (в вашем случае mirror-3), попробуйте временно удалить его из конфигурации пула с помощью следующей команды:

zpool import -f -m data

Команда -f (force) может помочь в импортировании пула, игнорируя некоторые проблемы. Однако это может привести к потере данных в недоступных пространственных сегментах.

Шаг 4: Используя zpool import

Для попытки импорта пула, работая с минусовыми состояниями, вы можете попробовать следующую команду:

zpool import -d /dev/disk/by-id data

Параметр -d указывает на каталог, где находятся устройства блока. Использование by-id может быть более надежным.

Шаг 5: Если импорт не удается

Если вы все еще сталкиваетесь с проблемами, вам потребуется проверить статус и возможность резервного копирования данных. Используйте команды для выполнения диагностики:

zpool status
zpool history

Это даст вам представление о том, какие команды и операции были выполнены на пуле.

Шаг 6: Восстановление данных

Если ни один из вышеперечисленных методов не сработал, возможно, вам нужно будет обратиться к специализированному программному обеспечению для восстановления данных, которое может помочь извлечь данные из поврежденного пула. Рекомендуется использовать инструменты, такие как photorec или специализированные сервисы восстановления данных.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...