Назад | Перейти на главную страницу

Пул ZFS деградировал из-за неисправного диска, экспорт и замена не работают

У меня возникли проблемы после попытки добавить больше дисков к моему серверу Ubuntu. Будучи полным новичком, я выключил сервер, добавил еще два диска и перезапустил систему только для того, чтобы найти один из дисков в существующем зеркале "FAULTED".


matsojala@amatson:~$ zpool status -v
  pool: tank
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0B in 21h20m with 0 errors on Fri Feb  8 14:15:04 2019
config:

        NAME                      STATE     READ WRITE CKSUM
        tank                      DEGRADED     0     0     0
          mirror-0                DEGRADED     0     0     0
            sdb                   ONLINE       0     0     0
            12086301109920570165  FAULTED      0     0     0  was /dev/sdb1

errors: No known data errors

Я пытался экспортировать и импортировать на основе этого ответа (Пул ZFS ухудшился при перезагрузке), но экспорт не удается


matsojala@amatson:~$ sudo zpool export -f tank
umount: /tank: target is busy.
cannot unmount '/tank': umount failed

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


matsojala@amatson:~$ sudo zpool replace -f tank 12086301109920570165 sdc1
invalid vdev specification
the following errors must be manually repaired:
/dev/sdc1 is part of active pool 'tank'

Это тоже пробовал.


matsojala@amatson:~$ sudo zpool replace tank sdb
/dev/sdb is in use and contains a unknown filesystem.

Любая помощь? Перед выключением диск полностью работал, он находится в системе с именем / dev / sdc1 с идентификатором «12086301109920570165». Что я должен делать?

Спасибо.

Похоже, вы использовали такие имена, как /dev/sda ссылаться на диски. Обычно это не очень хорошая идея, потому что если вашим дискам будут присвоены разные имена после перезагрузки или цикла отключения-повторного подключения, ZFS может запутаться. Вместо этого вы должны создать свой пул, используя файлы устройства в /dev/disk/by-id/, .../by-uuid/, или .../by-label/.

В вашем случае я не совсем уверен, но похоже, что /dev/sdb1 был переименован в /dev/sdc1 после перезагрузки, поэтому /dev/sdc1 похоже, что это часть пула, хотя его нет в zpool status. Вы можете попытаться исправить это, отключив дополнительные диски, которые вы добавили - это, вероятно, позволит меткам вернуться к исходному состоянию, а затем выполнить export с последующим zpool import -d /dev/disk/by-id tank, чтобы заставить ZFS изменить метку пула на основе by-id имена дисков.

Если экспорт не работает из-за занятости, убедитесь, что ни один процесс не обращается к файлам в пуле, и повторите попытку. Я не являюсь пользователем Linux, но, похоже, есть также файл конфигурации, который вы можете использовать, чтобы помочь вам сделать это во время перезагрузки: этот пост на Github предлагает установить USE_DISK_BY_ID='yes' в /etc/default/zfs принудительно во время перезагрузки. В худшем случае вы можете установить это и перезагрузить - при перезагрузке автоматически запускается экспорт / импорт.

Тем не менее, если вы все равно захотите заменить диск, Документы Oracle достаточно хорошо объяснить вариант использования «заменить один неисправный диск зеркала». (Просто игнорируйте инструкции для Solaris по отключению диска с помощью cfgadm.) Я думаю, что основные шаги, которые вы пропустили, были бегом zpool offline tank <faulted disk> перед запуском zpool replace tank <new disk>.