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

zfs - горячий резерв, заменить, отсоединить: ресурс занят

Я новичок в zfsonlinux. Мне только что удалось настроить новый сервер с Debian ROOT на ZFS. Все работает нормально, но у меня проблема с горячим резервом и заменой дисков.

Вот мой бассейн:

NAME                            STATE     READ WRITE CKSUM
mpool                           ONLINE       0     0     0
  mirror-0                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1    ONLINE       0     0     0
  mirror-1                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXC-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1    ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1      AVAIL   
  ata-ST1XXXXXXXXXXF-part1      AVAIL  

Теперь я могу начать самое интересное. Диск вытаскивает! Я сейчас отключаю диск C. У меня есть рабочий пул, но УНИЧТОЖЕННЫЙ (как и ожидалось):

NAME                            STATE     READ WRITE CKSUM
mpool                           ONLINE       0     0     0
  mirror-0                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1    ONLINE       0     0     0
  mirror-1                      DEGRADED     0     0     0
    ata-ST1XXXXXXXXXXC-part1    UNAVAIL      0     0     0
    ata-ST1XXXXXXXXXXD-part1    ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1      AVAIL   
  ata-ST1XXXXXXXXXXF-part1      AVAIL   

Все идет нормально. Но когда я пытаюсь заменить диск C, скажем, диском E, я все равно застреваю с УНИЧТОЖЕННЫМ пулом.

# zpool replace mpool ata-ST1XXXXXXXXXXC-part1 ata-ST1XXXXXXXXXXE-part1
cannot open '/dev/disk/by-id/ata-ST1XXXXXXXXXXE-part1': Device or ressource busy
(and after a few sec)
Make sure to wait until resilver is done before rebooting.

Итак, я жду несколько секунд, чтобы разрешить повторное обновление (с 0 ошибками), тогда у меня есть:

NAME                                STATE     READ WRITE CKSUM
mpool                               ONLINE       0     0     0
  mirror-0                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1        ONLINE       0     0     0
  mirror-1                          DEGRADED     0     0     0
    spare-0                         UNAVAIL
        ata-ST1XXXXXXXXXXC-part1    UNAVAIL      0     0     0
        ata-ST1XXXXXXXXXXE-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1        ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1          INUSE       currently in use   
  ata-ST1XXXXXXXXXXF-part1          AVAIL   

Тогда если я zpool detach диск C (как объяснено Вот) мой пул снова подключается к сети, и все работает нормально (с пулом всего 5 жестких дисков)


Итак, вот мои вопросы:

  1. Почему замены диска C недостаточно для восстановления полного пула? Как объяснено в блоге оракула и здесь тоже Я ожидал, что я не необходимо отсоединить диск для zfs, чтобы правильно восстановить пул (и гораздо лучше сохранить в статусе zpool следы отключенного диска для удобства обслуживания)
  2. Почему zpool все время говорит мне, что запасные диски «заняты» (а на самом деле нет)?
  3. См. Ниже: как я могу автоматически вернуть свой запасной диск?

РЕДАКТИРОВАТЬ: Даже хуже для question1 => Когда я снова подключаю диск C, zfs не управляет моей запасной! Так что у меня на один диск меньше

NAME                                STATE     READ WRITE CKSUM
mpool                               ONLINE       0     0     0
  mirror-0                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1        ONLINE       0     0     0
  mirror-1                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXE-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1        ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXF-part1          AVAIL 

Укороченная версия:

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

Кроме того, я помню, что ZoL не имеет автоматического подключения / отсоединения запчастей в зависимости от событий, вам нужно написать собственный сценарий или использовать что-то вроде Демон событий ZFS.


Длинная версия:

Что касается вашего последующего комментария

Если диск C неисправен, хорошо, давайте заменим его, а затем отсоединим. Но он забил мой пул, потому что zpool не помнил, что у меня был диск C в зеркале-1: /

Это зависит от того, как вы это видите. Если отсоединить диск от зеркала, это уже не актуально. Он может быть неисправен, он может быть использован в другой системе, он может быть заменен по гарантии производителя. Что бы с ним ни делали, вашему бассейну все равно.

Если вы просто отсоедините диск, он выйдет из строя; если вместо этого вы поставите другой диск (из автоматического запасного, ручного запасного или полностью ручного), этот диск возьмет на себя роль старого диска (отсюда и термин replace, новый диск полностью заменяет старый по своему положению и функциям).

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

Как запчасти работают в системах ZFS

Запасные части действительно имеют смысл только при автоматической активации. В массивах хранения ZFS, разработанных Sun, было много похожих дисков, количество от 18 до 48 дисков не было редкостью. Они состояли из нескольких vdev, например 4 x RAID Z2 для 24 дисковой системы. Кроме того, ими руководил специальный администратор, но никто не может работать круглосуточно. Поэтому им нужно было что-то в качестве первого ответа, и это должно было работать на всех vdev, потому что любой диск мог выйти из строя в любой момент.

Итак, если поздно ночью диск во втором vdev выходит из строя, система автоматически берет один из двух настроенных запасных и заменяет неисправный диск, чтобы пул работал как обычно (такая же производительность для клиентов, которые используют веб-сайт, база данных которого работает на нем. , например). Утром администратор читает отчет о сбое и устраняет причину:

  • Если диск умер, он может заменить его новым диском в том же лотке, позволить ему восстановиться, а затем горячий запас автоматически возвращается в резерв, наблюдая за другим мертвым диском, где он может выполнить первый ответ.
  • Если запасной диск недоступен, он может даже сделать запасной новый диск с данными, временно уменьшив количество запасных на 1 (до тех пор, пока не будет отправлен другой заменяющий диск, который станет новым запасным).
  • Если это была ошибка контроллера, сбросившего диск, он мог бы даже заменить его самим собой, запустив такое же резервное обновление, как и в первом случае.

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

Ответы на ваши вопросы

Почему замены диска C недостаточно для восстановления полного пула? Как объясняется в блоге оракула и здесь, я ожидал, что мне не придется отсоединять диск для zfs, чтобы правильно восстановить пул (и гораздо лучше сохранить в статусе zpool следы отключенного диска для удобства обслуживания)

Как видно выше, вы можете либо заменить диск пула другим, либо самим собой (запасной будет свободен и продолжит работать как запасной), либо вы можете отсоединить диск пула, тогда как запасной диск навсегда возьмет на себя роль диска пула, и вы нужно добавить еще один запасной вручную с zpool add poolname spare diskname (это может быть отсоединенный диск или новый).

Почему zpool все время говорит мне, что запасные диски «заняты» (а на самом деле нет)?

Я предполагаю, что это было из-за выдающегося ввода-вывода. Это могло бы объяснить, почему для завершения операции потребовалось мгновение.

См. Ниже: как я могу автоматически вернуть свой запасной диск?

  • Включить автоматическую замену запасных частей (по умолчанию в Solaris / illumos, немного хлопот в Linux)
  • Замените неисправный диск пула на zpool replace (вместо того, чтобы отсоединять его). Шаг отсоединения необходим только для запасного диска после замены диска пула и если у вас нет автоматического управления (что, на мой взгляд, не имеет смысла, за исключением конкретных макетов пула и ситуаций администратора).