В этой статье мы рассмотрим, как создать программное зеркало (RAID1) из двух GPT дисков в Windows Server 2016/Windows 10, установленных на UEFI системе. Мы рассмотрим полноценную конфигурацию BCD загрузчика, позволяющую обеспечить корректную загрузку Windows и защитить данные от выхода из строя любого диска.
Итак, у нас имеется простой компьютер UEFI-архитектуры без встроенного RAID контроллера с двумя идентичными дисками размерами по 50 Гб. Наша задача — установить на первый GPT диск ОС (Windows Server 2016, Windows 10 или бесплатного сервер Hyper-V), а затем собрать из двух дисков программное зеркало (RAID1 – Mirroring).
Запишите установочный образ Windows на DVD/ USB флешку, загрузите компьютер) с этого загрузочного устройства (в режиме UEFI, не Legacy) и запустите установку Windows Server 2016.
После установки, откройте консоли управления дисками (diskmgmt.msc), убедитесь, что на первом диске используется таблица разделов GPT (свойства диска -> вкладка Volumes -> Partition style –> GUID partition table), а второй диск пустой (неразмечен).
Подготовка таблицы разделов для зеркала на 2 диске
Откройте командную строку с правами администратора и выполните команду diskpart. Наберите:
DISKPART>List disk
Как вы видите, в системе имеется два диска:
- Disk 0 – диск с таблицей разделов GPT, на который установлена Windows
- Disk 1 – пустой неразмеченный диск
На всякий случай еще раз очистим второй диск и конвертируем его в GPT:
Select disk 1
clean
Convert GPT
Введите список разделов на втором диске:
List part
Если найдется хотя бы один раздел (в моем примере это Partition 1 – Reserved – Size 128 Mb), удалите его:
Sel part 1
Delete partition override
Выведите список разделов на 1 диске (disk 0). Далее вам нужно создать такие же разделы на Disk 1.
Select disk 0
List part
Имеется 4 раздела:
- Recovery – 450 Мб, раздел восстановления со средой WinRE
- System – 99 Мб, EFI раздел (подробнее про структуру разделов на GPT дисках)
- Reserved 16 Мб, MSR раздел
- Primary – 49 Гб, основной раздел с Windows
Создаем такие же разделы на Disk 1:
Select disk 1
Create partition primary size=450
format quick fs=ntfs label=»WinRE»
set id=»de94bba4-06d1-4d40-a16a-bfd50179d6ac»
create partition efi size=99
create partition msr size=16
list part
Преобразования дисков в динамические, создание зеркала
Теперь оба диска нужно преобразовать в динамические:
Select disk 0
Convert dynamic
Select disk 1
Conv dyn
Создадим зеркало для системного диска (диск C:). Нужно выбрать раздел на первом диске и создать для него зеркало на 2 диске:
Select volume c
Add disk=1
Должно появится сообщение:
DiskPart succeeded in adding a mirror to the volume
Откройте консоль управления дисками, и убедитесь, что запустилась синхронизуя раздела C на (Recynching). Дождитесь ее окончания (может занять до нескольких часов в значимости от размера раздела C: ).
При загрузке Windows теперь будет появляться меню Windows Boot Manager с предложение выбрать с какого диска загружаться. Если не выбрать диск вручную, система через 30 секунд попытается загрузиться с первого диска:
- Windows Server 2016
- Windows Server 2016 – secondary plex
Однако проблема в том, что сейчас у вас конфигурация загрузчика хранится только на 1 диске, и при его потере, вы не сможете загрузить ОС со второго без дополнительных действий. По сути вы защитили данные ( но не загрузчик Windows) только от сбоя второго диска.
Программный RAID Windows не получится использовать для создания нормального зеркала EFI раздела. Т.к. на EFI разделе хранятся файлы, необходимые для загрузки ОС, то при выходе их строя первого диска, вы не сможете загрузить компьютер со второго диска без ручного восстановления загрузчика EFI на нем в среде восстановления. Эти операции довольно сложно сделать неподготовленному администратору, а также потребует дополнительного времени (которого может не быть, если у вас за спиной стоит толпа разгневанных пользователей).
Далее мы покажем, как скопировать EFI раздел на второй диск и изменить конфигурацию загрузчика BCD, чтобы вы могли загрузить Windows как с первого, так и со второго диска.
Подготовка EFI раздела на втором диске в зеркале
Теперь нужно подготовить EFI раздел на втором диске в зеркале, чтобы компьютер мог использовать этот раздел для загрузки Windows. Назначим EFI разделу на Disk 1 букву S и отформатируем его в файловой системе FAT32:
Select disk 1
Select part 2
assign letter=S
format fs=FAT32 quick
Теперь назначим букву диска P: для EFI раздела на Disk 0:
select disk 0
select partition 2
assign letter=P
exit
Копирование конфигурации EFI и BCD на второй диск
Выведите текущую конфигурацию загрузчика BCD с помощью команды:
bcdedit /enum
При создании зеркала, служба VDS автоматически добавила в конфигурацию BCD запись для второго зеркального диска (с меткой Windows Server 2016 – secondary plex).
Чтобы EFI в случае потери первого диска могут загружаться со второго диска, нужно изменить конфигурацию BCD.
Для этого нужно скопировать текущую конфигурацию Windows Boot Manager
bcdedit /copy {bootmgr} /d "Windows Boot Manager Cloned"
The entry was successfully copied to {44d1d6bf-xxxxxxxxxxxxxxxx}
Теперь скопируйте полученный ID конфигурации и используйте его в следующей команде:
bcdedit /set {44d1d6bf-xxxxxxxxxxxxxxxx} device partition=s:
Если все правильно, должна появится строка The operation completed successfully.
Выведите текущую конфигурацию Windows Boot Manager (bcdedit /enum). Обратите внимает, что у загрузчика теперь два варианта загрузки EFI с разных дисков (default и resume object).
Теперь нужно сделать копию BCD хранилища на разделе EFI первого диска и скопировать файлы на второй диск:
P:
bcdedit /export P:\EFI\Microsoft\Boot\BCD2
robocopy p:\ s:\ /e /r:0
Осталось переименовать BCD хранилище на втором диске:
Rename s:\EFI\Microsoft\Boot\BCD2 BCD
И удалить копию на Disk 0:
Del P:\EFI\Microsoft\Boot\BCD2
Теперь при выходе из строя первого диска, вам нужно при загрузке компьютера выбрать устройство «Windows Boot Manager Cloned», а затем «Microsoft Windows Server 2016 — secondary plex».
При загрузке с отказавшим дисков, в диспетчере Disk Management вы увидите сообщение Failed Redndancy.
В этом случае вы должны заменить неисправный диск, удалить конфигурацию зеркала и пересоздать программный RAID с начала.
У вас опечатка
Пофиксил )
1. Сейчас гораздо удобнее, для небольшого бизнеса применять именно сортовые рейд а не аппаратный.
2 вы пишете «По сути вы защитили ОС (не данные) только от сбоя второго диска.»
Это перевод, или русский вам не родной?)) вы наверное хотели сказать наоборот, данные защищены от сбоя, а система нет.
1) Согласен, у програмного raid есть свои плюсы — вы не зависите от raid контроллера. Если у вас вышел из строя сервер, вы сможете поставить диски в любой другой компьютер/сервер и запустить систему.
2) все верно, в спешке писал. Защищены данные, но не загрузчик ОС.
ид откуда брать?)
de94bba4-06d1-4d40-a16a-bfd50179d6ac — это стандартный ID для раздела восстановления.
Огонь! w2k19 под двумя M.2 nvme — всё взлетело! Я счастлив!))
Человеческое спасибо!)
причем, после того как выдернул 1-ый, успешно загрузился со 2-го, обратно воткнул первый и стал грузиться с него, словил закономерный BSOD. Обратно загрузился со 2-го, ресинкнулся и уже после этого штатно загрузился с 1-го! супер!)
Отлично 🙂
Почему закономерный? Мои эксперименты показали, что обе системы работоспособны остаются, можно втыкать диски по очереди или оба одновременно (второй будет помечен как «чужой»). Главное, не запутаться между ними потом ) Правда, я экспериментировал на SATA и MBR.
Скажите, для чего вы на 2-ом диске создаёте 1-ый раздел (тот, который для среды восстановления) (и, даже, форматируете и назначаете правильный тип) если всё равно не копируете в него файл вирт.диска WinRE?
По хорошему да, можно потом скопировать в этот раздел winre образ. Не стал усложнять статью. Если вам интересно как настроить среду WinRe следуйте гайду: https://winitpro.ru/index.php/2017/01/27/vosstanovlenie-sredy-windows-recovery-environment-winre-v-windows-10/
Я когда создаю первый раздел ( у меня он efi ), на втором диске, у меня автоматически перед ним создается msr 16Mb, соотв-но смещения разные получаются. порядок разный разделов.
можно как то предотвратить автоматическое создание этого msr раздела самым первым?
Раздел MSR обязателен для разметки GPT
то что MSR обязателен это очевидно, но вопрос был не в этом,
попробую переформулировать вопрос:
как добиться чтобы он был не первым разделом? потому что на первом диске он идет не первым,
а на втором автоматически создается первым, соотв-но порядок разделов (и соотв-но их смещения) получается на втором диске другой. или это не важно?
В теории можно изменить порядок системных разделов. Но в этом примере это не важно, для каждого диска по сути есть собственная запись в загрузчике.
Есть скрипт или софтина для мониторинга программного RAID?
Почти все системы мониторинга могут получать состояние SMART диска (можно запилить свой скрипт про проверке состояние SMART через CrystalDiskInfo).
Если нужно проверять только статус програмного RAID, можно использовать обычный diskpart.
"list volume" | diskpart
(если RAID неисправен это будет в выводе, нужно только обработать его в PowerShell)Ну, или так:
Get-PhysicalDisk | Sort Size | FT FriendlyName, Size, MediaType, SpindleSpeed, HealthStatus, OperationalStatus -AutoSize
За такую статью, Вам медаль надо выписать, поклон в пояс.
И нюанс для пользователей, в PS этого лучше не делать — на моменте клонирования конфигурации загрузчика встаёт.
Добрый человек, подскажите пожалуйста: почему у меня при каждой перезагрузке происходит постоянно ресинхронизация программного RAID?
RAID 1, программный, 2 новых идентичных винчестера по 2 Тб. Windows 10 LTSC.
Смотрите логи системы при включении/выключении. Сложно скачать сразу откуда проблема. Диски HDD или SSD? Компьютер выключаете корректно или по питанию?
Вы пишите: Выведите текущую конфигурацию Windows Boot Manager (bcdedit /enum). Обратите внимание, что у загрузчика теперь два варианта загрузки EFI с разных дисков (default и resume object).
Подаскажите пожалуйста на картинке default = {current}, какому id на данной картинке соответствует {current}?
И почему в параметре displayorder id {44d1d6bd-xxxxxxxxxxx} отличается от id в параметре resume object {44d1d6b8-xxxxxxxxxxx}?
По логике в пареметре displayorder должны отображаться ID default {current} и resume object {44d1d6bd-xxxxxxxxxxx}
Прошу обьяснить какой id в конечном итоге соответстувует загрузчику диска 0 и какой загрузчику диска 1?
{current} — этот полный id просто не отображается в выводе утилиты.
Извините за повторный вопрос но я пытаюсь разобраться в логике и в статье для меня есть определенные нестыковки, которые могут обернуться проблемой при востановлении RAID и замене диска.
прошу ответить на вопросы :
1. на картинке default = {current}, какому id (укажите конкретый ID)н на данной картинке соответствует {current}?
2. почему в параметре displayorder id {44d1d6bd-xxxxxxxxxxx} отличается от id в параметре resume object {44d1d6b8-xxxxxxxxxxx}? (по логике в пареметре displayorder должны отображаться ID default {current} и resume object {44d1d6bd-xxxxxxxxxxx})
3. какой id в конечном итоге соответстувует загрузчику диска 0 и какой загрузчику диска 1?
главное, после настройки не забыть отключить установку новых версий windows 10. иначе загрузчик затрётся, и вторичный плекс пропадёт из вариантов загрузки.
к сожалению, для автоматизации, ничего кроме fake raid не придумать (за бесплатно конечно).
Выполнил на Windows Server 2019 на двух одинаковых ссд.
Была небольшая заминка с различием общего объема накопителей, из-за чего зеркальный раздел не влезал: раздел С ссд 0 был на 2 МБ больше, чем у зеркала. Помогло сжатие раздела.
Попробовал загрузиться с каждого по отдельности — все чики пики! работает!
Но, после этого, при загрузке с двумя ссд, рейд развалился. Зеркало стало «чужим», а после импорта пришлось собирать зеркало заново (может оно так и должно быть).
Главное, что по отдельности все тоже загружается.
Благодарю за знания!
Огромное спасибо за статью, выполнил все по инструкции на WS2019.
Решил перед вводом сервера в эксплуатацию проверить «Горячую замену ведущего харда».
Вытащил ведущий диск с системой и отформатировал. Вставил обратно пустой ведущий и загрузился с ведомого. Теперь пытаюсь создать зеркало с бывшего зеркала и столкнулся с проблемой.
При выполнении
bcdedit /copy {bootmgr} /d «Windows Boot Manager Cloned»
выдается ошибка
Ошибка при установке ссылки указанной записи.
Не удается найти указанный файл.
Видимо где-то нужно указать, что текущая система более не является резервной, а дефолтной. Но в силу малого опыта не знаю как это сделать. Буду благодарен если поможете с решением данной проблемы.
Та же проблема. Получилось решить?
Проблему родтверждаю. Решения не нашёл.
Да меня тоже интересует возможно ли из старого ведомого диска сделать ведущий?
Иначе смысл городить весь этот раид.
Может вы записи даете имя которое уже есть в BCD ?
можно целиком запустить клон всего диска со всеми разделами и не заниматься ерундой.
Программными средствами WinServer2019? Скажите как, у меня вот не получилось найти ничего полезней этой статьи. Если же вы имеете в виду аппаратный рейд то это давно пройдено и изучено, интересно можно ли поднять адекватное зеркало на железе без аппаратного рейдаxD
Подскажите, в чем может быть беда. Win 10 x64.
На этом этапе:
Select volume c
Add disk=1
Все диски уже преобразованы в динамические. В diskpart пишет ошибку:
Ошибка службы виртуальных дисков:
Сведения об областях диска повреждены.
DiskPart ссылается на устаревший объект.
Обновите объект с помощью команды RESCAN.
Если проблема сохраняется, следует выйти из программы DiskPart, а затем
перезапустить ее или перезагрузить компьютер.
Через управление дисками та же ошибка.
После последних обновлений 10-ки она не дает создавать зеркало на диске, где присутствуют EFI или MSR разделы.
https://forum.ixbt.com/topic.cgi?id=22:93735#0
Решение найдено.
Необходимо «сжать» системный том, а потом его «расширить» (достаточно 100мб). После этого все работает.
Замечательная статья, как раз то, что мне сейчас нужно.
PS C:\Windows\system32> bcdedit /copy {bootmgr} /d "Windows Boot Manager Cloned"
Указана недопустимая команда копирования.
Для получения справки введите в командной строке "bcdedit /?"
Параметр задан неверно.
Не могу побороть.
Запускайте команду не в консоли PowerShell, а в cmd.exe
Опечатка
Select disk 0
Convert dynamic
Select disk 1
Conv dyn
Спс, пофисил!
после копирования efi назначенные буквы дисков можно отключать ?
Все равно, это не повлият ни на что. назначенные буквы будут только в текущей сессии
Можно получить инструкцию с действующим разделом восстановления?