2gusia (2gusia) wrote,
2gusia
2gusia

Category:

Заменяем диск в zfs raidz

Эта запись встает на место одноименной записи от 2013 г. С тех пор много воды утекло, старую я не удаляю. Тем более, что настоящая запись - про замену диска в zfs массиве на именованных gpt разделах. А старая - про другие варианты.

Запись подробна до деталей. Я только что провел всю процедуру на своем NAS и аккуратно документировал все команды и их выхлоп, сопроводив комментариями.
Версия xigmanas 2.1.0.4 - Ingva (revision 7728)
FreeBSD 12.1-RELEASE-p8


1) Итак исходное состояние - у нас выпал из массива один из дисков. Раньше он назывался /dev/gpt/D_ZFN0PARZ - и это имя я ему когда-то дал неспроста. ZFN0PARZ - последние несколько символов серийного номера. Когда диск возьму в руки можно будет убедиться, что не ошибся и не ломаю систему, вместо того, чтобы чинить. И, строго говоря, это не имя диска - это имя раздела, так как zfs пул у меня на разделах. Имена дисков свободно меняются при добавлени новых и отключении старых. А имена разделов - постоянны

17637550633201844329 - уникальный zfs ID старого диска. По нему можно будет указывать его в операции замены. Подобные ID есть и у пула и много еще у чего - но не полезем в дебри.

NB Давайте еще раз большими буквами НЕ СПЕШИТЕ ЗАМЕНЯТЬ ДИСК в подобном случае. По опыту более 90% подобных случаев - проблемы в проводах. Замените SATA кабель, попробуйте переподключить питание. Попробуйте подключить на другой SATA порт. Нет свободного - поменяйте с одним из рабочих дисков этого же пула. Потом верните обратно. Да, от капитана - ВСЕ КОММУТАЦИИ ТОЛЬКО НА ОБЕСТОЧЕННОМ ЖЕЛЕЗЕ. Желательно - вынуть кабель из розетки. А то, знаете, ли - вся электроника работает на белом дыме. Если он выйдет из железки - она больше на работает.

Итак, как выглядит статус нашего массива на именованных GPT разделах при одном отвалившемся диске

nas4free: ~# zpool status Pool
  pool: Pool
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://illumos.org/msg/ZFS-8000-2Q
  scan: resilvered 1.56G in 0h1m with 0 errors on Mon Sep  7 13:20:58 2020
config:

        NAME                      STATE     READ WRITE CKSUM
        Pool                      DEGRADED     0     0     0
          raidz2-0                DEGRADED     0     0     0
            gpt/D_Z300V843        ONLINE       0     0     0
            gpt/D_Z300W3TK        ONLINE       0     0     0
            gpt/D_W300DZ5A        ONLINE       0     0     0
            gpt/D_W300E0RC        ONLINE       0     0     0
            gpt/D_Z30053GL        ONLINE       0     0     0
            gpt/D_Z300PRXX        ONLINE       0     0     0
            17637550633201844329  UNAVAIL      0     0     0  was /dev/gpt/D_ZFN0PARZ
            gpt/D_Z300V7AV        ONLINE       0     0     0

errors: No known data errors


2) Меняем диск физически НА ХОЛОДНУЮ. Отключаем тот что мертвый, серийный номер -ZFN0PARZ (если он жив - отключить может стоит и потом. Но это дилема. Если диск жив здоров и портов хватает - то точно потом. Если он тормозит и сыплется - то его наличие может очень сильно затормозить процесс замены)
ЗАПИСЫВАЕМ НА БУМАЖКУ СЕРИЙНЫЙ НОМЕР нового диска, вставляем его, включаем.

3) Теперь нам надо понять какой номер стал у нового диска
Первым делом вызываем gpart show с ключом -l. Он позволит нам увидеть метки разделов. На старых дисках метки по серийным номерам на месте, но новом - метки если и есть - не такие.

Прим. Портянка вылезает длинная, я ее сокращаю

nas4free: ~# gpart show -l
=>        40  3907029088  ada0  GPT  (1.8T)
          40     4194304     1  gptswap  (2.0G)
     4194344    41943040     2  sparepartition  (20G)
    46137384  3860891736     3  D_WCAZAA099483  (1.8T)
  3907029120           8        - free -  (4.0K)

=>        34  7814037101  da0  GPT  (3.6T)
          34           6       - free -  (3.0K)
          40  7814037088    1  D_Z300V843  (3.6T)
  7814037128           7       - free -  (3.5K)

=>        34  7814037101  da1  GPT  (3.6T)
          34           6       - free -  (3.0K)
          40  7814037088    1  D_Z300W3TK  (3.6T)
  7814037128           7       - free -  (3.5K)

(...)

=>        34  7814037101  da7  GPT  (3.6T)
          34      262144    1  Microsoft reserved partition  (128M)
      262178        2014       - free -  (1.0M)
      264192  7813771264    2  Basic data partition  (3.6T)
  7814035456        1679       - free -  (840K)

=>      63  15728577  da8  MBR  (7.5G)
        63  15165297    1  (null)  [active]  (7.2G)
  15165360    563280       - free -  (275M)

=>       0  15165297  da8s1  BSD  (7.2G)
         0      8129         - free -  (4.0M)
      8129  15155200      1  (null)  (7.2G)
  15163329      1968         - free -  (984K)


Пациент - da7 Я его проверял полным форматированием виндах, он несет виндовые разделы.
Проверяем еще раз - 7 раз отмерь, как говорится
nas4free: ~# gpart show -l da7
=>        34  7814037101  da7  GPT  (3.6T)
          34      262144    1  Microsoft reserved partition  (128M)
      262178        2014       - free -  (1.0M)
      264192  7813771264    2  Basic data partition  (3.6T)
  7814035456        1679       - free -  (840K)

Точно он! Но не вредно проветить еще раз - смотрим физические диски
nas4free: ~# camcontrol devlist
{ATA ST4000DM000-1F21 CC52}        at scbus0 target 4 lun 0 (pass0,da0)
{ATA ST4000DM000-1CD1 CC43}        at scbus0 target 5 lun 0 (pass1,da1)
{ATA ST4000DM000-1F21 CC52}        at scbus0 target 6 lun 0 (pass2,da2)
{ATA ST4000DM000-1F21 CC52}        at scbus0 target 7 lun 0 (pass3,da3)
{ATA ST4000DM000-1F21 CC51}        at scbus0 target 8 lun 0 (pass4,da4)
{ATA ST4000DM000-1F21 CC52}        at scbus0 target 9 lun 0 (pass5,da5)
{ATA ST4000DM000-1F21 CC52}        at scbus0 target 11 lun 0 (pass6,da6)
{ATA ST4000VX000-2AG1 CV11}        at scbus0 target 15 lun 0 (pass7,da7)
{WDC WD20EARS-00MVWB0 51.0AB51}    at scbus1 target 0 lun 0 (pass8,ada0)
{AHCI SGPIO Enclosure 1.00 0001}   at scbus2 target 0 lun 0 (ses0,pass9)
{SMI USB DISK 1100}                at scbus3 target 0 lun 0 (pass10,da8)

Видно, что da7 действительно другой модели. И вы ее должны знать, тк диск только что купили.

NB. У меня диски сидят на SAS контроллере, поэтому они daX. У вас, скорее всего - на SATA, поэтому будут adaX, как мой WDC WD20EARS

NB Движок ЖЖ не выносит угловых скобок - выше я руками заменил их на фигурные

4) Теперь, трижды убедившись, что работаем именно над нужным диском (ошибка - потеряданных) подготавливаем его? создав раздел с нужным именем.
Сначала убиваем остатки zfs пула - если был когда то на этом диске
nas4free: ~# zpool labelclear da7
failed to read label from /dev/da7

Как видим - следов zfs на диске не найдено
Теперь убиваем таблицу разделов на нем. Причем форсированно, так как таблица не пустая. И создаем новую.
nas4free: ~# gpart destroy -F da7
da7 destroyed
nas4free: ~# gpart create -s GPT /dev/da7
da7 created

Создаем раздел во весь диск с правильной меткой, взятой и серийного номера нашего диска.
Номер можно было посмотреть на этикетке (если забыли - не проблема - импортировать диски через вебгуй и в информационной секции посмотреть серийный номер - исполняем п 6 прямо сейчас, потом придется повторить тк диск еще не zfs)

и сразу проверяем что получилось
40 7814037088 da7 GPT (3.6T)
40 7814037088 1 D_WDH04N0T (3.6T)</pre>
5) Замена
Нам осталась всего одна команда до замены. Но процесс очень длительный и я
NB настоятельно рекомендую давать эту команду, когда NAS подключен к источнику беспербойного питания. Я сам этим пренебрег - и получил сеанс плясок с бубном и материал для отдельного поста :)

Итак готовы? Поехали!
Здесь длинное число 17637550633201844329 мы узнали в п 1. А имя раздела - только что задали сами.
nas4free: ~# zpool replace Pool 17637550633201844329 /dev/gpt/D_WDH04N0T

Начинается длинный процесс. Его можно изредка посматривать и в гуе и в командной строке. Длительность зависит от скорости и объема дисков, заполнения пула, скорости процессора. У меня занимает между 10 и 20 часами. Оценку оставшегося времени можно посмотреть. Прерывать процесс очень нежелательно, но не смертельно. Данные вы вряд ли потеряете, но пляски с бубном - возможны.
nas4free: ~# zpool status
  pool: Pool
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Mon Sep  7 10:55:40 2020
        20.0T scanned at 881M/s, 18.9T issued at 832M/s, 24.9T total
        2.31T resilvered, 75.81% done, 0 days 02:06:43 to go
config:

        NAME                        STATE     READ WRITE CKSUM
        Pool                        DEGRADED     0     0     0
          raidz2-0                  DEGRADED     0     0     0
            gpt/D_Z300V843          ONLINE       0     0     0
            gpt/D_Z300W3TK          ONLINE       0     0     0
            gpt/D_W300DZ5A          ONLINE       0     0     0
            gpt/D_W300E0RC          ONLINE       0     0     0
            gpt/D_Z30053GL          ONLINE       0     0     0
            gpt/D_Z300PRXX          ONLINE       0     0     0
            replacing-6             DEGRADED     0     0     0
              17637550633201844329  UNAVAIL      0     0     0  was /dev/gpt/D_ZFN0PARZ
              gpt/D_WDH04N0T        ONLINE       0     0     0
            gpt/D_Z300V7AV          ONLINE       0     0     0

errors: No known data errors

Наконец, процесс завершен
nas4free: ~# zpool status
  pool: Pool
 state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
        still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.
  scan: resilvered 3.05T in 0 days 14:15:38 with 0 errors on Tue Sep  8 01:11:18 2020
config:

        NAME                STATE     READ WRITE CKSUM
        Pool                ONLINE       0     0     0
          raidz2-0          ONLINE       0     0     0
            gpt/D_Z300V843  ONLINE       0     0     0
            gpt/D_Z300W3TK  ONLINE       0     0     0
            gpt/D_W300DZ5A  ONLINE       0     0     0
            gpt/D_W300E0RC  ONLINE       0     0     0
            gpt/D_Z30053GL  ONLINE       0     0     0
            gpt/D_Z300PRXX  ONLINE       0     0     0
            gpt/D_WDH04N0T  ONLINE       0     0     0
            gpt/D_Z300V7AV  ONLINE       0     0     0

errors: No known data errors

В принципе, массив рабочий - но осталось актуализировать информацию о нем в конфиге, чтобы вебгуй не путался в показаниях.

6) Идем в вебгуй и видим, что у нас диск сменился (кстати, он уже da6 - не обращаем внимание, эти номера зависят от погоды на Марсе и при подключении-отключении дисков менются)
чистить конфиг - потом трачу несколько минут на восстановления параметров дисков - какой у них APM, AAM и чтобы диски показывали SMART (под гаечным ключем это).

Вероятно, можно и не нажимать галочку - так ни разу и не проверил
Система говорит - все поняла, готова исполнить - то есть дает вам возможность еще раз все проверить

Соглашаемся и видим нормальную картину. Кстати, именно здесь можно смотреть серийные номера дисков

Tags: nas, xigmanas, zfs, железо
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 39 comments