Как сделать загрузочный ISO-образ CD диска в Linux

Конечно, CD и DVD диски потихоньку выходят из обращения, но иногда еще нужны.
Сделать загрузочный образ диска в Linux очень просто.

1. В удобном месте создаем директорию iso_root, в ней будут лежать все файлы, которые хотим поместить на загрузочный диск.
2. Копируем в директорию iso_root нужные файлы.
3. Скачиваем загрузчик. Я воспользовался ISOLINUX из пакета загрузчиков SYSLINUX. Можно скачать нужную версию загрузчика вручную на https://www.kernel.org/pub/linux/utils/boot/syslinux, и распаковать полученный архив во временную папку, а можно воспользоваться готовым скриптом:

#!/bin/bash

SYSLINUXNAME="syslinux-4.02"
SYSLINUXADDR="https://www.kernel.org/pub/linux/utils/boot/syslinux/4.xx/$SYSLINUXNAME.tar.gz"
WORKDIR="/tmp"

cd $WORKDIR
wget $SYSLINUXADDR
tar -xf "$SYSLINUXNAME.tar.gz"
cd "$SYSLINUXNAME/"

Скрипт скачает нужную версию SYSLINUX (я использовал 4.02) в директорию /tmp и распакует архив в каталог /tmp/syslinux-4.02.
Весь загрузчик нам не понадобится, поэтому скопируем в директорию iso_root только нужные файлы:
isolinux.bin — собственно, загрузчик ISOLINUX
menu.c32 (или vesamenu.c32) — файл, отображающий меню загрузочного диска, vesamenu.c32 если мы хотим сделать красивое графическое загрузочное меню
chain.c32 — утилита, передающая управление другим загрузчикам, например, загрузчику, расположенному на жестком диске.
reboot.c32 — утилита, перезагружающая компьютер, нужна, если мы хотим предусмотреть возможность перезагрузки из меню загрузочного диска.
memdisk — программа, распаковывающая в память образы (в т.ч. и сжатые архиватором gzip) жестких дисков, дискет.
Примечание: загрузчик SYSLINUX — операционная система в миниатюре, а файлы *.c32 — исполняемые загрузчиком программы.

4. Конфигурируем загрузчик и загрузочное меню. Загрузчик ISOLINUX ищет в том каталоге, в котором расположен, конфигурационный файл isolinux.cfg, содержащий описание меню и конфигурацию загрузки.
Для примера я создал тестовый образ диска при заргузке с которого можно передать загрузку на первый жесткий диск компьютера, перезагрузить его или загрузить образ дискеты с DOS (позже расскажу для чего его делал и как). Содержимое конфигурационного файла isolinux.cfg таково:

ui menu.c32
PROMPT 0


menu title Test disk

label bootlocal
	menu label Boot From Hard Drive
	kernel chain.c32
	append hd0 0
	timeout 1000

label dos
	menu label Minimal DOS system
	kernel memdisk
	initrd dos/dos.gz
	append harddisk

label reboot
	menu label Reboot Computer
	kernel reboot.c32


Команда ui menu.c32 вызывает обработчик меню, menu title устанавливает его заголовок, далее идут описания пунктов загрузочного меню.
С label <имя> начинается описание пункта меню, menu label задает текст, выводимый в качестве пункта загрузочного меню. Команда kernel дает команду загрузить ядро Linux или другое поддерживаемое ядро (в нашем случае memdisk) или команду c32, вместо команды kernel можно использовать команду linux, если загружать ядро Linux или C32, если загружать специальную команду SYSLINUX. Команда initrd позволяет подгрузить образ начального диска Linux [ССЫЛКА] или образ диска или CD, загружаемый memdisk‘ом. Команда append передает ядру или команде дополнительные параметры. Команда timeout устанавливает время, после которого будет автоматически выбран в случае бездействия пользователя соответствующий пункт меню. Число после timeout задает время. За 1 единицу принята 0,1 с (соответственно, указанная в меню 1000 — 100 секунд).

5. Выходим из каталога iso_root на уровень выше и cоздаем ISO-образ. ISO-образ создается программой mkisofs
mkisofs -o disk.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -R -V LABEL iso_root
где:
-o — задает имя образа диска (в примере disk.iso)
-b — имя загрузчика
— задает имя загрузочного каталога, файл создается автоматически, формально не нужен, но лучше оставить.
-no-emul-bootОпределяет, что используемый образ загрузки для создания загрузочного диска является образом без эмуляции. Система будет загружать и исполнять этот образ, не выполняя никаких операций по эмуляции диска. [1]
-boot-load-size количество_секторовОпределяет номер «виртуальных» (по 512 байт) секторов для загрузки в режиме без эмуляции. По умолчанию загружается весь файл загрузки целиком. Некоторые BIOS могут воспринимать их с ошибкой, если их количество не будет кратно 4. (ИМХО, лучше 4 и оставить)
-J — создает записи каталогов Joliet (см. мануал по ссылке в конце заметки, чтобы узнать, надо ли оно вам, но обычно рекомендуют указывать этот параметр).
-V метка — задает метку тома
После параметров указывается имя каталога с содержимым CD-диска (iso_root в примере).

Вот как выглядит меню диска, если с него загрузиться

Если надо создать несколько образов, процесс можно автоматизировать нехитрым скриптом. Метку тома можно указать в качестве первого параметра скрипта, иначе будет установлена метка bootable
На Pastebin
Скачать с Mega.nz

Готовый тестовый образ можно скачать отсюда

Используемые источники

1. Перевод man mkisofs
2. ISOLINUX
3. SYSLINUX MEMDISK

One Response to Как сделать загрузочный ISO-образ CD диска в Linux

  1. Pingback: Выдираем досовую часть из Hiren’s Boot CD | Персональный блог Толика Панкова

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *