Настраиваем программный RAID на UEFI-системах в Windows

Программный RAID пользуется заслуженной популярностью, позволяя легко создавать отказоустойчивые дисковые конфигурации в недорогих системах, отличаясь простотой создания и управления. Но с переходом современных систем на UEFI появились некоторые особенности, касающиеся процесса загрузки, которые следует понимать и принимать во внимание. В противном случае отказоустойчивость может оказаться мнимой и при отказе одного из дисков вы просто не сможете загрузить систему.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Данная инструкция может кому-то показаться сложной, действительно, для создания программного RAID на UEFI-системах требуется довольно много подготовительных действий. Также определенное количество операций придется выполнить и при замене отказавшего диска, но это тема для отдельной статьи. В связи с этим встает вопрос выбора между программным RAID и встроенным в материнскую плату, т.н. fake-raid.

Если брать вопрос производительности, то сегодня он абсолютно неактуален, тем более что вся обработка данных так или иначе осуществляется силами CPU. Основным аргументов в пользу встроенного RAID служит простота его использования, но за это приходится платить совместимостью. Собранные таким образом массивы будут совместимы только со своим семейством контроллеров. К счастью, сейчас уже нет того зоопарка, который был еще лет 10 назад, но все равно, собранный на базе платформы Intel массив вы не запустите на AMD-системе.

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

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

Также есть другая особенность, вытекающая из архитектуры программных RAID массивов, если некритически отказал тот жесткий диск, с которого осуществляется загрузка, то система не будет автоматически загружена со второго, исправного HDD, вы получите ошибку (или BSOD) и вам потребуется вручную изменить порядок загрузки для восстановления работы системы.

Но несмотря на определенные недостатки и ограничения, программный RAID на основе динамических дисков пока остается единственной возможностью обеспечить отказоустойчивость системы, не прибегая к аппаратным средствам.

Конфигурация разделов Windows-систем с UEFI

Прежде всего рассмотрим стандартную конфигурацию разделов, автоматически создаваемую Windows с UEFI, приведенный ниже пример соответствует последним версиям Windows 10 и Windows Server 2016/2019, у более ранних версий Windows разметка может несущественно отличаться.

  • EFI - раздел специального типа с файловой системой FAT32, который содержит загрузчик, вызываемый микропрограммой UEFI. Данный раздел должен находиться в основной таблице разделов и не может быть расположен на динамическом диске. В Windows он ошибочно называется зашифрованным, имеет критическое значение для нормальной работы системы. В современных Windows-системах имеет размер в 100 МБ.

  • MSR (Microsoft System Reserved) - служебный раздел с файловой системой NTFS, является обязательным для GPT-разметки, которая не позволяет использовать скрытые сектора диска, используется для служебных операций встроенного и стороннего ПО, например, при преобразовании диска в динамический. Является скрытым и не отображается в оснастке управление дисками. Его размер в современных системах - 16 МБ.

  • Windows - самый обычный раздел с системой, фактически под ним следует понимать любую пользовательскую разметку. Никаких особенностей он в себе не таит.

Производители ПК могут добавлять дополнительные разделы, например, с резервным образом системы для отката к заводским настройкам или собственными инструментами восстановления, чаще всего они имеют специальные GPT-атрибуты, как и у раздела Windows RE.

Подготовка к созданию программного RAID

Будем считать, что вы уже установили операционную систему на один из дисков, в нашем примере будет использоваться Windows Server 2019 установленный на виртуальной машине. Если мы откроем оснастку Управление дисками, то увидим примерно следующую картину:

Первым идет раздел Windows RE, размером в 499 МБ, а за ним раздел EFI, который ошибочно именуется шифрованным. Но как мы говорили выше, данная оснастка не дает полного представления о структуре разметки, поэтому запустим утилиту командной строки diskpart и получим список разделов:

1diskpart
2sel disk 0
3list par

Первая команда запускает утилиту, вторая выбирает первый диск (диск 0) и третья выводит список разделов.

Здесь присутствуют все существующие на диске разделы, включая MSR, размером в 16 МБ. Теперь нам нужно воспроизвести аналогичную разметку на втором жестком диске. Будем считать, что вы еще не вышли из утилиты diskpart, поэтому выберем второй жесткий диск (диск 1) и очистим его:

1sel disk 1
2clean
Внимание!

Внимание! Данная команда полностью удалит все данные с указанного диска. Убедитесь, что вы выбрали нужный диск и что он не содержит никаких данных!

Преобразуем диск в GPT:

1 convert gpt

При преобразовании на диске будет автоматически создан MSR раздел, нам он пока не нужен, поэтому удалим его командой:

1sel par 1
2delete part override

После чего убедимся, что диск не содержит разделов.

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

На всякий случай явно выберем диск и создадим на нем раздел размером в 499 МБ, который отформатируем в NTFS:

1sel disk 1
2create partition primary size=499
3format quick fs=ntfs

Затем зададим ему нужные GPT-атрибуты:

1set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
2gpt attributes=0x8000000000000001

Идентификатор de94bba4-06d1-4d40-a16a-bfd50179d6ac задает тип раздела как Windows RE, а атрибут 0x8000000000000001 препятствует назначению буквы диска и помечает раздел как обязательный для работы системы, во избежание его удаления из оснастки управления дисками.

Следующим шагом создадим раздел EFI:

1create partition efi size=99
2format quick fs=fat32

И раздел MSR:

1create partition msr size=16

Если все сделано правильно, то вы должны получить следующую схему разметки, которая будет полностью повторять (за исключением системного раздела) разметку первого диска.

После чего систему обязательно следует перезагрузить.

Создание программного RAID

Прежде всего преобразуем диски в динамические, это можно сделать в оснастке Управление дисками:

или утилитой diskpart:

1sel disk 0
2convert dynamic
3sel disk 1
4convert dynamic

Затем добавим зеркало к системному диску через графический интерфейс

или с помощью diskpart:

1sel vol c
2add disk 1

После чего следует обязательно дождаться ресинхронизации данных, в зависимости от скорости и объема дисков это может занять некоторое время.

Теперь при загрузке появится меню с выбором раздела, загрузиться можно с обоих, но не будем забывать, что загрузчик по-прежнему присутствует только на первом диске и при смене порядка загрузки в BIOS загрузиться со второго диска не удастся.

Настройка загрузчика EFI и его копирование на второй раздел

Снова запустим утилиту diskpart и присвоим буквы EFI разделам на дисках, но перед этим уточним расположение нужного нам раздела:

1sel disk 0
2list par

Как видим интересующий нас раздел имеет номер 2, выберем его и присвоим букву:

1sel par 2
2assign letter=P

Повторим аналогичные манипуляции со вторым диском:

1sel disk 1
2sel par 2
3assign letter=S

Выйдем из утилиты diskpart (команда exit) и перейдем в EFI раздел первого диска:

1P:
2cd EFI\Microsoft\Boot

Для просмотра текущих точек загрузки выполните:

1bcdedit /enum

Вывод команды покажет нам единственную запись диспетчера загрузки (на текущем EFI-разделе) и две записи загрузчика Windows, на каждом из зеркальных томов. Нам потребуется создать второй экземпляр диспетчера загрузки:

1bcdedit /copy {bootmgr} /d "Windows Boot Manager 2"

Из вывода данной команды нам потребуется идентификатор, скопируем его для использования в следующей команде.

1bcdedit /set {bb040826-aa5e-lle9-8e9e-8efd93e43841} device partition=s:

В фигурных скобках должен быть указан идентификатор, полученный на предыдущем шаге.

После чего экспортируем BCD-хранилище загрузчика:

1bcdedit /export P:\EFI\Microsoft\Boot\BCD2

И скопируем содержимое EFI-раздела на второй диск:

1robocopy P:\ S:\ /E /R:0

Ошибка при копировании активного экземпляра BCD-хранилища - это нормально, собственно поэтому мы и сделали его экспорт, вместо того, чтобы просто скопировать. Затем переименуем копию хранилища на втором диске:

1rename S:\EFI\Microsoft\Boot\BCD2 BCD

и удалим ее с первого:

1del P:\EFI\Microsoft\Boot\BCD2

Осталось удалить буквы дисков EFI-разделов, для этого снова запустим diskpart:

1sel vol p
2remove
3sel vol s
4remove

Теперь можно перезагрузить систему и в загрузочном меню BIOS выбрать Windows Boot Manager 2, затем Windows Server - вторичный плекс - это обеспечит использование EFI-загрузчика и системного раздела второго диска. Если вы все сделали правильно - загрузка будет удачной. Таким образом у нас будет полноценное зеркало системного раздела на динамических дисках в UEFI-системе.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал