Это несколько теоретический вопрос о ZFS и RAID-Z. Я буду использовать трехдисковый массив с одинарной четностью в качестве примера для ясности, но проблема может быть распространена на любое количество дисков и любую четность.
Предположим, у нас есть диски A, B и C в пуле, и он чистый.
Предположим теперь, что мы физически добавляем диск D с намерением заменить диск C, и этот диск C все еще функционирует правильно и заменяется только в рамках профилактического обслуживания. Некоторые администраторы могут просто выдернуть C и установить D, что немного более организовано, поскольку устройства не нуждаются в изменении идентификаторов - однако это приводит к временной деградации массива, поэтому для этого примера предположим, что мы устанавливаем D без отключения или удаления C.Документы Solaris указывают, что мы можем заменить диск, не отключая его предварительно, используя такую команду, как:
zpool replace pool C D
Это должно вызвать перенастройку на D. Скажем, переназначение происходит «вниз» вдоль «курсора». (Я не знаю фактической терминологии, используемой во внутренней реализации.)
Предположим теперь, что в середине перенастройки диск A выходит из строя. Теоретически это должно быть исправлено, так как над курсорами B и D имеется достаточная четность, а под курсорами B и C - достаточная четность. Однако, действительно ли это исправимо, зависит от внутренних проектных решений в ZFS, о которых я не знаю (и о которых в руководстве не говорится в определенных терминах).
Если ZFS продолжает отправлять записи в C под курсором, все в порядке. Если, однако, ZFS внутренне обрабатывает C так, как будто его больше нет, перенастраивая D только на основе четности между A и B и записывая только A и B под курсором, то мы тост.
Некоторые эксперименты могли бы ответить на этот вопрос, но я надеялся, что, возможно, кто-то здесь уже знает, каким образом ZFS справляется с этой ситуацией. Заранее благодарим вас за понимание!
Тестирование с файловым пулом (v28 на FreeBSD 8.3 с использованием файловых устройств MD) показывает, что он должен работать. Мне удалось отключить один из оставшихся дисков, пока выполнялась перенастройка. В идеале потребовалось бы тестирование с реальными дисками и на самом деле вытащить один, чтобы быть уверенным на 100%, но ZFS была совершенно счастлива позволить мне отключить диск.
Перед отключением md0 пул все еще был полностью ОНЛАЙН, поэтому мне кажется, что ZFS просто зеркалирует замененный диск на новый диск, но по-прежнему обрабатывает весь массив как доступный во время процесса.
NAME STATE READ WRITE CKSUM
test DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
8480467682579886773 OFFLINE 0 0 0 was /dev/md0
md1 ONLINE 0 0 0
replacing-2 ONLINE 0 0 0
md2 ONLINE 0 0 0
md3 ONLINE 0 0 0 (resilvering)
Диск C по-прежнему используется в RAIDZ точно так же, как и до его удаления из VDev. Как указывает Мэтт, ZFS заменяет диск, делая заменяющий диск зеркалом заменяемого и перенастраивая заменяемый диск. RAIDZ VDev никогда не ухудшается и никогда не восстанавливается (до тех пор, пока A не откажет, что полностью отделено от операции замены).
Я не уверен, что это имеет значение.
В большинстве случаев, вы не должны использовать RAIDZ, по сравнению с зеркалами ... Если да, то нужно делать это с запасным.
Повторное обновление не удастся, если один из дисков, с которого он читает, выйдет из строя или недоступен. То же, что и Неустранимая ошибка чтения. Диск C к этому моменту исчезнет ...