Создание загрузочного образа диска DOS в Slackware Linux

Продолжая тему загрузочных образов.
Расскажу, как сделать загрузочный образ диска DOS в который можно добавить свои программы, загружаемый по сети или с CD-диска. На примере тестового образа, который использовал в одной из предыдущих заметок.
Загрузчик, соответственно, оставлю такой же, какой использовал ранее — SYSLINUX. Вообще SYSLINUX, а точнее memdisk поддерживает кроме ISO загрузку образов дискет и жестких дисков, в т.ч. и сжатых gzip’ом.
С дискетами возникает небольшая проблема — файл образа должен быть строго определенного размера (хотя SYSLINUX поддерживает и нестандартные размеры дискет, но все равно они должны быть строго определенными), в образе дискеты, естественно, не может быть два логических раздела и т.д. Чтобы не заморачиваться с этими ограничениями, буду делать образ жесткого диска, его размер можно определить произвольно, главное, чтоб влез в память машины, на которой его потом будем загружать.

Подготовка системы

1. Устанавливаем простенькую виртуальную машину QEMU, для DOS ее вполне хватит.
2. Устанавливаем multipath tools, для того, чтобы получить доступ к файлам, расположенным в образе диска из Linux (ну если мы хотим добавить в образ какие-нибудь программы). У меня multipath tools были уже установлены, ибо нужны для работы с шифрованными контейнерами truecrypt/tcplay
Я установил необходимые программы с помощью менеджера sbopkg без всяких дополнительных опций при сборке.
3. Если будем работать на удаленной машине через SSH, то настраиваем X11-forwarding
4. Создаем отдельный каталог в котором разместим необходимые образы дисков
5. Скачиваем выдранный из Hiren’s boot CD образ с досовыми утилитами. Или делаем его сами, как я описывал ранее
6. Проверяем, все ли работает, запускаем с досом, выдранным из HBCD:

qemu-system-i386 -cdrom dos.iso -boot d
где:
qemu-system-i386 — программа QEMU для 32-разрядных систем. В 64-разрядной версии Linux необходимо использовать команду qemu-system-x86_64
-cdrom — указываем программе местонахождение ISO-образа диска (тут dos.iso, расположенный в текущем каталоге).
-boot d — указываем программе, что необходимо грузиться с виртуального CDROM’а (из указанного образа диска).

Должно получиться как-то так:


Во втором меню нужно выбрать пункт Next, далее File Managers и Volkov commander
Если Volkov Commander успешно загрузился, то закрываем QEMU и приступаем к созданию образа диска DOS

Создание образа

Первым делом создаем пустой файл (заполненный нолями) нужного размера, например 10 мегабайт. Делается это с помощью стандартной утилиты dd
dd if=/dev/zero of=diskc.img bs=10M count=1
Грузимся опять в QEMU с ISO-образа, но подключив созданный образ диска:
qemu-system-i386 -cdrom dos.iso -hda diskc.img -boot d
Выбираем в загрузочном меню HBCD Volkov Commander

Разметка образа диска, форматирование

Загрузившись, размечаем диск с помощью утилиты fdisk (она уже есть в вышеуказанном ISO-образе)
В командной строке вводим fdisk, на первом экране отвечаем Y, нажимаем ENTER и попадаем в главное меню утилиты разметки диска:




Пункты меню здесь выбираются нажатием соответствующей пункту клавиши и ENTER, например нажав клавишу 4 и ENTER можно просмотреть информацию о жестком диске:

В данный момент на виртуальном жестком диске разделов нет. Нажимаем ESC, возвращаемся в основное меню, выбираем пункт 1 Create DOS partition or Logical DOS Drive и попадаем в следующее меню:

Тут также выбираем первый пункт. Далее утилита осведомится, нужно ли использовать все пространство диска под единственный основной раздел и нужно ли этот раздел сделать активным. Вряд ли в небольшом образе имеет смысл делать несколько разделов, поэтому отвечаем утвердительно. Если по каким-то причинам это все-таки нужно, отсылаю вас к описанию утилиты fdisk

Раздел успешно создан:

Далее необходимо выйти из fdisk. Нажимаем ESC для возврата в основное меню, и еще раз ESC для выхода.
Утилита предупредит, что созданный раздел будет доступен в системе после перезагрузки:



В комплекте Hiren’s boot CD имеется утилита reboot, так что для перезагрузки достаточно ввести, соответственно, команду reboot в командной строке. Если вы используете какой-то другой образ DOS, то возможно потребуется просто закрыть QEMU и снова запустить его.

После перезагрузки раздел будет доступен системе, чтобы это проверить, необходимо нажать в Volkov Commander комбинацию клавиш ALT+F1 (или ALT+F2), диск C будет в списке дисков:

Однако, при попытке перейти на данный диск, появится сообщение, что он недоступен:

Это потому, что раздел C еще не отформатирован. Форматируем его командой

format C: /U

Примечание: На самом деле в комплекте Hiren’s Boot CD аж целых три утилиты fdisk. Собственно командой fdisk вызывается свободно распространяемый клон FDISK’а от Microsoft Free fdisk.
Команда fdisk2 вызывает FDISK от компании Caldera, а fdisk3 — оригинальный FDISK от Microsoft.
ВНЕЗАПНО! Для разметки только что созданного образа надо грузиться с CD, если загрузиться с какого-нибудь готового образа жесткого диска, то баранят fdisk-и (причем все три), не ставят флаг Активный разделу на 2 hdd.
И баранят, что странное, все по-разному
Free fdisk — вроде ставит соответствующий флаг, но толку от этого ноль, т.е. флаг на самом деле не устанавливается.
В Caldera fdisk вообще пропадает пункт «сделать активным»
FDISK от Win98 единственный честно признается — только один HDD может быть активным. Так что создавать раздел, форматировать и делать диск системным лучше с CD
Зато копировать файлы с готового образа на новый никто не запрещает. Загрузились с готового, присоединили новый в качестве второго и скопировали файлы.

После форматирования диск будет доступен для записи файлов:

Установка DOS, конфигурирование, копирование необходимых файлов.


Сначала необходимо перенести основные системные файлы на свежеотформатированный раздел, делается это утилитой sys. Вводим следующую команду

sys A: C:

где A: — диск, откуда переносим систему (в случае DOS из комплекта Hiren’s Boot CD — виртуальный дисковод A:)
C: — диск, куда переносим систему.

Утилита sys пропишет в нужные сектора диска загрузчик DOS, а также перенесет системные файлы io.sys, msdos.sys и командный процессор command.com Руками их переносить не следует, т.к. файл io.sys тоже должен находиться в определенных секторах диска. В более старых версиях DOS это касается и msdos.sys, но начиная с Windows 95 msdos.sys превратился в обычный INI-файл, нужный для задания некоторых параметров загрузки Windows.


Далее в корневом каталоге диска C создаем каталоги DOS и VC. В каталог DOS поместим некоторые утилиты, а в каталог VC — файлы, необходимые файловому менеджеру Volkov Commander. Директории можно создать как из Volkov Commander (клавиша F7), так и из командной строки командой mkdir имя_каталога или md имя_каталога

В каталог DOS копируем следующие файлы:
EMM386.EXE
FORMAT.COM
SMARTDRV.EXE
SHUTDOWN.COM
REBOOT.COM
EDIT.COM
MOUSE.COM
FDISK.EXE
FDISK.INI
FDISK2.EXE
FDISK3.EXE
SYS.COM

В каталог VC следующие:
VC.COM
VC.OVL
VC.INI
VCEDIT.EXT

Все эти файлы можно найти (если загрузиться в досовую часть Hiren’s boot CD) на диске R:, в каталоге R:\TOOLS и на диске A:

Также в корневой каталог диска C: необходимо скопировать файл HIMEM.SYS

Конфигурируем DOS.
Cоздаем в корневом каталоге диска C: конфигурационный файл CONFIG.SYS (нажимаем SHIFT+F4, вводим имя файла и он сразу откроется в редакторе). Вносим туда следующие строки:

DEVICE=HIMEM.SYS

Это означает, что при загрузке DOS будет загружен драйвер, позволяющий DOS пользоваться дополнительной памятью (без него системе будет доступно только 640 Кб)

Также создаем файл AUTOEXEC.BAT, в котором укажем пути, по которым DOS будет искать исполняемые файлы и впишем программы, загружаемые при старте системы. У меня, например, содержимое файла такое:

@echo off

echo --------------------------------------
echo Minimal DOS image
echo (L) Hex_laden by PunkArr[], 2016
echo http://tolik-punkoff.com
echo http://lj.rossia.org/users/hex_laden
echo --------------------------------------

echo Set PATH
PATH DOS;VC
echo Load EMM386 Driver...
emm386.exe
echo Load SMARTDRV
smartdrv
echo Starting File Manager
vc

echo "-------------------------------------"
echo "| -=^-^=- Have a nice day -=^-^=- |"
echo "-------------------------------------"

Пояснять тут особо нечего — устанавливаем пути, загружаем еще один драйвер памяти, драйвер, ускоряющий работу с жестким диском, и запускаем файловый менеджер.

Тестируем образ. Выходим из QEMU, и вновь загружаем QEMU уже с нашего образа жесткого диска:
qemu-system-i386 -hda diskc.img -boot c
где:
-hda — образ первого жесткого диска в виртуальной системе, в данном примере diskc.img (можно еще использовать второй и третий жесткие диски, hdb и hdc, соответственно, если использовать hdc, то одновременно нельзя использовать —cdrom).
-boot c — указание QEMU, что загружаться надо с жесткого диска (c).

Если все сделано верно, то DOS из образа загрузится:

Подключение образа диска для доступа из Linux

Образ диска фактически бесполезен, если на него нельзя записать какие-нибудь дополнительные программы, файлы. А чтоб записать, необходимо примонтировать образ, как отдельный диск в основной ОС.

1. Проверяем, какое петлевое устройство свободно
losetup -f
Команда выдаст первое свободное петлевое устройство:
/dev/loop0
В некоторых системах петлевые устройства могут быть заняты, например под образы Squashfs в Puppy Linux
2. Ассоциируем файл образа с петлевым устройством:
losetup /dev/loop0 diskc.img
где:
/dev/loop0 — свободное петлевое устройство
diskc.img — имя файла образа (если файл не в текущем каталоге, то надо указывать полный путь).
3. Создаем точку монтирования:
mkdir /mnt/dosdisk
4. С помощью утилиты kpartx из пакета multipath-tools делаем раздел(ы) в образе диска доступным системе:
kpartx -av /dev/loop0

В случае если все правильно, команда выдаст что-то типа этого:
add map loop0p1 (253:5): 0 20097 linear /dev/loop0 63
5. Монтируем раздел виртуального диска:
mount -t vfat /dev/mapper/loop0p1 /mnt/dosdisk

Виртуальный диск будет доступен по адресу /mnt/dosdisk

Можно скопировать необходимые файлы. Редактировать конфиги, правда, не рекомендую, из-за того, что Linux и DOS используют разные последовательности символов для обозначения конца строки, впрочем, современные редакторы с этим справляются, просто надо об этом не забывать.

Отредактировав и скопировав что нужно, отключаем образ:
1. Размонтируем:
umount /mnt/dosdisk
2. Отключаем разделы:
kpartx -dv /dev/loop0
3. Освобождаем петлевое устройство:
losetup -d /dev/loop0

Готовый образ можно сжать gzip’ом, включить в состав загрузочного ISO-образа или загружать по сети. Пример конфига для ISOLINUX описан здесь

Примеры

Как и что можно таким образом запускать:


Acronis Disk Director for DOS


Acronis True Image for DOS

Скачать

Готовый образ диска
Заметку в формате PDF

One Response to Создание загрузочного образа диска DOS в Slackware Linux

  1. Pingback: Запуск Acronis по сети (PXE). | Персональный блог Толика Панкова

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

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