zfs - hotspare, replace, detach: ressource is busy

Я новичок в 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.

Так что я ' m ждал несколько секунд, чтобы разрешить повторное обновление (с 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 отсоединю диск C (как объяснено здесь ), мой пул снова подключается к сети, и все работает нормально (с пулом только с 5 жесткими дисками)


Вот мои вопросы:

  1. Почему замены диска C недостаточно для восстановления полного пула? Как объяснил в блоге Oracle и здесь тоже Я ожидал, что мне не придется отсоединять диск для 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 
5
задан 17 March 2017 в 14:35
1 ответ

Короткая версия:

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Теги

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