Мультизагрузочный CD с использованием GRUB

в 15:41, , рубрики: grub, linux, LiveCD, Накопители, операционные системы, метки: , ,

Существует немало ситуаций, когда воспользоваться винчестером бывает невозможно: несовместимость ATA режимов HDD и IDE-тракта, разрушение загрузчика или таблицы разделов, утеря паролей, нарушение целостности файловой системы после аппаратных сбоев или вирусной атаки и т.д. и т.п.

Системы, предназначенные для преодоления подобного рода трудностей, обычно называют «спасательными» (rescue) или аварийными. До недавнего времени основным носителем таких систем были дискеты со всеми их недостатками. Как то: малый объём, низкая надёжность, «неприлично» низкая, по нынешним временам, скорость доступа. Не секрет, что «флоппики» нынче умирают, а потребность в rescue-системах всё ещё существует. Вот и приходят на смену дискетам CD и flash-карты.

Как-то «сложилось», что мне несколько раз приходилось писать то в Сети, то в периодике о мультизагрузке вообще и мультизагрузчиках, в частности. Я программировал средства модификации главной загрузочной записи (MBR) сам, описывал и популяризовывал чужие… Одним словом: некоторый опыт по этому поводу имею.

С другой стороны, ещё одна «близкая» мне в последние пару лет тема — LiveCD. Вплоть до создания собственных. И мог ли я пройти мимо сообщения о том, что очередная версия моего любимого GRUB может быть инсталлирована на CD? Нет, конечно. Тем более, что собственный «парк» rescue-систем, состоящий в основном из дискет, всё чаще стал давать «сбои»: старость, знаете ли… Одним словом, создать коллекцию rescue-систем на одном CD-диске показалось мне заманчивым. И вот что из этого получилось…

Почему — GRUB?

Возможность сделать CD загружаемым существует уже достаточно давно. Так, в Linux для этого обычно используется замечательный загрузчик Питера Анвина syslinux (точнее, один из его компонентов — isolinux). Всем хорош: и фонт свой можно загрузить (а значит и локализовать в полной мере), и опции загрузки обеспечить, и help вывести (хоть десяток: по штуке на каждую функциональную клавишу). GRUB, однако, как и положено «GRand Unified» умеет почти всё то же самое, но, вдобавок: собственные средства создания, просмотра и редактирования MBR (включая Partition Table), обеспечивает доступ ко многим файловым системам, позволяя искать и просматривать файлы на них и, наконец, предоставляет возможность загрузки не только ядер Linux, но и «чуждых» разделов, имеющих собственные загрузчики (BSD, Windows, etc...)

В данном случае, можно не напоминать о возможностях загрузки по сети, шифруемых паролях и других достоинствах GRUB: достаточно и того, что помимо функций загрузчика это ещё и довольно мощный инструмент, ценный в составе rescue-системы сам по себе.
Почему — LiveCD?

Повторяться, очевидно, нет необходимости: преимущества CD и flash-карт над дискетами столь существенны, что рациональность создания rescue-системы на CD доказательств, пожалуй, не требует. Ещё недавно существовавшие ограничения формата ISO-9660 (CD) на длину и набор символов имён файлов, глубину вложения директорий, по мере усовершенствования самого ISO-9660 и повсеместного распространения его расширения Joliet, можно считать окончательно снятыми.

Почему, однако, не flash-карта? Устройство не менее надёжное и значительно более компактное. По той простой причине, что загрузка с USB-устройства возможно далеко не на всех IBM PC. Хуже того: выполняется на системах разных производителей по-разному. Признаться, даже не знаю, существует ли в отрасли единый стандарт, регламентирующий алгоритм такой загрузки. Похоже: нет. Другого объяснения возможности загрузки одной и той же «флэшки» на одних системах и полного отказа на других я не нахожу. Жаль, конечно, но всё-таки придётся предпочесть CD, возможно: пока.
Делаем…

Поскольку GRUB — «детище» GNU (Gnu is Not Unix!), то рядом с GNU его, конечно, и следует искать. Пользователи MS Windows не то, чтобы не могут записать диск, о котором пойдёт речь, но его создание под MS Windows, скажем, нетривиально. Тогда как под Linux процедура выглядит вполне «обыденно».

И, разумеется, любой пользователь может воспользоваться подготовленным образом диска, предварительно загрустив файл rescue.iso.bz2 с unix.ginras.ru.

В настоящее время GRUB входит в большинство дистрибутивов Linux. Это, однако, не означает, что этого достаточно. Требуется версия не ниже 0.95, поскольку нас интересует возможность инсталляции на CD. Итак: на alpha.gnu.org/gnu/grub/ берём последний grub-0.9х-i386-pc.tar.gz. Положим: grub-0.95-i386-pc.tar.gz
в каталоге, представляющем собой «заготовку» будущего диска (положим: rescue) создаём подкаталог /boot/grub
переносим туда все файлы из вышеупомянутого архива редактируем в соответствии с собственным замыслом boot/grub/menu.lst готовим iso-образ командой:

mkisofs -o rescue.iso
-r -J -V "Rescue" -A "Rescue"
-b boot/grub/iso9660_stage1_5
-c boot/boot.cat
-v -no-emul-boot -boot-load-size 4 -boot-info-table
rescue

«прожигаем» полученный образ, скажем, командой:

cdrecord dev=ATAPI:0,1,0 speed=10 -multi -v rescue.iso

(или любым другим доступным вам способом). dev=ATAPI:0,1,0 и speed=10 вашем случае могут быть, разумеется, другими.

Готово, однако…

Нетрудно заметить, что опции команды mkisofs аналогичны таковым при использовании isolinux. Неудивительно: принцип используется один и тот же, а поподробнее об этом — в man mkisofs.

Обратите внимание также на то, что для cdrecord использована опция -multi, из чего следует, что диск мы записываем мультисессионный. А почему бы, в самом деле, не дополнить со временем (или даже изменить) содержимое нашего диска, раз мультисессионность это допускает? Есть только одно «но»: /boot/grub/menu.lst изменить в следующей сессии не удастся. То есть изменить можно: запись новой сессии с новой версией menu.lst дополнит TOC (Table Of Contebt), что даст полную иллюзию замены файла… Вот только GRUB будет «тупо» использовать первую версию, которой с нашей точки зрения и на диске-то нет… Нелогично? Согласен. Более того: это ошибка в этом самом iso9660_stage1_5, но… придётся пока смириться.

Мультисессионностью диска, кстати, могут воспользоваться и пользователи MS Windows: любое представляющееся вам полезным приложение (из числа запускаемых в DOS Prompt, разумеется) может быть «дописано» к предлагаемому диску в составе ещё одной сессии. Нужно только не забыть при «прожиге» исходного iso-файла «предупредить» записывающую программу, что диск — мультисессионный.
Детали

Особенностей, отличающих использование GRUB на CD почти нет. За исключением:

Команда root не требуется: при загрузке с CD root-ом полагается именно CD. Впрочем, для адресации к разделам hdd root всё же потребуется. Как и для возврата к CD. Нетрудно догадаться, что выглядеть это будет как

root (cd)

Загрузка rescue-системы на основе Linux труда не представляет. Команда

kernel /boot/parted/kernel vga=normal
devfs=nomount load_ramdisk=1

загрузит ядро Linux с соответствующими опциями, а команда

initrd=/boot/parted/partroot.gz

разместит в памяти файловую систему (Initial RAM disk). Если rescue-система предполагает её наличие, разумеется.
Для загрузки «чужой» системы из раздела n диска m потребуются тривиальные:

root (hdm,n)
makeactive (hdm,n)
chainload +1
boot

boot в составе menu-секции — излишня.
Для загрузки «чужой» системы, существующей только на дискете используем:

kernel /grub/memdisk floppy
initrd image

memdisk — файлик из состава syslinux, а image — образ дискеты. Если «чужая» система имеет место только как дискета (не образ), то необходимый образ можно получить командой dd или (под DOS/Windows) с помощью популярной программы rawrite.

Чем «начинить»?

Вообще-то, это дело вкуса… Но некоторые рекомендации возможны:

Как это ни странно, но я бы посоветовал образ дискеты от win'98: некоторые утилиты производителей (те же «переключатели» udma-моды от Seagate и Fujitsu, updater BIOS от AWARD) существуют только как DOS-приложения. Раз уж мы «грузим» DOS, то стоит воспользоваться и пресловутым nc (или — vc для патриотично настроенных), ghost от Symantec (для копирования дисков/разделов), хорошо зарекомендовавшим себя hddspeed Михаила Радченко, для любителей — PQMagic от PowerQuest. Во всех случаях, как видите, речь идёт о ПО либо свободно распространяемом, либо поставляемом производителями вместе с mainboard. Так или иначе: лицензионные проблемы — на совести составителя диска.
Из rescue-систем на основе Linux мне более всего импонирует компиляция авторов parted: поддержка большинства файловых систем, MidNight Commander, всё необходимое для проверки и «ремонта» файловых систем, плюс сама parted, не такая красивая, как PQMagic, но и не уступающая ему в функциональности. А если принять во внимание умение работать с современными файловыми системами Linux (reiserfs, xfs и т.п.), то и превосходящая. Диск parted, кстати, снабжён очень хорошим help-ом, который вообще можно рассматривать как краткую инструкцию по использованию Linux rescue-систем.
Как «тестер» оборудования можно использовать stresslinux, но я бы посоветовал вместо этого сборку собственного, самого «свежего» ядра и соответствующей «свежести» пакет sensors. А вот утилиты «разогрева» системы и «нагрузки» IDE-устройств действительно можно позаимствовать из stresslinux.
IMHO, GRUB — наиболее универсальный мультизагрузчик. Нельзя, однако, отрицать, что его авторы никогда не стремились к созданию продукта с «максимально дружественным» интерфейсом. Поэтому, даже не считая коммерческих продуктов и LILO (существующего только в среде Linux), интерес представляет ещё несколько мультизагрузчиков. Стоит отметить (и, при желании, дополнить ими создаваемый «джентльменский набор») два из них:
SmartBootManager группы «китайских товарищей», пытающийся определить все загружаемые устройства и их разделы. С переменным, прямо скажем, успехом.
И gujin Etienne LORRAINE который, помимо разделов, обнаруживает на дисках ещё и ядра Linux, правда, только если последние расположены в каталогах /boot. Симпатично: не зря во Франции написан.

А флешка?

Я сознательно не касался инсталляции GRUB на флеш-картах: для этого iso9660_stage1_5 не требуется. Что, правда не означает отсутствия проблем. Нужно, чтобы ядро host-системы «видело» флешку, чтобы «целевой» IBM PC мог загрузиться с usb-устройства, а загружаемая rescue-система умела читать с него (чего не скажешь, например, о дискетах DOS/Windows). Скажем так: прецеденты успешной инсталляции были, а вот полной уверенности в результате пока — нет. Иногда для флеш-карт более предпочтительным оказывается syslinux: хоть он и ограничен «по определению» (читать: только с FAT, загружать: только ядра и initrd Linux), но то, что умеет — делает уверенно. syslinux, кстати, существует и успешно запускается как под Linux, так и под DOS/Windows (вплоть до XP). Впрочем, это уже совсем другая история.
Ну, вот, как то так.

Автор: Karamax


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js