ИГОРЬ ОРЕЩЕНКОВ, инженер-программист, iharsw@tut.by
Загрузочный носитель на основе GRUB2 for Windows
В статье рассматривается подготовка мультизагрузочного носителя для BIOS/EFI компьютеров на основе загрузчика GRUB2 в среде операционной системы Windows. Он может быть пригоден для первичной инициализации компьютера или восстановления работоспособности операционной системы компьютера
Технические требования к загрузочному носителю
Сменный загрузочный носитель, как правило, предназначен для первоначальной установки операционной системы или восстановления работоспособности компьютера. Для первого варианта использования на носителе должен находиться инсталляционный образ операционной системы с возможностью запуска процедуры установки. Во втором случае вероятно использование носителя в среде, пораженной компьютерными вирусами, откуда следует необходимость защиты его от записи на аппаратном уровне.
С учетом высказанных предпосылок в качестве загрузочного носителя удобно выбрать SD-карту. Оптические диски практически вышли из широкого обращения, а USB-флешки с аппаратной защитой от записи не везде можно встретить в продаже, и цена на них не всегда оправдана. В то же время любая SD-карта имеет переключатель защиты от записи, что в комплекте с кардридером превращает ее в недорогой, но функциональный носитель (см. рис. 1).
Рисунок 1. Из SD-карты и кардридера можно собрать функциональный носитель с аппаратной защитой от записи
Чтобы носитель можно было использовать как на компьютерах с загрузчиком BIOS, так и на платформах со схемой загрузки EFI, создадим на носителе три раздела MBR:
- Раздел FAT32 – для загрузчика GRUB2, ISO-образов специализированных дистрибутивов для восстановления работоспособности системы и Windows-утилит.
- Раздел с ISO-образом дистрибутива Mageia-6.1-Live-DVD-Xfce-i586-DVD.iso, который, будучи не требовательным к ресурсам компьютера, предоставляет полноценный рабочий стол с офисным пакетом и веб-браузером.
- Раздел с инсталляционным ISO-образом дистрибутива Mageia-6-i586-DVD.iso, который содержит в себе набор программного обеспечения, достаточный для организации как автоматизированного рабочего места офисного работника, так и для построения сервера организации.
Разметка носителя
Для хранения перечисленных выше данных будет достаточно накопителя емкостью 8 Гб. Его разметку можно выполнить под Windows с помощью штатной утилиты diskpart. Сначала нужно с помощью команды list disk вывести таблицу подключенных к компьютеру накопителей, чтобы определить, над каким выполнять операции.
C:\> diskpart
DISKPART> list disk
По значению в колонке «Размер», которое должно равняться 7580 Мбайт, определяем номер носителя для дальнейшей работы. Допустим, что в колонке «Диск ###» интересующему носителю соответствует номер 9. Очистим его содержимое.
DISKPART> select disk 9
Выбран диск 9
DISKPART> detail disk
В соответствии с принципом осмотрительности администраторов баз данных «Семь раз SELECT – один UPDATE» убедимся в правильности нашего выбора нужного сменного носителя.
В выводе команды detail disk должна содержаться следующая надпись:
USB Mass Storage Device USB Device, Тип: USB
и информация о единственном пока что разделе:
FAT32 Сменный 7576 Мб Исправен
Если сомнений больше не осталось, выполняем очистку носителя:
DISKPART> clean
После успешного выполнения команды должно появиться сообщение:
DiskPart: очистка диска выполнена успешно
Если же появилось сообщение об ошибке, например:
Программа DiskPart обнаружила ошибку: Не удается найти указанный файл
то команду нужно повторить.
Снова выводим таблицу со списком носителей:
DISKPART> list disk
Для инициализированного носителя «Диск 9» будет выведено:
Размер: 7580 Мб, Свободно 7579 Мб
Свободное пространство нужно разметить на три раздела:
- Один раздел – для ISO-образа Mageia-6-i586-DVD.iso размером 3,921,674,240 байт или 3740 Мб (если дважды разделить количество байтов на 1024).
- Второй раздел – для ISO-образа Mageia-6.1-LiveDVD-Xfce-i586-DVD.iso размером 2,028,994,560 байт или 1935 Мб.
- Третий раздел, который займет оставшееся свободным пространство, будет предназначен для загрузчика, Windows-утилит и вспомогательных загрузочных образов. Его размер составит 7579 – (3740 + 1935) = 1904 Мб.
Разделы лучше располагать на носителе в порядке, обратном перечисленному, – сначала загрузочный раздел, а после него – с ISO-образами дисков. Поэтому создадим сначала раздел размером 1904 Мб. Поскольку загрузочный носитель планируется максимально универсальным, попытаемся сделать этот раздел загрузочным по спецификации EFI:
DISKPART> create partition efi size=1904
Эта команда завершится с ошибкой и сообщением о том, что EFI-разделы поддерживаются только для GPT-дисков. К сожалению, один накопитель может быть размечен либо по схеме MBR, которую поддерживают загрузчики BIOS, либо по схеме GPT, которую поддерживают загрузчики EFI, и совместить эти схемы в пределах одного накопителя согласно разделу 5 спецификации UEFI 2.7 [8] никак не возможно.
Тем не менее практика показывает, что в большинстве случаев реальные реализации загрузчиков EFI без особых проблем распознают в качестве загрузочных разделы FAT32 с шестнадцатеричным кодом файловой системы EF, размещенные на дисках MBR. Воспользуемся этим фактом и создадим первичный MBR-раздел, после чего отформатируем его с присвоением метки BOOTDISK:
DISKPART> create partition primary size=1904
DISKPART> format FS=FAT32 LABEL="BOOTDISK" QUICK
DISKPART> set id=EF
Если между командами create partition и format по каким-то причинам пришлось завершить утилиту diskpart, то восстановить контекст после ее запуска можно командами:
DISKPART> select disk 9
DISKPART> select partition 1
При выполнении же команд в непрерывной последовательности вновь созданный раздел становится текущим автоматически, поэтому выполнять команду select partition для переключения фокуса нет необходимости.
Теперь можно создать остальные разделы. В качестве идентификатора файловой системы им нужно назначить шестнадцатеричное значение 17 (ISO 9660).
DISKPART> create partition primary size=1935
DISKPART> set id=17
DISKPART> create partition primary size=3740
DISKPART> set id=17
Каждая команда create partition должна завершаться сообщением:
Diskpart: указанный раздел успешно создан
а команда set сообщением:
Программа Diskpart успешно задала идентификатор раздела
Результат работы можно просмотреть с помощью команды list partition. А с помощью команды list disk можно убедиться, что на носителе не осталось неиспользованного пространства:
Свободно 0 байт
После этого можно завершить работу с программой diskpart:
DISKPART> exit
Запись ISO-образов в разделы накопителя
К сожалению, в операционной системе Windows нет средства, позволяющего с такой же легкостью, как утилита dd в мире UNIX, записывать файлы на устройства и обратно. Вероятно, по этой причине появился Windows-клон этой программы, которым мы воспользуемся для записи ISO-образов на разделы загрузочного накопителя.
Может возникнуть вопрос: «Зачем записывать образы ISO-дисков как "сырые данные" логических разделов и почему не записать их в виде файлов на обычный раздел, например FAT32?»
Дело в том, что образы Mageia [6] не поддерживают «петлевой» запуск из файла, как это уже давно умеют делать другие дистрибутивы, например Ubuntu и Fedora. Но поскольку они все же являются «гибридными» (то есть позволяют записывать себя как на DVD-матрицу, так и на USB-флешку), то есть шанс заставить их работать с раздела создаваемого носителя.
Для дальнейшей работы потребуется загрузить дистрибутивный архив dd-0.6beta3.zip [1] и извлечь из него программу dd.exe. Предполагается, что файлы с ISO-образами уже лежат в текущей папке.
Выясним способ адресации разделов создаваемого загрузочного носителя программой dd:
C:\> dd.exe --list
NT Block Device Objects
...
Ошибка! Недопустимый объект гиперссылки.
link to Ошибка! Недопустимый объект гиперссылки.
Removable media other than floppy. Block size = 512
size is 7948206080 bytes
Ошибка! Недопустимый объект гиперссылки.
link to Ошибка! Недопустимый объект гиперссылки.
Removable media other than floppy. Block size = 512
size is 1996488704 bytes
Ошибка! Недопустимый объект гиперссылки.
link to Ошибка! Недопустимый объект гиперссылки.
Removable media other than floppy. Block size = 512
size is 2028994560 bytes
Ошибка! Недопустимый объект гиперссылки.
link to Ошибка! Недопустимый объект гиперссылки.
Removable media other than floppy. Block size = 512
size is 3921674240 bytes
В секции NT Block Device Objects нужно отыскать группу строк, сопровождаемых текстом Removable media other than floppy («Сменный носитель, отличный от гибкого диска»). Сведения о размерах найденных разделов подтверждают предположение о том, что записи «Ошибка! Недопустимый объект гиперссылки.» относятся к недавно созданным разделам на накопителе «Ошибка! Недопустимый объект гиперссылки.».
Теперь можно выполнять команды записи ISO-образов:
C:\> dd.exe if=Mageia-6-i586-DVD.iso of=Ошибка! Недопустимый объект гиперссылки. bs=1M --progress
C:\> dd.exe if=Mageia-6.1-LiveDVD-Xfce-i586-DVD.iso of=Ошибка! Недопустимый объект гиперссылки. bs=1M --progress
С помощью параметра if= программе передается имя записываемого файла ISO-образа, через параметр of= указывается раздел накопителя, в который будет произведена запись, параметр bs= задает размер единовременно копируемого блока, а параметр --progress позволяет интерактивно наблюдать в консоли количество записанных данных (из-за большого размера файлов процесс занимает продолжительное время, которое зависит от класса SD-карты и версии интерфейса кардридера).
Успешная запись должна завершиться следующими сообщениями:
3,740M 3740+0 records in 3740+0 records out
1935M 1935+0 records in 1935+0 records out
для первого и второго образа соответственно, которые говорят о равенстве количества прочитанных и записанных данных.
Установка и проверка загрузчика
Для установки на носитель загрузчика GRUB2 нужно загрузить дистрибутивный пакет grub-2.02-for-windows.zip [2], извлечь из него папку grub-2.02-for-windows и сделать ее текущей. Для продолжения работы нужно выяснить, под какой буквой подключен в операционной системе раздел FAT32 настраиваемого носителя. Это можно сделать в программе diskpart с помощью команды list volume. Строка таблицы с нужным разделом будет содержать:
Тип: Сменный, Размер: 1904 Мб, Состояние: Непригоден
Допустим, что искомому разделу соответствует буква «R». Установка загрузчика может быть произведена командой:
C:\> grub-install.exe --boot-directory=R:\ --target=i386-PC //./PHYSICALDRIVE9
Параметр --boot-directory задает путь, где будет создана папка grub с файлами загрузчика, параметр --target указывает тип загрузки (в рассматриваемом случае это BIOS), а последний параметр задает накопитель, загрузочный сектор которого будет модифицирован. Об успешной установке должны сообщить надписи:
Installing for i386-pc platform. Installation finished. No error reported
Поскольку было принято решение о создании универсального загрузочного носителя, можно установить загрузчики для 32- и 64-битных EFI:
C:\> grub-install.exe --boot-directory=R:\ --efi-directory=R:\ --removable --target=i386-efi
C:\> grub-install.exe --boot-directory=R:\ --efi-directory=R:\ --removable --target=x86_64-efi
Параметр --efi-directory указывает, где будет создана папка EFI с модулями, необходимыми для загрузки в режиме EFI, а параметр --removable информирует инсталлятор о том, что установка производится на сменный носитель.
На этом установка загрузчика завершена. Можно проверить созданный носитель на реальных компьютерах или с помощью специализированного эмулятора QemuBootTester. Последний позволяет выбрать носитель, с которого будет произведена загрузка виртуальной машины, и полный спектр режимов загрузки: BIOS, EFI-IA32 и EFI-x64 (см. рис. 2).
Рисунок 2. Эмулятор QemuBootTester позволяет выбрать загрузочный носитель (1) и режим загрузки (2). Для тестирования загрузчика достаточно 128 Мб (3) виртуальной памяти, а виртуальный жесткий диск можно отключить. Запуск осуществляется кнопкой Run QEMU (4)
Отметим, что при подключении носителя к компьютеру под управлением Windows система отображает диалоговые окна с предложением отформатировать нераспознанные разделы, на которые записаны образы дистрибутивов Linux. Естественно, делать этого не нужно.
При выборе носителя в качестве загрузочного управление системой возьмет на себя GRUB2. Его работа должна управляться с конфигурационным файлом, который пока что отсутствует. Поэтому на экране отобразится приглашение командного режима (см. рис. 3). В нем можно сразу опробовать команды:
grub> help – отображение списка команд;
grub> help команда – отображение подсказки по использованию команды.
Рисунок 3. В командном режиме загрузчика GRUB2 можно проанализировать конфигурацию компьютера и выполнить загрузку операционной системы в аварийном режиме
Зачастую выводится больше информации, чем может уместиться на экране. Чтобы вывод на экран приостанавливался перед прокруткой и выдачей очередной порции сведений, нужно включить режим постраничного вывода:
grub> set pager=1
Очистить экран можно командой clear. Для завершения работы GRUB2 предусмотрены команды:
grub> reboot – перезагрузка;
grub> halt – выключение компьютера.
В компьютерах на основе Phoenix BIOS может возникнуть трудность, связанная с выбором загрузочного носителя. В предлагаемых вариантах присутствуют USB-FDD, USB-ZIP, USB-CDROM – и не ясно, какой является правильным. На самом деле – ни один из перечисленных.
Нужно через пункт меню Advanced BIOS Features → Boot Seq&Floppy Setup установить в качестве первичного устройства загрузки First Boot Device значение Hard Disk (вероятно, оно и так установлено), а в пункте меню Advanced BIOS Features → Hard Disk Boot Priority на первое место переместить значение USB-HDD0: USB Mass Storage Device. Если такой вариант для выбора отсутствует, нужно убедиться, что загрузочный носитель подключен, после чего выполнить «теплую» перезагрузку по <Ctrl> + <Alt> + <Del> и повторить процедуру.
Настройка загрузчика
Как уже было отмечено, в своей работе загрузчик GRUB2 руководствуется командами, записанными в конфигурационном файле /grub/grub.cfg на загрузочном носителе.
Язык конфигурирования очень напоминает язык командного интерпретатора bash, однако для включения поддержки некоторых конструкций нужно явным образом подключить соответствующие модули. Например, для проверки условий требуется модуль test, а для использования регулярных выражений – модуль regexp. Скомпилированные модули в файлах с расширением .mod на этапе установки GRUB2 уже были записаны в подкаталоги i386-pc, i386-efi и x86_64-efi, соответствующие режимам загрузки.
Загрузчик GRUB2 можно русифицировать. Для этого необходимо:
После выполнения приведенных настроек GRUB2 «заговорит» по-русски. Помимо этого открывается возможность использования файлов с заранее подготовленными подсказками на русском языке, которые можно записать на носитель в кодировке UTF-8, а в нужный момент вывести на экран с помощью команды cat:
grub> cat --dos /grub/help.txt
Ключ --dos предписывает трактовать двухбайтовые последовательности \0D\0A как символы перевода строки.
При запуске GRUB2 инициализирует некоторые переменные среды окружения, полный список которых можно вывести на экран командой set.
Так, переменная $prefix содержит путь к папке с файлами GRUB2, а переменная $grub_platform содержит идентификатор способа загрузки:
- efi – если загрузка выполнена в режиме EFI-IA32 или EFI-x64;
- pc – если загрузка выполнена в режиме BIOS.
Этот факт можно использовать для условной загрузки блоков конфигурации из файлов /grub/efi.cfg или /grub/pc.cfg для учета специфики режима или подключения пунктов меню:
insmod test
set pcfg="$prefix/$grub_platform.cfg"
if [ -e $pcfg ]; then
source $pcfg
fi
Система меню и загрузка операционных систем
В конфигурационном файле grub.cfg можно описать меню с вариантами выбора, которые будут отображаться после загрузки вместо режима командной строки:
submenu "НазваниеРазделаМеню" {
menuentry "НазваниеПунктаМеню" {
... последовательность команд ...
}
}
При этом сохраняется возможность выхода в командную строку с помощью клавиши <c>.
Для работы с файлами, находящимися на ISO-образах, удобно использовать файловый менеджер 7ZipFM [3] с подключенным в его настройках (через пункт меню «Сервис → Настройки → Редактор») текстовым редактором AkelPad [4] (см. рис. 4).
Рисунок 4. Файловый менеджер из пакета 7Zip позволяет исследовать содержимое ISO-образов и извлекать из них необходимые файлы, а текстовый редактор AkelPad дает возможность «на месте» просматривать содержимое текстовых файлов
Если требуется выполнять загрузку с ISO-образа дистрибутива Linux, который поддерживает «петлевой» запуск, то пункты меню для этих целей можно извлечь из самого конфигурационного файла загрузчика нашего дистрибутива Linux.
Например, в случае Ubuntu это будет ubuntu-18.10-desktop-amd64.iso\boot\grub\loopback.cfg (еще потребуется указать путь к файлу с ISO-образом на загрузочном носителе в переменной окружения $iso_path).
Для дистрибутива Fedora можно воспользоваться блоком меню из файла Fedora-Workstation-Live-x86_64-29-1.2.iso\EFI\BOOT\grub.cfg в качестве основы, но к параметрам ядра нужно дописать указание пути к файлу образа в виде «iso-scan/filename=...».
Множество примеров пунктов меню для «петлевого» запуска различных дистрибутивов Linux можно найти в файле \grub-2.02\docs\autoiso.cfg дистрибутивного пакета grub-2.02.tar.gz.
Описанным способом были сформированы пункты меню для запуска модулей дистрибутива System Resque CD [7], ISO-образ которого размещен в файле /ISO/systemrescuecd-x86-5.3.2.iso загрузочного носителя.
Стоит отметить метод подключения корневой файловой системы модуля NTPASSWD, предназначенного для сброса пароля администратора Windows. Она состоит из двух блоков: основного initrd.cgz и вспомогательного scsi.cgz с драйверами устройств SCSI. Их совместное использование реализовано командой:
initrd16 (loop0)/ntpasswd/initrd.cgz (loop0)/ntpasswd/scsi.cgz
Дистрибутивы Mageia не поддерживают «петлевую» загрузку, из-за чего их ISO-образы были записаны в разделы загрузочного носителя.
К сожалению, попытка выполнить запуск путем установки фокуса на содержащий дистрибутив раздел и передачи управления загрузчику командой chainloader +1 не увенчалась успехом. Это не удивительно, потому что загрузчик рассчитан на размещение в MBR, а не в загрузочный сектор раздела.
На помощь пришла команда GRUB2 syslinux_configfile, обнаруженная в эталонном конфигурационном файле \grub-2.02\docs\osdetect.cfg, который входит в состав дистрибутивного пакета grub-2.02.tar.gz. Она позволяет подключить к текущему меню GRUB2 блок, записанный в формате загрузчика isolinux. Так это выглядит для дистрибутивов Mageia:
menuentry "Mageia 6.1 Live DVD" {
search --set=root --fs-uuid 2018-10-01-18-55-31-00
syslinux_configfile -i /isolinux/isolinux.cfg
}
menuentry "Mageia 6 Installation DVD" {
search --set=root --fs-uuid 2017-07-15-07-08-52-00
syslinux_configfile -i /isolinux/isolinux.cfg
}
Команды search в приведенных примерах осуществляют поиск на доступных носителях разделов с указанными в параметрах --fs-uuid уникальными идентификаторами и делают их текущими.
Узнать значения идентификаторов разделов можно с помощью команды ls -l, введенной в командном режиме GRUB2:
grub> ls -l
...
Раздел hd0,msdos3: Тип файловой системы iso9660 – Метка "Mageia-6-i586" – Время последнего изменения 2017-07-15 07:08:52 Суббота,
UUID 2017-07-15-07-08-52-00 – Раздел начинается с 3932160КиБ – Общий размер 3829760КиБ
Раздел hd0,msdos2: Тип файловой системы iso9660 – Метка "Mageia-6.1-Xfce-LiveDVD" – Время последнего изменения 2018-10-01 18:55:31 Понедельник,
UUID 2018-10-01-18-55-31-00 – Раздел начинается с 1950720КиБ – Общий размер 1981440КиБ
...
Команды syslinux_configfile подключают блоки меню из файлов isolinux.cfg на найденных разделах. Эстетический недостаток этого способа состоит в том, что вместо описаний пунктов меню на экране будут отображаться их метки. Но зато сохраняется функциональность.
Образ LiveDVD работает без замечаний – так, как будто был использован обычный загрузочный носитель. А для образа инсталляционного диска придется указать местонахождение установочных файлов. Для этого:
- в окне с сообщением I can't access a Mageia Installation disc in your CDROM drive нажать кнопку No;
- в окне запроса носителя с установочными файлами (Please select the disk containing the copy of the Mageia Distribution install source) выбрать устройство USB Mass Storage Device;
- в окне запроса раздела (Please select the partition containing the copy of the Mageia Distribution install source) выбрать третий раздел размером 3740 Мбайт;
- в окне ввода пути к установочным файлам поле Please select directory оставить пустым – просто нажать <Enter>.
Установочные файлы будут найдены, запустится инсталлятор, и установка продолжится в штатном режиме.
Заключение
В результате выполнения приведенных в статье рекомендаций в среде операционной системы Windows с использованием штатных средств и минимального набора стороннего программного обеспечения может быть создан универсальный мультизагрузочный носитель на базе GRUB2, пригодный для первичной инициализации компьютера или восстановления работоспособности операционной системы компьютера.
В статье рассмотрен способ подключения блоков загрузочного меню из конфигурационных файлов загрузчиков SysLinux/IsoLinux с помощью команды syslinux_configfile.
На сайте журнала http://samag.ru приведен рабочий вариант конфигурационного файла GRUB2 для загрузочного носителя BIOS/EFI с возможностью запуска модулей SystemResqueCD, получения рабочей среды на базе GNU/Linux Mageia 6 и установки этой операционной системы, который содержит.
- grub.cfg – основной конфигурационный файл GRUB2;
- pc.cfg – блок меню, специфичный для загрузки в режиме BIOS;
- efi.cfg – блок меню, специфичный для загрузки в режиме EFI;
- help.txt – файл с подсказкой о процедуре загрузки Windows;
- helpefi.txt – файл с описанием особенностей использования SystemRescueCD в режиме EFI.
При изучении возможностей GRUB2, помимо интернет-источников [5], целесообразно использовать справочную информацию, имеющуюся в папке \grub-2.02\docs\ дистрибутивного пакета grub-2.02.tar.gz:
- grub.info – документация на английском языке, которая может быть просмотрена в любом текстовом редакторе;
- grub.cfg – конфигурационный файл, содержащий основные примеры загрузки операционных систем;
- autoiso.cfg – конфигурационный файл, содержащий примеры загрузки операционных систем в «петлевом» режиме из файлов ISO-образов;
- osdetect.cfg – конфигурационный файл, содержащий сценарии поиска загрузочных разделов для множества операционных систем с последующей их загрузкой.
В ходе подготовки загрузочного носителя следует сконцентрировать внимание на выполняемых действиях. Ошибка в набранной команде может привести к необратимой потере информации, хранящейся на компьютере.
- Утилита DD для Windows – http://www.chrysocome.net/dd.
- Загрузчик GRUB2 – ftp://ftp.gnu.org/gnu/grub/.
- Архиватор и файловый менеджер 7Zip – https://www.7-zip.org.
- Текстовый редактор AkelPad – http://akelpad.sourceforge.net/.
- Cтатьи о загрузочных носителях – https://www.bootdev.ru.
- Mageia GNU/Linux – http://www.mageia.org/ru/.
- System Rescue CD – http://www.system-rescue-cd.org.
- Спецификация UEFI 2.7 – http://www.uefi.org/sites/default/files/resources/UEFI%20Spec%202_7_A%20Sept%206.pdf.
Ключевые слова: Linux, rescue.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|