Я новичок в 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 жестких дисков)
Итак, вот мои вопросы:
РЕДАКТИРОВАТЬ: Даже хуже для 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, разработанных Sun, было много похожих дисков, количество от 18 до 48 дисков не было редкостью. Они состояли из нескольких vdev, например 4 x RAID Z2 для 24 дисковой системы. Кроме того, ими руководил специальный администратор, но никто не может работать круглосуточно. Поэтому им нужно было что-то в качестве первого ответа, и это должно было работать на всех vdev, потому что любой диск мог выйти из строя в любой момент.
Итак, если поздно ночью диск во втором vdev выходит из строя, система автоматически берет один из двух настроенных запасных и заменяет неисправный диск, чтобы пул работал как обычно (такая же производительность для клиентов, которые используют веб-сайт, база данных которого работает на нем. , например). Утром администратор читает отчет о сбое и устраняет причину:
Если вы подумаете об этом так, как инженеры разработали для наиболее распространенного ожидаемого сценария использования, это будет иметь гораздо больший смысл. Это не означает, что вы должны делать именно так, как описано, это просто может быть причиной такого поведения.
Почему замены диска C недостаточно для восстановления полного пула? Как объясняется в блоге оракула и здесь, я ожидал, что мне не придется отсоединять диск для zfs, чтобы правильно восстановить пул (и гораздо лучше сохранить в статусе zpool следы отключенного диска для удобства обслуживания)
Как видно выше, вы можете либо заменить диск пула другим, либо самим собой (запасной будет свободен и продолжит работать как запасной), либо вы можете отсоединить диск пула, тогда как запасной диск навсегда возьмет на себя роль диска пула, и вы нужно добавить еще один запасной вручную с zpool add poolname spare diskname
(это может быть отсоединенный диск или новый).
Почему zpool все время говорит мне, что запасные диски «заняты» (а на самом деле нет)?
Я предполагаю, что это было из-за выдающегося ввода-вывода. Это могло бы объяснить, почему для завершения операции потребовалось мгновение.
См. Ниже: как я могу автоматически вернуть свой запасной диск?
zpool replace
(вместо того, чтобы отсоединять его). Шаг отсоединения необходим только для запасного диска после замены диска пула и если у вас нет автоматического управления (что, на мой взгляд, не имеет смысла, за исключением конкретных макетов пула и ситуаций администратора).