Конечно, 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