Установка Windows Server 2019 на программный RAID-1
01.01.70
Что делать, если нужно поставить ОС на зеркало, но чипсетного программного RAID нет, а установить дополнительный контроллер не позволяет бюджет? В данной статье мы рассмотрим процедуру организации загрузки Windows Server 2019 с программного зеркала, а также особенности восстановления.
Стоит заранее оговориться, что такая конфигурация хоть и позволяет немного сэкономить на контроллере, повысив отказоустойчивость в сравнении с установкой ОС на одиночный накопитель, но в итоге из-за человеческого фактора может привести к снижению надежности из-за роста вероятности допустить ошибку.
В Windows есть два механизма создания программных массивов — на основе динамических дисков и на основе Storage Spaces. При этом только первый из них позволяет зеркалировать раздел с системой. Краткое описание процедуры при загрузке через UEFI:
- Установить ОС на одиночный диск.
- Создать на втором диске идентичные разделы.
- Преобразовать оба диска в динамические.
- Зазеркалировать системный раздел первого диска на второй диск.
- Обеспечить возможность загрузки с любого из дисков — настроить дополнительный пункт в загрузочном меню и скопировать конфигурацию бутменеджера, т. е. по сути скопировать содержимое EFI-раздела с первого диска на второй.
Устанавливать будем Windows Server 2019 Standard с GUI, так как всё описанное ниже подходит и для Windows 10. На пустом диске инсталлятор автоматически создаст дополнительный раздел восстановления размером 500 МБ в начале диска. Нам он не нужен, поэтому после запуска инсталлятора запускаем консоль через Shift-F10, вызываем diskpart и создаём три раздела: EFI (260 МиБ), MSR (16 МиБ) и системный раздел на всё оставшееся пространство.
После установки увидим в диспетчере дисков следующую картину:
Запускаем diskpart и смотрим таблицу разделов на диске 0:
DISKPART> sel dis 0 Disk 0 is now the selected disk. DISKPART> lis par Partition ### Type Size Offset ------------- ---------------- ------- ------- Partition 1 System 260 MB 1024 KB Partition 2 Reserved 16 MB 261 MB Partition 3 Primary 99 GB 277 MB
Выберем диск 1 и инициализируем его в формат GPT. Автоматически созданный раздел MSR удаляем с параметром override:
DISKPART> con gpt DiskPart successfully converted the selected disk to GPT format. DISKPART> lis par Partition ### Type Size Offset ------------- ---------------- ------- ------- Partition 1 Reserved 15 MB 17 KB DISKPART> sel par 1 Partition 1 is now the selected partition. DISKPART> delete par override DiskPart successfully deleted the selected partition.
Создаём те же разделы, что и на диске 0:
DISKPART> crea par efi size=260 DiskPart succeeded in creating the specified partition. DISKPART> crea par msr size=16 DiskPart succeeded in creating the specified partition. DISKPART> lis par Partition ### Type Size Offset ------------- ---------------- ------- ------- Partition 1 System 260 MB 1024 KB Partition 2 Reserved 16 MB 261 MB
Преобразуем оба диска в динамические:
DISKPART> sel dis 0 Disk 0 is now the selected disk. DISKPART> con dyn DiskPart successfully converted the selected disk to dynamic format. DISKPART> sel dis 1 Disk 1 is now the selected disk. DISKPART> con dyn DiskPart successfully converted the selected disk to dynamic format.
Зеркалируем системный раздел, смонтированный на C:
DISKPART> sel vol C Volume 3 is the selected volume. DISKPART> add disk=1 DiskPart succeeded in adding a mirror to the volume.
Начнётся процесс синхронизации зеркала:
Перейдём к дублированию загрузчика. Загрузчик сейчас находится на разделе EFI диска 0. Аналогичный раздел на диске 1 пуст. Отформатируем его в FAT32, назначим букву S (secondary), а разделу EFI на диске 0 — букву P (primary):
DISKPART> sel dis 1 Disk 1 is now the selected disk. DISKPART> sel par 1 Partition 1 is now the selected partition. DISKPART> assign letter = S DiskPart successfully assigned the drive letter or mount point. DISKPART> format fs=FAT32 quick 100 percent completed DiskPart successfully formatted the volume. DISKPART> sel dis 0 Disk 0 is now the selected disk. DISKPART> sel par 1 Partition 1 is now the selected partition. DISKPART> assign letter=P DiskPart successfully assigned the drive letter or mount point.
Посмотрим на конфигурацию загрузчика. Примечание: запуск bcdedit с некоторыми параметрами в консоли PowerShell приводит к ошибкам, поэтому для работы с bcdedit следует запустить cmd.
bcdedit /enum
Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=P:
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale en-US
inherit {globalsettings}
bootshutdowndisabled Yes
default {current}
resumeobject {4e02bc8d-f967-11eb-bb60-dc5f81ee32a9}
displayorder {current}
{4e02bc92-f967-11eb-bb60-dc5f81ee32a9}
toolsdisplayorder {memdiag}
timeout 30
Windows Boot Loader
-------------------
identifier {current}
device partition=C:
path \Windows\system32\winload.efi
description Windows Server
locale en-US
inherit {bootloadersettings}
recoverysequence {4e02bc8f-f967-11eb-bb60-dc5f81ee32a9}
displaymessageoverride Recovery
recoveryenabled Yes
isolatedcontext Yes
allowedinmemorysettings 0x15000075
osdevice partition=C:
systemroot \Windows
resumeobject {4e02bc8d-f967-11eb-bb60-dc5f81ee32a9}
nx OptOut
Windows Boot Loader
-------------------
identifier {4e02bc92-f967-11eb-bb60-dc5f81ee32a9}
device partition=C:
path \Windows\system32\winload.efi
description Windows Server - secondary plex
locale en-US
inherit {bootloadersettings}
recoverysequence {4e02bc8f-f967-11eb-bb60-dc5f81ee32a9}
displaymessageoverride Recovery
recoveryenabled Yes
isolatedcontext Yes
allowedinmemorysettings 0x15000075
osdevice partition=C:
systemroot \Windows
resumeobject {4e02bc8d-f967-11eb-bb60-dc5f81ee32a9}
nx OptOut
Когда мы зеркалировали системный раздел, то ОС автоматически добавила дополнительный пункт загрузки Windows Server - secondary plex. Теперь осталось скопировать всю конфигурацию загрузчика на раздел EFI диска 1. Для этого сначала создадим дубль конфигурации, получим его GUID, который затем используем, чтобы изменить букву раздела с P на S:
bcdedit /copy {bootmgr} /d "Windows Boot Manager Cloned"
The entry was successfully copied to {4e02bc94-f967-11eb-bb60-dc5f81ee32a9}.
bcdedit /set {4e02bc94-f967-11eb-bb60-dc5f81ee32a9} device partition=s:
Теперь экспортируем конфигурацию в BCD2, скопируем всё содержимое EFI-раздела на диске 0 (раздел P) на диск 1 (раздел S). Потом переименуем его на разделе S из BCD2 в BCD:
P: bcdedit /export P:\EFI\Microsoft\Boot\BCD2 robocopy p:\ s:\ /e /r:0 Rename s:\EFI\Microsoft\Boot\BCD2 BCD Del P:\EFI\Microsoft\Boot\BCD2
Перезагрузимся и заглянем в BIOS:
Помимо основного пункта (Windows Boot Manager), созданного при установке ОС, у нас теперь появился пункт Windows Boot Manager Cloned для загрузки со второго диска.
Временное отключение одного из дисков
Проверим конфигурацию в действии, отключив диск 0. Пункт Windows Boot Manager ничего не загрузит, воспользуемся Windows Boot Manager Cloned (или запустим boot manager через EFI Shell). Boot manager отобразит те же два пункта с загрузчиками. Первый запустить не получится, используем второй — Windows Server - secondary plex.
ОС загружается. Диск 1 теперь стал диском 0, система сообщает о потере отказоустойчивости на зеркальном томе сообщает и о потере соответствующего диска.
Допустим, что диск исправен, его просто случайно отключили, а потом вставили обратно. Тут нас подстерегает первая опасность — нужно помнить про то, что состояние системы при загрузке с этого диска будет неактуальным и выбрать пункт «Windows Server - secondary plex». После загрузки ОС мы увидим, что зеркало развалилось:
Для восстановления отказоустойчивости нужно удалить неиспользуемый раздел (в данном случае том E) и заново сделать зеркало тома C:
sel vol C add disk=0
Замена диска на новый
Другой, более вероятный сценарий — первый диск вышел из строя, и мы заменили его на новый. В этом случае нужно повторить процедуру, выполненную после установки системы. Добавляется два нюанса:
- Желательно иметь под рукой размеры разделов до преобразования дисков в динамические, чтобы не пришлось вычислять заново правильный размер раздела MSR.
- Придётся править загрузчик, удалив/исправив пункт, ссылающийся на уже недоступный раздел. В данном примере это {default}, так как мы заменили первый диск:
bcdedit /delete {default}
bcdedit /set {bootmgr} device partition=p:
Затем можно продолжить процедуру — скопировать раздел EFI.
Заключение
Механизм загрузки Windows с программного зеркала достаточно хорошо отработан. Практически он не менялся со времён выхода Windows Server 2008. Как видите, поддержание работоспособности требует большего количества действий и понимания работы загрузчика — на любом этапе можно ошибиться и потерять если не данные, то ценное время.
