Изготовление мультизагрузочного CD-диска
Автор: (C) Juraj Sipos
Перевод: (C) Александр Куприн


Исследуя в очередной раз просторы Интернета, я обратил внимание на то, что вопросы создания "многоОСных" CD почти не освещены. Немногие производители специализированного коммерческого софта под Windows включают в свои продукты возможность создания загрузочных компакт-дисков. Но мне ещё не приходилось встречать программу, позволяющую создавать мултизагрузочные диски. На мой взгляд, создание таких дисков в среде Linux задача более простая, чем в Windows. Существует множество доступных утилит, которые помогут вам создать загрузочный CD с Linux'ом. Но вот мултизагрузочный CD -- это уже деликатес. И какой! Имея такой диск, вы становитесь счастливым обладателем нескольких операционных систем в одной упаковке. На этом диске можно разместить несколько версий Linux -- с поддержкой журналируемых файловых систем и без них, с дополнительными утилитами для восстановления данных и пр. Кроме этого, на диске могут быть размещены и другие ОС -- BSD, QNX, Plan9 и т.д. Общим числом до 10 (десяти)! Впечатляет? Читайте дальше.

Почему это может быть полезно (и интересно) для вас? Представьте себе -- вы используете в своей работе Linux и FreeBSD. Или, к примеру, вы установили на свой компьютер несколько дистрибутивов Linux и вдруг с системой что-то случилось и нет никакой возможности получить доступ к данным обычным путём. Либо вам придётся воспользоваться загрузочной дискетой (но тут могут возникнуть проблемы -- например, вы используете журналируемую файловую систему типа XFS или шифруемую файловую систему и вам нужно 5 загрузочных дискет, чтобы получить к ним доступ), либо создать мултизагрузочный CD с несколькими версиями ядра и набором утилит на все случаи жизни. Думаю, небольшой CD с 10-ю операционными системами избавит вас от заблуждений, что в этом мире всегда что-то идёт неправильно и с этим ничего невозможно поделать.

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

Загрузочный CD использует так называемый стандарт El Torrito. Более подробно с ним можно ознакомится на http://www.cdpage.com/Compact_Disc_Variations/danaboot.html

Для нас важной информацией будет то, что мы можем записать на компакт-диск до 10-и операционных систем и использовать в дальнейшем этот диск на любой машине, чей BIOS поддерживает функции загрузки с CD. Загрузочный ISO-образ может быть создан с возможностью эмуляции дискет объёмом 1.44MB или 2.88MB, либо жёсткого диска.[1]

От слов к делу -- практическое руководство по подготовке мултизагрузочного CD

Во-первых, в вашем распоряжении должен быть образ загрузочной дискеты под DOS или Linux. Образ (или загрузочный образ) -- это файл, представляющий из себя копию загрузочной дискеты[2]. Существует несколько типов образов. Для создания одного из них вы можете воспользоваться командой dd (disk dump) и создать образ одного из разделов файловой системы (в качестве примера здесь показано создание образа первого раздела файловой системы [hda1][3]):

dd if=/dev/hda1 of=/my_image.file

Что-то у меня сомнения по поводу размера получившегося файла... Прим. ред.

Файл my_image.file будет создан и размещён в корне вашей файловой системы. Не каждый образ является загрузочным -- это зависит от содержания, поэтому хорошей идеей будет запастись "энным" количеством образов (под Linux или BSD). Проще всего это сделать загрузив такие образы из Интернета:

http://www.ibiblio.org/pub/Linux/system/recovery/

Ibiblio является одним из лучших архивов в Сети. Образы загрузочных дискет вы можете найти по указанной выше ссылке. При этом вам не нужно беспокоится о том, чтобы делать их загрузочными -- всё уже сделано за вас[4]. Однако, если вы хотите создать образ загрузочной дискеты своими руками, то можете воспользоваться утилитами Bootkit, CatRescue, SAR, disc-recovery-utils и им подобными, которые помогут вам создать загрузочные дискеты (или их образы).

Файлами, которые нам понадобятся для того, чтобы создать мултизагрузочный компакт-диск, будут fbsd-flp-1.0.3.bin (загрузочный образ дискеты FreeBSD размером 2.88MB), tomsrtbt или создайте собственные образы, сняв копии с загрузочных дискет, которые находятся в вашем распоряжении. Вставьте дискету (DOS или Linux) в дисковод и введите следующую команду:

dd if=/dev/fd0 of=boot.img bs=512 count=2880[5]

Неплохой идеей будет посетить http://freshmeat.net и провести поиск по ключевому слову "mini" -- возможно вы обнаружите несколько мини-дистрибутивов Linux, о которых даже и не подозревали.

Сайт http://www.ibiblio.org/pub/Linux/system/recovery/ содержит (кое-что я удалил)...

  • Bootkit-1.01.tar.gz
  • CatRescue101E.tgz
  • SAR-2.25.tar.gz
  • banshee-linux.0.61.tar.bz2
  • brd-2.0.tar.gz
  • disc-recovery-utils-1.0.tgz
  • fbsd-iso-1.0.3.bin.gz
  • fspace.tgz
  • genromfs-0.5.1.tar.gz
  • mulinux-5r0.lsm
  • mulinux-5r0.tgz
  • picoboot-0.95.tar.gz
  • rescue02.zip
  • resque_disk-2.3.99-pre9-A.tgz
  • rip-10.exe
  • rip-51.iso.bin
  • sash.tar.z
  • tomsrtbt-2.0.103.ElTorito.288.img.bz2
  • tomsrtbt-2.0.103.dos.zip
  • trccs-0.8.1r2.iso.bz2
  • trccs-0.8.1r2.tar.bz2
  • trccs-0.8.1r2_boot_disk.img.bz2
  • yard-2.1.tar.gz
  • yard-prefabs-2.tgz
  • zdisk-2.14.tar.gz

Есть ещё несколько неплохих сайтов, откуда вы можете скачать образы загрузочных дискет:

LIAP (http://www.liap.eu.org/): LIAP -- это "Linux в пилюлях" -- сайт содержит множество образов 1.44MB'ых дискет с различными утилитами и разными версиями ядра для борьбы со всякого рода неприятностями.

LEKA RESCUE FLOPPY (http://leka.muumilaakso.org/): Leka Rescue Floppy -- миниатюрный дистрибутив, помещающийся на 1.44MB'ой дискете.

TOMSRTBT (http://www.toms.net/rb/): Tomsrtbt (Tom's Root Boot) мини-дистрибутив, содержащий утилиты по восстановлению данных (очень хорошие). Вы можете загрузить образ на 2.88MB с вышеуказанного сайта.

Кроме этого вы можете скачать образы загрузочных дискет для DOS. Посетите, например, http://www.bootdisk.com и скачайте их, если вам это необходимо. Сайт содержит образы загрузочных дискет для DOS с версии 5.00 по 6.22, Win 95/98/ME, наборы для NT4/NT5, DrDOS 7.х и пр. Здесь же вы найдёте загрузочную дискету для FreeDOS.

Немного терминологии. Существует разница между загрузочным образом дискеты и ISO-образом, который записывается на CD. Что нам нужно, так это загрузочные образы дискет, из которых мы создадим ISO-образ.

1) Вы можете подготовить образы загрузочных дискет при помощи команды:

dd if=/dev/fd0 of=/my_image.img

или вы можете скачать эти образы из Интернета (см. ссылки, указанные ранее). Теперь вернёмся "домой", в Linux. :) Создайте каталог /CD и скопируйте в него загрузочные образы (помните, их не должно быть больше 10). Проверьте, чтобы имена файлов соответствовали формату 8.3 (до 8 символов для имени и до 3 для расширения). Это необходимо для совместимости с DOS-программой makebt.exe, которой мы воспользуемся чуть позже.

2) Если вы хотите использовать оставшееся свободное место на CD (10 образов загрузочных дискет займут около 14MB, максимум -- 28MB), скопируйте утилиты в поддиректорию /CD/Soft. Информацию о том, как получить доступ к компакт-диску (в среде Linux и DOS) дана ниже.

3) Теперь можно создать ISO-образ:

mkisofs -b image.img -c boot.cat -J -l -R -r -o /cd.iso /CD

Файл "boot.cat" или "boot.catalog" будет автоматически создан, поэтому нет необходимости создавать его в директории /CD. Просто выполните команду -- всё остальное она сделает за вас. В качестве загружаемого образа вы можете указать имя любого образа из тех, что скопированы в /CD. Он и будет тем образом, который будет выполняться при загрузке с CD. Размер образа должен быть 1.44MB или 2.88MB.

4) Файл cd.iso будет создан в корневом каталоге / (/cd.iso). Проверить этот файл можно смонтировав его (mount /cd.iso /mnt -o loop). Если всё в порядке, то вы сможете просмотреть содержимое ISO-файла в директории, к которой его подмонтировали (в нашем случае это /mnt). Если этот ISO-образ записать на CD, то мы получим "одно-загрузочный" CD.

5) Теперь нам необходимо отредактировать ISO-образ таким образом, чтобы получить возможность мултизагрузки оставшихся образов. Тем самым мы включим их в загрузочное меню, которое будет отображаться при загрузке с CD. Меню будет представлено пунктами, пронумерованными от 1 до 10 (если вы создадите все 10 образов). Выбор будет осуществляться указанием номера необходимой операционной системы.[12]

6) После того как мы закончим редактирование -- можно будет записывать CD.

Поскольку у меня нет времени, чтобы написать скрипт на Perl, который бы редактировал ISO-образ и т.к. редактирование ISO-образа может оказаться делом сложным и для некоторых запутанным (а я хотел сделать статью как можно более простой в восприятии), то лучшим выходом из создавшегося положения будет использование программ, свободно доступных в Интернете. Одной из них является makebt.exe. Когда-то я нашёл эту программу в каком-то из закоулков Сети, но, к сожалению, первоисточник найти уже не могу, поэтому я выложил её на своём сайте http://www.tankred.sk/~juro/freebsd/makebt.zip. Где вы и сможете её скачать.

Вы можете запустить makebt.exe под DOSEMU или BOCHS (http://bochs.sourceforge.net) или загрузить DOS с системной дискеты, образы которых доступны на http://www.bootdisk.com или создать загрузочную дискету с FreeDOS и, загрузившись с дискеты, запустить утилиту makebt.exe. Если у вас нет раздела под DOS, тогда выходом из сложившейся ситуации будет использование эмулятора DOSEMU -- он может получать доступ к разделам Linux, где и будет лежать cd.iso и ждать ваших "очУмелых ручек".

Когда вы запустите makebt.exe, он попросит ввести полный путь[6] и имя файла ISO-образа, который нужно отредактировать и вы увидите экранную форму, в которую затем нужно ввести имена образов загрузочных дискет:[7]

-----------------------------------------------------------------------------
Make Multiple Boot CD-ISO Image Modifier ver 1.02
ISO File path and name: e:\temp\cd.iso
Bootable Disk Image Boot media type Default LBA
------------------- --------------- ------- --------
BC ) BOOT.CAT
1 ) FBSD.IMG 1.44M Floppy Y
2 ) LINUX.IMG 2.88M Floppy -
3 ) PLAN9.IMG 1.44M Floppy -
4 ) QNX.IMG 1.44M Floppy -
5 ) OPENBSD.IMG 2.88M Floppy -
6 )
7 )
8 )
9 )
10 )




TAB = move between fields, up/down arrows = move between rows, F1 = Confirm
Use left and right arrow to choose emulation type
-----------------------------------------------------------------------------

BC означает Boot Catalog (загрузочный каталог). Просто укажите boot.cat и и не волнуйтесь ни о чём, т.к. вы уже использовали эту строку в опциях при вызове команды mkisofs (главное, что ISO-образ уже содержит строку "boot.cat"). Теперь введите имена загрузочных образов. Вы должны вводить их имена в формате 8.3.

Кроме имени образа вы должны указать вид эмуляции -- эмуляция 1.44MB дискеты или 2.88MB. Мы будем использовать только эмуляцию на 1.44MB и 2.88MB, но если хотите поэкспериментировать с эмуляцией жёсткого диска, то создайте раздел Linux на 650MB и скопируйте туда файловую систему с вашей машины[8]. Для выбора типа эмуляции используйте клавишу управления курсором (стрелка вправо). Кроме того, в колонке "Default" вы должны указать, который из образов должен быть загружаемым по-умолчанию. Для этого нужно нажать "Y". И последнее (хотя оно должно быть первым) -- переход между горизонтальными полями ввода -- клавиша "TAB". Перемещение вверх-вниз осуществляется как обычно -- соответствующими клавишами управления курсором.

Когда закончите вводить данные, нажмите клавишу F1 (возможно придётся нажать её несколько раз -- программа может среагировать на ваше нажатие не сразу). makebt.exe обладает зачатками интеллекта (точнее вежливости) -- если вы ввели неверное имя файла, то она сообщит об этом (после нажатия клавиши F1). Не включайте никаких описаний для загрузочных образов в меню, которое появится после нажатия F1, поскольку эта особенность используется главным образом в SCSI CD-ROM'ах и я не изучил её досконально.

Ну, вот и всё. Теперь можно записывать CD.

cdrecord -v speed=8 dev=0,0,0 /cd.iso[9]

Когда вы загрузитесь с CD, то не увидите описания для операционных систем -- только двузначные номера (в конце строки в скобках)[10]. У меня не было достаточно времени для экспериментов, чтобы разобраться с этим, поэтому хорошей идеей будет записать порядковые номера пунктов меню и описание к ним, чтобы быть в курсе какая система и откуда грузится.

Здесь мы имели дело с образами дискет, являющимися системными, поэтому если вы загрузились с CD, который только, что создали, то вы можете получить доступ к вашему CD-ROM'у выполнив команду "mount /dev/hdc /mnt". Тем самым вы получите возможность воспользоваться утилитами, которые сохранили в каталоге /Soft. В случае с системой DOS вам необходимо добавить в config.sys драйвер для доступа к CD, а в autoexec.bat прописать загрузку программы mscdex.exe.

Если вы хотите создать под Linux программу, которая будет модифицировать ISO-образ, то попробуйте сравнить оригинальный ISO-образ с тем, который получится после внесения в него изменений утилитой makebt.exe. Для этого подойдёт утилита сравнения двоичных файлов bdiff, автор Giuliano Pochini. Bdiff небольшая программка, делающая с двоичными файлами тоже, что и известные утилиты diff и patch с текстовыми файлами. Найти её можно здесь: http://space.virgilio.it/[email protected]/. Учтите, что оба ISO-образа должны быть одинакового размера. Утилита сравнения двух файлов выдаст вам смещение, где записан флаг, устанавливающий режим мултизагрузки. Это сектор 17 (Boot Volume Descriptor) и Boot Catalog Sector[11].

Я создал множество мултизагрузочных CD, используя всё вышеизложенное и проблем с их созданием не было никаких. Однако, учитывая то, что первый блин всегда может выйти комом, советую вам использовать для ваших экспериментов CD-RW диски. Удачи!

Примечания переводчика

[1] Последняя возможность заинтересует тех, кто хочет разместить отинсталлированную операционную систему на компакт-диске.
[2] Для тех, кто не в курсе, что это такое -- речь идёт о точной посекторной (или, если хотите побайтовой) копии дискеты. Т.е. первые 512 байт образа -- это boot-сектор, далее -- всё зависит от типа файловой системы, размещённой на дискете.
[3] Автором статьи делается упор на то, что это должен быть Linux-раздел. Хотя, на самом деле, это не обязательно -- с таким же успехом на его месте может быть и DOS-раздел. Главное, чтобы он был primary, а не extended.
[4] Прошу учесть, что не все файлы по указанной ссылке являются загрузочными образами. Ищите те, что содержат в имени файла "iso" или "img". Да, и к размеру присматривайтесь -- образы дискет будут двух размеров -- 1.44MB или 2.88MB, с учётом компрессии.
[5] Учтите, если вы планируете создать копию с дискеты, чей размер отличается от 1.44MB, вы должны указать для ключа count другое значение. Для 2.88MB -- это будет в два раза больше -- 5670. Вообще-то ключи bs и count нужны только в том случае, если размер дискеты отличается от стандартной -- 1.44MB (хотя где-то же должны жить и здравствовать дисководы на 2.88MB).
[6] Обращаю ваше внимание на то, что обязательно нужно указать полный путь к ISO-образу. Даже если makebt.exe и ISO-образ и находятся в одном и том же каталоге. Проверено -- на эти грабли я уже наступил. :)
[7] Вот, что мне удалось обнаружить, создавая свой собственный мултизагрузочный CD: оказывается первым пунктом меню при загрузке с CD идёт тот образ загрузочной дискеты, что был указан в опциях программы mkisofs. Поэтому в программе makebt.exe нужно указывать только "недостающие" образы.
[8] Увы, но в этом месте автор, что-то очень "мутно" изъясняется, что дальше делать с таким разделом -- в оригинале статьи стоит фраза оканчивающаяся словом "experiment" и многоточие. Скорее всего автор забыл дописать предложение, планируя к нему вернуться позже. Писать свои домыслы на эту тему, не проверенные практикой, не буду, чтобы не загружать вам мозги.
[9] Если будете писать на CD-RW, не забудьте указать ту скорость, на которой компакт-диск позволяет писать, а не 8-ю, как это указано в примере. Хотя уже появились CD-RW диски с возможностью записи на 8-й скорости.
[10] Очень странная ситуация: для первого пункта меню -- это образ указанный при вызове программы mkisofs -- сигнатура отлична от нулевой -- (19). Первым я поставил образ загрузочной дискеты для Windows'98. Для всех остальных пунктов, которые были добавлены при помощи makebt.exe -- (00).
[11] К сожалению, утилита bdiff хороша, как инструмент для "латания" двоичных файлов. Этого у неё не отнимешь. Но вот для получения информации о том, где находятся "разночтения" в файлах, лучше подойдёт утилита cmp из пакета diffutils.
[12] Не уверен, что это ошибка автора, но создавая свой собственный "десятиОСный" загрузочный CD, я обнаружил следующую странность. Первые девять пунктов меню нумеруются от 1 до 9. Далее для 10-го и 11-го (!) пунктов меню используются в качестве "горячих" клавиш символы ":" и ";", соответственно. Методом "научного втыка" я выяснил, что первый пункт соответствует тому образу, что был указан в опциях команды mkisofs. А второй -- тому образу, что указан первым в списке образов в программе makebt.exe (в нашем примере это fbsd.img). При этом оба этих образа не обязательно должны совпадать. Таким образом у нас получается 11 вариантов загрузки! Но если бы всё было так хорошо, то это было бы очень странно. Законы Мерфи никто не отменял. О чём это я? А проблема в следующем -- я не смог найти горячие клавиши для пунктов 10 и 11. Хотя там и указаны символы ":" и ";", но их нажатие ни к чему не приводит. Попытка "потоптать" всю клавиатуру не дала никаких результатов. Возможно кому-то из читателей удастся решить эту проблему. В таком случае не забудьте поделиться как. И последнее. Идеи, изложенные в статье проверялись в среде Junior 2.0, обновлённом из Сизифуса. Пишущий CD-привод -- SONY.


Copyright (C) 2002, Juraj Sipos. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 85 of Linux Gazette, December 2002

Вернуться на главную страницу