Перейти к основному содержимому

Плановая замена диска в узле

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

Диск в модели vStack Center описан тремя независимыми осями, и путать их — главный источник ошибок в этом сценарии. Ни одна ось не выводится из другой.

ОсьГде видноЧто означаетЧто меняет
ЗдоровьеКолонка Status на табе Disk propsСостояние носителя по фактуУзел, по факту
РольТолько через APIРоль диска: свободен, размечен, член пула, запаснойОпрос диска, метка запасного, снятие метки, замена
Онлайн в кластереТолько через APIДиск выведен в кластерную фабрику и виден всем узламВывод диска в кластер и снятие с кластера

Сама замена — одна операция. Она не «вынимает» диск из корзины: она переводит пул на устройство-донора и запускает ресинхронизацию. Старый диск физически извлекают позже, когда пул перестанет на него опираться.

Операции с физическими дисками, кроме подсветки, в веб-интерфейсе не представлены: замену, метку запасного и снятие диска с кластера выполняет администратор через API — см. Справочник API. Интерфейс в этом сценарии отвечает за другое: показать диск, его место в корзине, состояние пула и ход ресинхронизации.

Замена — самая опасная операция дисковой подсистемы, поэтому у неё своя защита от потери данных. Перед отправкой команды vStack Center сам опрашивает узел о реальной роли донора и отправляет команду только если донор свободен — запасной или неиспользуемый. Если донор занят, если его состояние выяснить не удалось, или если сбойное и новое устройство совпадают, замена отклоняется до отправки на узел. Параллельные замены в один пул не допускаются.

Все команды дисковой подсистемы асинхронные: принятая команда означает «передано агенту узла». Реальный исход приходит ответом узла, и виден он в следующем чтении списка дисков или состояния пула.

Предусловия​

  • роль Cluster master (role_id=1) — её требуют все операции с физическими дисками;
  • признак feature.physical_disc_management — без него закрыта вся дисковая подсистема; признак лежит в опциях кластера;
  • диск-донор в том же узле: свободный или уже помеченный запасным. Донор в другом узле не подойдёт — замена работает в границах одного узла;
  • известны имя пула и путь заменяемого устройства;
  • в пуле не идёт другая замена: одна замена на пул за раз;
  • версия vStack Center — 3.0.5: операции с физическими дисками появились в этом релизе.

Шаг 1. Найти диск и его место в корзине​

Диск нужно опознать трижды: по учётной записи в списке дисков, по пути устройства (его требует команда замены) и по месту в корзине — чтобы вынуть правильный.

  1. Откройте Provider Data Center → Server Nodes и выберите узел, затем разверните блок Disks. Тот же список по пулу лежит на карточке пула в разделе Pool Disks — откройте пул из таблицы ZFS pools раздела Storage Resources.

  2. Переключайте табы: один и тот же список показан разными срезами. Колонка ID связывает строки всех табов между собой, а над таблицей есть поиск (Search in table).

    ТабКолонкиЗачем на этом шаге
    Disk propsID, Model, Size (GB), StatusОпознать модель, размер и здоровье
    ZFS propsPool name, Vdev_pool_name, Vdev_guid, Vdev_pool_guidУбедиться, что диск в нужном пуле
    PlacementEnclosure_device, Enclosure_id, Dev_index, DeviceНайти корзину и слот
    LED on panelLed_fault, Led_locateПроверить, что подсветка включилась
    TimestampsCreated, Last_seenПонять, свежая ли запись о диске
  3. Выпишите узел и Device — они понадобятся для команды замены, а Enclosure_device и Dev_index — для подсветки. Заполненные Pool name и Vdev_pool_name подтверждают, что диск действительно член пула, а не свободный.

Роль диска и признак «выведен в кластер» в этих таблицах не показываются — их отдаёт API. Проверьте их до замены: донора выбирают именно по роли.

Шаг 2. Подсветить диск в корзине​

Ошибка в слоте стоит второго диска, поэтому подсветку включают до выезда в машинный зал. Индикаторов два: «этот» и «отказ».

  1. В блоке Disks карточки узла перейдите на таб Front view или Inner view — у каждого диска там есть кнопки подсветки и индикации отказа.
  2. Включите индикатор «этот» на заменяемом диске.
  3. Проверьте, что индикатор действительно горит: таб LED on panel, колонки Led_fault и Led_locate.

Ту же операцию можно выполнить через API — тогда имя корзины передаётся в формате /dev/sesN, а не так, как оно показано в колонке Enclosure_device. Другой формат отклоняется с кодом -24307, неизвестная корзина — с -24316.

Шаг 3. Снять снимок здоровья пула до операции​

Перед вмешательством зафиксируйте исходную картину — иначе после замены не с чем сравнивать.

  1. Откройте Provider Data Center → Storage Resources. Таблица ZFS pools несёт колонки GUID, Name, Health, Consuming, Scrubbing, Resilvering, Current node и Capacity (RAW).
  2. Запишите Health, Resilvering и Current node заменяемого пула. Плановую замену начинают только со здорового пула: у деградированного порядок другой, он описан в «Восстановлении деградированного пула».
  3. Откройте пул и посмотрите раздел Properties: Capacity, Provisioned, Used и Free покажут, хватит ли места на ресинхронизацию.

Таблица и страница пула отвечают из базы vStack Center и показывают последнее снятое состояние. Живое дерево пула с состоянием каждого устройства отдаёт API — оно понадобится, если картина в интерфейсе разойдётся с фактом.

Шаг 4. Подготовить донора​

Донор должен быть свободен — иначе защита не пропустит команду. «Свободен» означает роль «запасной» или «неиспользуемый». Роль в базе может отставать от реальности, поэтому её сначала актуализируют живым опросом узла.

  1. Найдите кандидатов на карточке узла в блоке Disks: на табе ZFS props у свободного диска пустые Pool name и Vdev_pool_name. Сверьте Size (GB) — донор должен быть не меньше заменяемого.
  2. Обновите роль кандидата живым опросом узла через API: узел отвечает о диске по пути устройства, и vStack Center записывает актуальную роль. Для диска, ещё не учтённого инвентаризацией, опрос ничего не меняет — такой диск сначала нужно инвентаризовать со страницы узла.
  3. Если донор просто свободен, его можно оставить как есть: замена принимает и запасной, и неиспользуемый диск. Если вы держите в узле явный резерв, пометьте диск запасным через API. Операция деструктивная — узел пишет на диск служебную метку, поэтому на диске с живыми данными узел откажет, пока метку не потребуют принудительно.
  4. Перечитайте список дисков и убедитесь, что Pool name у донора остался пустым.

Шаг 5. Выполнить замену​

Теперь одна команда — её выполняет администратор через API. Все проверки проходят до отправки на узел, поэтому ошибочный вызов до диска не доедет.

Что нужно подготовить:

  • узел, в котором стоят оба диска;
  • имя пула, в котором идёт замена;
  • путь заменяемого устройства из колонки Device;
  • путь донора — он должен отличаться от заменяемого устройства.

Принятая команда означает только «отправлено узлу». Реальный исход приходит ответом узла. При успехе новое устройство отмечается как член пула. При провале возвращается ошибка, и старый диск не помечается сбойным автоматически — его роль остаётся прежней.

Шаг 6. Дождаться ресинхронизации​

Пул восстанавливает избыточность самостоятельно, vStack Center только показывает процесс.

  1. Откройте Storage Resources и следите за колонками Resilvering и Health заменяемого пула. Единица в Resilvering означает, что пул восстанавливает избыточность после замены.
  2. Замена считается завершённой, когда Resilvering вернулся к нулю, а Health остался здоровым.
  3. Сверьте состав пула: на карточке пула в разделе Pool Disks, таб Placement, на месте старого диска должен появиться донор.

Прогресс в процентах vStack Center не показывает — есть только признак «идёт или нет». Оценивайте время по объёму пула из раздела Properties.

Шаг 7. Отключить и извлечь старый диск​

Пока диск онлайн в кластере, кластер считает его своим. Перед физическим извлечением снимите этот признак — операция идёт через API и удаляет LUN из фабрики. Диск указывают серийным номером (предпочтительно) или путём устройства.

warning

Не выводите из кластера диск, который всё ещё член активного пула: пул деградирует. Убедитесь по разделу Pool Disks, что пул опирается на донора, а не на старый диск. Узел защищает живую разметку данных и вернёт отказ, но полагаться на этот отказ вместо проверки не стоит.

После вызова перечитайте список дисков: признак «выведен в кластер» у диска снимается. Теперь диск можно вынимать.

Завершение работ​

  1. Погасите оба индикатора: карточка узла → блок Disks → таб Front view или Inner view. Проверьте результат на табе LED on panel.
  2. Восстановите резерв. Донор ушёл в пул, значит запасного диска в узле больше нет: выведите новый диск в кластер и пометьте его запасным через API.
  3. Обновите инвентарь после физических изменений — запустите инвентаризацию узла по классам ses, затем cam. Иначе в списке дисков останется запись про вынутый диск с устаревшим Last_seen.
  4. Сверьте итоговую картину на табе ZFS props: у нового члена пула заполнены Pool name и Vdev_pool_name, у запасного — Pool name пустой.

Проверка результата​

Что проверяемГде смотретьОжидаемо
Пул опирается на новый дискКарточка пула, Pool Disks → PlacementНа месте старого диска стоит донор
Ресинхронизация закончиласьStorage ResourcesResilvering = 0, Health здоровый
Новый диск учтён как член пулаPool Disks → ZFS propsУ донора заполнены Pool name и Vdev_pool_name
Старый диск выведен из кластераЧерез APIПризнак «выведен в кластер» снят
Индикация погашенаБлок Disks → LED on panelLed_fault и Led_locate выключены
Резерв восстановленЧерез APIВ узле есть диск с ролью «запасной» и пустым Pool name

Если не получилось​

Что видитеПочемуЧто делать
Код ошибки -24907Донор не свободен: его роль не «запасной» и не «неиспользуемый»Освободите диск или возьмите другой; роль обновите живым опросом узла
Код ошибки -24908Состояние донора выяснить не удалось: узел не ответил или истёк тайм-аутЗамена отклонена намеренно. Проверьте связь с узлом и повторите опрос диска
Код ошибки -24905Заменяемое и новое устройство совпадаютУкажите разные устройства
Код ошибки -24906В этом пуле уже идёт заменаДождитесь завершения текущей: одна замена на пул
Код ошибки -24902Пул пустой или не существует на узлеСверьте имя пула с колонкой Name таблицы ZFS pools; пул может быть не импортирован на этом узле
Код ошибки -24903Не передан путь заменяемого устройстваВозьмите путь из колонки Device
Код ошибки -24904, -24502, -24402, -24803Путь устройства не прошёл проверку форматаПриведите путь к виду /dev/daN
Код ошибки -24504Над диском уже идёт деструктивная операцияДождитесь ответа узла: два деструктива над одним диском не выполняются
Код ошибки -24503Диск уже помечен запаснымПовтор не нужен, проверьте роль диска
Код ошибки -24603Диск не помечен запасным, снимать нечегоПроверьте роль диска перед снятием метки
Код ошибки -24307Не тот формат имени корзиныПередавайте имя в виде /dev/sesN, а не так, как оно показано в колонке Enclosure_device
Код ошибки -24316Корзина не найденаСверьте Enclosure_id и Enclosure_device на табе Placement; при расхождении переснимите инвентарь
Код ошибки -24311, -24313, -24315Значение индикатора не 0 и не 1 либо не передан ни один индикаторПередайте хотя бы один индикатор значением 0 или 1
Код ошибки -24802Не задан ни серийный номер, ни путь дискаПередайте хотя бы один идентификатор диска
Код ошибки -24901, -24501, -24601, -24801, -24401, -24301, -24201Выключен признак feature.physical_disc_managementВключите управление физическими дисками в опциях кластера
Код ошибки -403Операция открыта только роли Cluster masterВойдите под ролью уровня кластера
Команда принята, а в списке дисков ничего не изменилосьКоманда только передана агенту узла, исход приходит позжеОткройте экраны заново; свежесть смотрите по Last_seen
Метка запасного прошла, роль не измениласьДиск ещё не учтён инвентаризацией — записывать роль некудаЗапустите инвентаризацию узла по классу cam, затем повторите
Пул ушёл в DEGRADED после извлечения дискаДиск вынули до того, как пул перешёл на донораВерните диск в корзину и действуйте по сценарию восстановления
Замена прошла, но избыточности всё равно нетПул опирается на донора, а запасного в узле больше нетВыведите в кластер новый диск и пометьте его запасным

Ограничения​

Проверку целостности пула (scrub) из vStack Center не запустить: такой операции нет. Колонка Scrubbing только сообщает, идёт ли процесс, начатый на узле.

Добавить диск в пул новым устройством vStack Center тоже не умеет — вывод диска в кластер делает его видимым узлам, но состав пула меняется на узле. Замена существующего члена пула — единственная операция над составом пула, доступная из vStack Center.

Свойство пула autoreplace отдаёт API. Если оно выключено, автоматической подстановки запасного диска не будет, и замену всегда запускает администратор.

См. также​

Методы API​

Операции этой страницы в API: pd-list, pd-status-map, pd-led, pd-info, pd-spare, pd-unspare, pd-replace, pd-use, pd-unuse, pd-pools-status, pool-map-by-guid, pools-get, node-inventory — см. Справочник API.