Конечно, CD и DVD диски потихоньку выходят из обращения, но иногда еще нужны.
Сделать загрузочный образ диска в Linux очень просто.
1. В удобном месте создаем директорию iso_root
, в ней будут лежать все файлы, которые хотим поместить на загрузочный диск.
2. Копируем в директорию iso_root
нужные файлы.
3. Скачиваем загрузчик. Я воспользовался ISOLINUX из пакета загрузчиков SYSLINUX. Можно скачать нужную версию загрузчика вручную на https://www.kernel.org/pub/linux/utils/b#!/bin/bash
SYSLINUXNAME="syslinux-4.02"
SYSLINUXADDR="https://www.kernel.org/pu
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
- собственно, загрузчик ISOLINUXmenu.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
Это репост заметки из моего блога на сайте http://tolik-punkoff.com
Оригинал заметки находится здесь: http://tolik-punkoff.com/2016/11/17/kak-s