Снова большая задача на несколько дней. У нас имеется динамический зеркальный массив в Windows Server 2016, собранный из двух одинаковых NVMe дисков. Объём массива около 3 ТБ и используется под 1С. Естественно, места стало не хватать. Были закуплены два других NVMe диска на 6 ТБ. Нужно перенести динамический массив на новые диски.
Проблема в том, что сервер, на котором всё это работает, поддерживает установку только двух NVMe дисков, все слоты заняты. Нам придётся по очереди заменить диски в массиве и расширить его.
Вторая проблема состоит в том, что сервер нельзя отключать, и 1С нельзя останавливать. Всё как мы любим. Удалось договориться о возможной кратковременной остановке служб, не более 5 минут.
Disk Management (Управление дисками), здесь можно посмотреть на наш массив.
Диск D: находится на двух физических NVMe дисках:
NVMe диск WD Ultrastar DC SN840 3.2TB — 0TS1876
Состояние массива Healthy.
Забегая вперёд. Мне удалось без остановки сервисов заменить диски на двух таких серверах, но есть нюанс, о котором будет рассказано далее. Шансы обойтись без остановки сервисов: 50/50, это связано с одной неприятной особенностью динамических массивов, которая мне непонятна, неприятна и просто вредна.
Диск D: свободен на 49%, но это только потому, что часть баз данных я смог перенести временно на соседний сервер.
Пришли новые диски:
Intel SSD 6.4 ТБ U.2 — SSDPF2KE064T1
Подготовка к замене первого диска
Перед тем как извлекать диск, нужно разобрать наш динамический массив.
Нажимаем правой копкой на любой из дисков D:, не имеет значения на какой. Выбираем Break Mirrored Volume.
Нас предупреждают, что после этого процесса данные на дисках перестанут быть идентичны. Yes.
Наш динамический зеркальный массив перестал быть массивом и разбился на два отдельных динамических диска, один из них остался диском D:, а второй теперь стал E:.
И вот этот момент мне совсем не понравился. Распределение букв у дисков происходит случайным образом и не зависит от того, на каком диске вы нажали правой кнопкой, когда разбирали массив. Я несколько раз пробовал разбирать зеркало на одном и том же массиве: каждый раз обозначение дисков происходило случайным образом. Это настолько дебильная недоработка, что использовать динамические зеркальные массивы в критических средах становится просто невозможно.
В нашем случае нам без разницы какой из дисков остался D:. Сейчас это Disk 1, с ним продолжает работать база данных, его мы не трогаем.
Диск E: нам не нужен.
Нажимаем правой кнопкой на том E:, Delete Volume...
Данные на диске E: будут удалены, но они нам и не нужны. Yes.
На Disk 0 теперь неразмеченная область, этот физический диск мы будем менять первым.
Перед нами возникает вторая трудность, нам нужно узнать серийный номер того диска, который будем извлекать, а именно серийный номер Disk 0. К сожалению, стандартными средствами операционной системы я не смог узнать серийник, пришлось воспользоваться сторонним ПО.
Нужный диск так и отмечен Disk 0, записываем серийный номер A07B8F5A.
Windows Server 2016 поддерживает горячее извлечение дисков. В трее нажимаем соответствующую кнопку и даём команду на извлечение диска. Не перепутайте с диском D:, модель та же, но он подписан. Eject.
Нам сообщают, что устройство может быть извлечено.
И вот тут снова какой-то косяк. Диск остался в режиме Online, а это нехорошо. Непонятно, почему диск не отключился, придётся поработать руками.
Нажимаем правой кнопкой на Disk 0 и переводим его в Offline.
Disk 0 в статусе Offline. Теперь можно извлекать диск.
Замена первого диска
Приезжаю в ЦОД с новым диском. Возникает вопрос, что вытаскивать?
На вид оба диска одинаковые, мигают из-за разной нагрузки по-разному, конечно, но ошибиться не хочется. Если бы сервер можно было выключить, то мы просто бы извлекли диски и по серийному номеру вычислили нужный, но выключать сервер нельзя. Нам нужно подсветить диск.
Почти во всех серверах и СХД есть механизм, позволяющий "подсветить диск". Где-то это реализовано в веб-интерфейсе для управления сервером (IMM, iLO, IPMI, и прочих BMC). Где-то есть возможность включить подсветку через команду CLI.
В последних серверах Supermicro в web-интерфейсе управления IPMI для управления NVMe дисками имеется отдельный раздел Server Health → Storage Monitoring. Во вкладке Physical View как раз можно посмотреть список имеющихся дисков и информацию о них: модель, производителя, серийный номер, температуру и пр. Дополнительно имеется возможность выполнить ряд операций с этими дисками. Мы просто находим нужный диск по серийному номеру и подсвечиваем его.
В моей модели сервера была проблема, диск не хотел подсвечиваться, решение в отдельной статье:
Supermicro — подсвечиваем NVMe диск
Находим по серийному номеру нужный диск.
И подсвечиваем, Blink.
Диск замигал, теперь мы знаем его местоположение.
В выпадающем списке Available Actions выбираем Eject, выделяем галкой нужный диск и нажимаем Apply. Но есть один нюанс, кнопка не активна, не нажимается, не работает. Проблема та же самая, что и с подсветкой, решаем её.
Supermicro — извлекаем NVMe диск
Eject. Yes.
Индикатор диска станет зелёным, можно извлекать.
? Индикация дисков
? solid on — диск установлен
? blinking — I/O активность
? solid on — сбой
? blinking 1 Гц — перестроение
? blinking 2+1 1 Гц — hot spare
? blinking 1 на 5 сек — drive power on
? blinking 4 Гц — идентификация ?
? solid on — можно извлечь
? blinking 1 Гц — внимание, не извлекать
Извлекаем диск, проверяем что мы не ошиблись, что серийный номер диска тот что нам нужен, что система не упала.
Disk 0 пропал в системе.
Ждём 5 минут, перекручиваем салазки на новый диск и вставляем его.
Убеждаемся что диск отобразился в веб-интерфейсе IPMI. Если диска там нет и на вставленном диске продолжает гореть зелёный светодиод, то снова извлекаем диск и вставляем через пару минут. У меня такое случалось на одном из серверов.
В оснастке управления дисками появляется новый Disk 0 уже побольше объёмом.
Нажимаем на диск правой кнопкой и инициализируем его.
Поскольку диск больше 2 ТБ, то выбираем GPT. OK.
Диск инициализирован.
Теперь нам нужно заново создать зеркальный динамический массив. Нажимаем правой кнопкой на диск D:, Add Mirror...
Выбираем Disk 0. Add Mirror.
Данная операция сконвертирует Disk 0 в динамический. Yes.
Создаётся RAID1 зеркальный массив. Но данные, естественно, не синхронизированы. Запускается процедура синхронизации, побежали проценты. Процесс занимает некоторое время, достаточно продолжительное. Disk 0 помечен восклицательным знаком, поскольку данные на нём не совпадают с основным диском.
После окончания синхронизации у нас снова программный RAID1 массив из двух дисков.
Первый диск заменён, пол дела сделано.
Подготовка к замене второго диска
И снова нам нужно разобрать наш динамический массив.
Нажимаем правой копкой на любой из дисков D:, не имеет значения на какой. Выбираем Break Mirrored Volume.
Нас предупреждают, что после этого процесса данные на дисках перестанут быть идентичны. Yes.
Наш динамический зеркальный массив перестал быть массивом и разбился на два отдельных динамических диска, один из них остался диском D:, а второй теперь стал E:. Но мне не повезло, диском D: стал тот диск, который я планировал извлечь.
Заново собираю массив.
Во второй раз ткнул правой кнопкой на другой диск, хотя это и не имеет значения. И теперь мне повезло, диск D: остался на уже заменённом диске.
Теперь все действия нужно повторить для Disk 1.
Удаляем ненужный диск E:, извлекаем Disk 1. На этот раз диск сам ушёл в Offline.
Замена второго диска
Беру диск, еду в ЦОД.
В вуб-интерфейсе IPMEI извлекаем диск, Eject. Нам уже не нужен серийный номер, так как диски уже не спутать.
Вытаскиваю диск из сервера. Диск пропадает из системы. Все сервисы продолжают работать нормально.
Перекручиваю салазки на новый диск и вставляю его в слот.
Диск отобразился в системе.
Инициализируем его.
GPT. OK.
Оба физических диска заменены. Дальше всё просто:
- Расширяем массив на весь Disk 0.
- Делаем зеркальный массив, добавляя Disk 1.
Windows — расширение динамического зеркального массива
И мы с вами без простоя на лету заменили два NVMe диска на сервере и расширили массив.
P.S.
При замене NVMe дисков ни один пользователь 1С не пострадал.