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

Заменяем диск в 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 0h2m 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 (под гаечным ключем это).

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

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

Добавление дисков в NAS4Free — gotoADM.ru

Добавление дисков в NAS4Free

Данная статья немного нарушает последовательность записей, посвященных организации отказоустойчивого файлового хранилища на основе NAS4Free и файловой системы ZFS. Но тем не менее будет полезна ИТ специалистам и «всем интерисующимся», т. к. поможет выполнить добавление дисков в NAS4Free уже после конфигурации системы. Для начала немного пред истории и дополнительной информации.

На днях отыскал в своих «запасах» новый жесткий диск Seagate Laptop Thin HDD ST500LT012-9WS142 (500Gb, 5400 rpm, 8 mb cache) — то что нужно для хранения музыкальной коллекции. Подключив данный HDD к хранилищу и зайдя в веб-интерфейс управления NAS4Free, столкнулся со следующей ситуацией. Диск определяется, его можно импортировать на соответствующей вкладке: Диски — Управление — добавить диск, нажав на «+».  При этом будет доступна функция форматирования диска, а также включение S.M.A.R.T. режима.

Добавив и отформатировав диск (в моем случае используется файловая система ZFS), необходимо перейти к последующей его настройке, но диск более нигде не доступен (не отображается)!

В используемом сетевом хранилище задействована файловая система ZFS. Два диска сконфигурированы в режим Mirror (зеркало) и предназначены для хранения важных данных и backup’ов. Третий диск должен выполнять функции по хранения медиа файлов, при этом решено было его организовать в отельный ZFS Pool. Стоит отметить — файловая система ZFS прекрасно работает на «голых»/чистых/не размеченных дисках, но бывают ситуации, связанные с переносом и модификаций хранилища (в том числе при замене и добавлении дисков), когда могут возникнуть конфликты портов.

Суть в том, что во FreeBSD и производной от нее — NAS4Free используется принцип «всё — файл». Устройства, каталоги, файлы, порты устройств — все элементы системы представлены однотипно и в виде файлов. При этом имеется одна неприятная особенность — дисковые устройства нумеруются по мере обнаружения. Поэтому, если к хранилищу подключить новый HDD, то после перезагрузки имена устройств могут сместиться. С такой ситуацией я и столкнулся. Несмотря на это, ZFS спокойно собирает пул, в котором могут быть перепутаны не только порты, но и заменен RAID-контроллер. Использование GPT разметки на дисках поможет избежать лишних конфликтов портов и устройств, повысит дополнительно отказоустойчивость системы в целом, снизит потребность в ее обслуживании. Также GPT разметка полезна при переносе ZFS Pool’а на другую операционную систему.

Чтобы завершить добавление диска, а также создание ZFS pool’а необходимо подключиться по SSH к нашему хранилищу и выполнить ряд операций в консоли. В моем случае используется диск /ada0, если дисков несколько — выполняйте команды для каждого из них. При этом всегда придет на помощь краткий список основных команд для ZFS.

  • очищаем информацию о разметке на диске

zpool labelclear /dev/ada0

  • создаем GPT таблицу

gpart create -s GPT /dev/ada0

  • Создаем выровненный по 4k раздел. При этом удобнее всего создавать метки для разделов по их модели или серийному номеру (или части этой информации).

gpart add -t freebsd-zfs -l ST500L -a 4K /dev/ada0

  • Создаем устройство с конкретным указанием 4K секторов (поверх ранее созданного раздела). Стоит отметить — для raidz, raidz2 а также mirror достаточно выполнить указанную операцию только для одного диска. Если же вы создаёте страйп (аналог raid 0), то эту команду необходимо выполнить для каждого диска массива.

gnop create -S 4096 /dev/gpt/ST500L

  • Создаем ZFS Pool. Перед выполнением команды небольшой комментарий: /mnt/pool2 — место монтирования создаваемого пула данных, следующее значение является названием пула (pool2), далее указывается режим/формат создаваемого пула (например, raidz)- в нашем случае используется один диск, поэтому значение не указано. Если вы конфигурируете несколько дисков и команда становится слишком длинной, для того чтобы она отработала корректно — необходимо указать символ «\» (переход на другую строку).

zpool create -m /mnt/pool2 pool2 /dev/gpt/ST500L.nop

  • Выполняем небольшие оптимизации по работе пула (отказ от записи времени доступа к файлам повысит скорость доступа к файлам).

zfs set atime=off pool2

zfs set checksum=fletcher4 pool2

  • Экспортируем и импортируем пул, убирая лишний элемент (прокладку) в лице gnop устройства:

zpool export pool2

gnop destroy /dev/gpt/ST500L.nop

zpool import -d /dev/gpt pool2

  • Оптимизация (по желанию), связанная с назначением на указанный датасет настройки, недопускающей создания «кривых» имен файлов:

zfs create -o utf8only=on pool2/MediaBox

  • Последнее действие — назначение прав на созданный ZFS Pool:

chmod -R 777 /mnt/pool2

Последним этапом в добавлении диска и создании пула данных (ZFS Pool) является импорт созданного пула в веб-интерфейсе NAS4Free и настройка поведения дисков.


Нашли ошибку в тексте? Выделите фрагмент текста и нажмите Ctrl+Enter

Сбой замены диска во время nas4free ZFS resilver

 ID# НАЗВАНИЕ_АТРИБУТА ЗНАЧЕНИЕ ФЛАГА ХУДШИЙ ТИП ПОРОГА ОБНОВЛЕНО WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct 0x0033 001 001 005 До отказа Всегда FAILING_NOW 0
197 Current_Pending_Sector 0x0022 001 001 000 Old_age Всегда - 2000
 

Мне кажется, у тебя лимон. Такие вещи случаются; RMA диск и получите замену. При недавней покупке, предположительно низком количестве часов работы и сбоях, указанных SMART, это не должно быть проблемой. Если реселлер поднимает шумиху по этому поводу, найдите другого реселлера и начните делать покупки у него.

1) Как отключить плохой диск? Так же, как я всегда делаю?

Вы всегда можете отключить диск, используя zpool offline . Просто будьте осторожны, чтобы оставаться выше порога избыточности пула. (Я не думаю, что ZFS позволит вам без принуждения удалить диск, из-за которого пул станет ниже порога избыточности, и может даже не сделать этого, но легко попасть в ловушку добавления -f не задумываясь о последствиях.)

2) Остановит ли «автономный режим» плохой диск процесс восстановления?

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

3) После замены неисправного диска и выполнения команды zpool replace запустится ли resilver снова автоматически?

Вам может понадобиться zpool online новый диск, так как старый был взят offline , но я так не думаю. Концептуально, zpool replace — это то же самое, что и zpool attach , за которым следует zpool detach (но вы не можете присоединить/ отсоединить устройства в рейдз-вдеве).

Что касается ZFS, то для замены нового диска потребуется resilver, поэтому будет запущен resilver.

Тем не менее, эта часть вашего вопроса мне запомнилась:

четыре диска по 2 ТБ RaidZ1. Раз в год я делаю полную резервную копию, отключаю самый старый диск, заменяю его новым диском и запускаю команду «zpool replace mytank /dev/ada0»,

Я бы посоветовал вам не удалять старый диск перед установкой нового, особенно , если он работает сносно. (у меня диск начал извергать ошибки от простого думал размещения на нем ввода-вывода, и в таком случае разумным выбором может быть отключение или удаление проблемного диска.) Вместо этого подключите новый диск вместе со старым и zpool replace <новый> . Делая это, вы получаете преимущество избыточности в пуле; затем, если какой-либо из других дисков столкнется с проблемой во время резервного копирования, шансы на то, что система сможет справиться с этим изящно и без потери данных, намного выше.

По крайней мере, очень , выполните очистку zpool до завершения в пуле непосредственно перед отключением заменяемого диска.

импорт — изменена буква диска zfs. как повторно импортировать по идентификатору

У меня было отключение питания, из-за которого мои диски перетасовывали свое назначение. /dev/sdk теперь назначается диску в другом пуле. Я искал вокруг, но пока не нашел правильного способа назначить диск/по идентификатору/списку сломанному пулу, поскольку диск все еще существует без ошибок.

Я пробовал zpool import -d /dev/disk/by-id/scsi-SATA_HGST.... <дисковый пул> , но ошибка с пулом существует . вот список пула

 ИМЯ СОСТОЯНИЕ ЧТЕНИЕ ЗАПИСЬ CKSUM
диски ДЕГРАДИРОВАННЫЕ 0 0 0
 зеркало-0 ДЕГРАДАЦИЯ 0 0 0
  6016369452066203690 НЕДОСТУПЕН 0 0 0 был /dev/sdk1
  sdj ОНЛАЙН 0 0 0
 

ранее у меня были записаны диски и их отображение sdX

 scsi-SATA_HGST_HUS726060AL_AR31051EJP72EJ -> ../../sdk
 

, который теперь

 scsi-SHGST_HUS726060AL5210_K1GJGWED -> ../../sdk
 

, а прежний sdk теперь [который был частью пула дисков]

 scsi-SATA_HGST_HUS726060AL_AR31051EJP72EJ -> ../../sdl
 
  • zfs
  • import

Во-первых: Параметр import -d предназначен не для указания дисков, а для указания каталога, в котором они находятся:

 импорт zpool [-d каталог | -c кеш-файл] [-D]
    Список пулов, доступных для импорта. Если параметр -d не указан, эта команда ищет устройства в «/dev/dsk».  Опцию -d можно указать несколько раз, и поиск будет выполняться во всех каталогах.
...
    -d директор
    Ищет устройства или файлы в каталоге. Опцию -d можно указывать несколько раз.
...
 

Для получения дополнительной информации об использовании zpool см. man zpool .

О диске, который оказался в другом пуле: я не могу представить, как это произошло. Попробуйте удалить его из другого пула с помощью zfs remove

Следующее должно импортировать ваш пул с идентификатором диска:

  1. Попробуйте zpool import без каких-либо аргументов, он должен перечислить вам доступные пулы.

  2. Импорт пула по имени с помощью zpool import

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

  4. экспортировать пул с помощью zpool экспортировать

  5. затем повторно импортируйте с помощью zpool import -d /dev/disk/by-id/ , указав только каталог, а не сами файлы дисков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *