Продолжая тему загрузочных образов.
Расскажу, как сделать загрузочный образ диска 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 из образа загрузится:
Образ диска фактически бесполезен, если на него нельзя записать какие-нибудь дополнительные программы, файлы. А чтоб записать, необходимо примонтировать образ, как отдельный диск в основной ОС.
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
Pingback: Запуск Acronis по сети (PXE). | Персональный блог Толика Панкова