Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Как самостоятельно сделать Bootable CD-ROM

div.main {margin-left: 20pt; margin-right: 20pt} Как самостоятельно сделать Bootable CD-ROM

Несмотря на то, что многие крупные фирмы создают свои варианты замены 3.5" дискет, обычный дисковод все же находит свое место в подавляющем числе ПК, несмотря на низкую скорость и маленький объем (только загрузочные файлы Windows 98 занимают 25% дискеты!). Сегодня, в эпоху сетей и Интернета, дискеты, как переносчик информации используются все реже. Одним из основных их применений остается загрузка ОС ПК в случае установки нового диска, тестирования и настройки специфичного оборудования, проверки на вирусы, восстановления информации с испорченного жесткого диска.

К сожалению даже для простейших из этих задач объема дискеты катастрофически не хватает (например, базы антивирусов уже давно перевалили отметку в 1.44Мб). Объем тестовых программ и дистрибутивов также не хочет уменьшаться. Конечно можно использовать накопители типа IOmega ZIP, LS-120, однако гораздо более распространенным устройством является CD-ROM. И к счастью уже года три существует стандарт, по которому с этого устройства можно загрузить ПК.

Варианты применения: загрузочный диск для диагностики, проверки на вирусы, установки системы "с нуля"; backup системного раздела для быстрого восстановления системы; диски с демо версиями ПО, презентациями, видео, слайд шоу. В последнем варианте ПК может даже не иметь жесткого диска!

Как оказалось, большинство информации по теме загрузочных CD в Internet не отличается полнотой и строгостью. Поэтому я решил сам разобраться в стандартах, и попробовать сделать какой-нибудь интересный диск. Тем более что с CD-RW это достаточно безопасно :) .

Quick Start

Что нам понадобится: устройство CD-R/RW. Очень желательно использовать на начальном этапе CD-RW, это позволит легко исправить возможные ошибки. Тем не менее, для окончательного создания предпочтительнее CDR, поскольку они читаются на большем числе приводов чистый диск для него программа Adaptec Easy CD Creator (можно и CDRWIN, WinOnCD, Nero, etc) загрузочная дискета Вашей ОС (желательно с драйвером для используемого устройства CD-ROM) ПК, который может загружаться с CD-ROM, для проверки :)

Итак, все будет работать так:

Для устройства ATAPI установить в BIOS порядок загрузки, начинающийся с CD-ROM. Если нужно загрузиться со SCSI CD-ROMа, то установить в SCSI BIOS опцию "Boot from CD-ROM" в "Enable" (а в BIOS SETUP обязательно на первом месте "A", например "A,C"). В момент загрузки ПК, один из упоминавшихся BIOSов выдаст на экран надпись, о том, что он обнаружил в устройстве загрузочный CD и он установлен как диск A: . После этого начнется процесс загрузки с этого устройства. Если при этом на машине установлен дисковод, то он станет скрываться за буквой B:, остальные диски своих имен не поменяют.

При записи на CD-ROM еще какие-то файлов кроме образа дискеты, доступ к ним возможен только после загрузки правильного драйвера и MSCDEX.EXE. Таким образом можно при загрузке с CD получить доступ ко всем 640Мб емкости диска.

Для того, чтобы добиться такого эффекта: открываем Adaptec Easy CD Creator (ECDC) создаем обычный диск с необходимыми файлами (оставляем как минимум 1.44Мб места для образа дискеты) параметры в CD Layout Properties - ISO9660, Mode 1: CDROM, ставим отметку "Bootable" после нажатия на Ok, программа попросит вставить в дисковод заранее подготовленную системную дискету, для того чтобы считать с нее образ после считывания видим, что в списке записываемых файлов появилось еще два - BOOTCAT.BIN и BOOTIMG.BIN. Первый это так называемый каталог загрузочных образов, а второй - побайтовая копия нашей дискеты, с помощью которой в момент загрузки будет эмулироваться дисковод A: последний штрих - запись на CD. В режиме TAO диск можно не закрывать

Некоторые замечания к плану. Пункт 3 - на самом деле можно создать загрузочный диск и с Joilet, просто ECDC не дает в этом случае поставить галочку у "Bootable". А вот выбор "Mode 1" скорее всего обязателен. Пункт 4 - перед использованием дискеты желательно удостовериться в ее работоспособности: попробуйте защитить ее от записи и загрузиться с нее. Очень важно помнить, что для доступа к обычным файлам на CD-ROM (не файлам с дискеты) необходимо запустить драйвер CDROM и MSCDEX. Естественно они должны быть на используемой дискете и в CONFIG.SYS/AUTOEXEC.BAT все должно быть прописано. Одним из хороших примеров такой дискеты может служить Startup Disk от Windows 98. На нем есть драйвера CD-ROM под множество контроллеров, что дает возможность использовать CD-ROM и на ATAPI устройствах и на многих SCSI. Можно немного подправить эту дискету под конкретные нужды. Я сделал так:

Список файлов:

AUTOEXEC.BAT DRVSPACE.BIN COMMAND.COM FORMAT.COM KEYB.COM MODE.COM SYS.COM VC.COM EGA3.CPI EMM386.EXE FDISK.EXE MSCDEX.EXE VC.INI ASPI2DOS.SYS ASPI4DOS.SYS ASPI8DOS.SYS ASPI8U2.SYS ASPICD.SYS BTCDROM.SYS BTDOSM.SYS CONFIG.SYS COUNTRY.SYS DISPLAY.SYS FLASHPT.SYS HIMEM.SYS IO.SYS KEYBRD3.SYS MSDOS.SYS OAKCDROM.SYS

CONFIG.SYS

files=10 buffers=10 dos=high,umb stacks=9,256 lastdrive=z device=himem.sys /testmem:off device=emm386.exe ram device=display.sys con=(ega,,1) country=007,866,country.sys device=oakcdrom.sys /D:MSCD001 device=btdosm.sys device=flashpt.sys device=btcdrom.sys /D:MSCD001 device=aspi2dos.sys device=aspi8dos.sys device=aspi4dos.sys device=aspi8u2.sys device=aspicd.sys /D:MSCD001 install=mscdex.exe /D:MSCD001 /L:R

AUTOEXEC.BAT

@echo off set temp=c: set tmp=c: mode.com con cp prepare=((866) ega3.cpi) mode.com con cp select=866 keyb.com ru,,keybrd3.sys path=a:;r:

Несмотря на простоту, даже в этом варианте есть подводные камни: он рассчитан на наличие в ПК только одного устройства CD-ROM (с которого и идет загрузка). Иначе возможно, что после загрузки с дискеты Вы не сможете получить доступ к остальному содержимому CD из-за конфликта драйверов.

Для проверки всех тонкостей, обязательно проверьте перед записью возможность загрузки ПК с подготовленной дискеты, правильность подключения драйвера CD-ROM. Вообще лучше оставить с CONFIG.SYS единственный драйвер (что конечно снижает универсальность) или сделать меню для выбора его при загрузке. В крайнем случае можно нажать F8 и включить пошаговый режим загрузки, потом выбрать только необходимый драйвер.

Обратите внимание, что рекомендуется не использовать явных указаний путей, например device=himem.sys вместо device=a:himem.sys.

Итак, если после этого ПК смог загрузиться со сделанного диска, первый этап пройден. Далее мы рассмотрим суть процесса загрузки с CD-ROM и опишем путь решения проблемы с доступом ко всему объему диска без драйверов.

Как это на самом деле работает

Благодаря стараниям фирм Phoenix и IBM на свет появился “El Torito” Bootable CD-ROM Format Specification, версия 1.0 которого датирована 25 января 1995г. Хотя спецификация допускает наличие множественных загрузочных образов (и выбор их из меню при загрузке) на одном диске, мы рассмотрим для простоты вариант с единственным образом.

Этот стандарт определяет возможность эмуляции CD-ROMом диска A: или C: во время загрузки ПК. При этом возможны такие варианты: CD-ROM эмулирует диск A: . Установленный на ПК дисковод A: становится B:, остальные диски своих имен не меняют. Доступ ко всему (до 640Мб) содержимому CD-ROM возможен через загрузку с эмулированного A: драйвера CD-ROM (который может отличаться на разных ПК!) и MSCDEX.EXE . CD-ROM эмулирует диск C: . При этом нумерация установленных на ПК дисков смещается. Такой вариант позволяет получить доступ к 640Мб информации независимо от устройства CD-ROM, т.к. загрузка его (возможно специфичного) драйвера необязательна. Без эмуляции. Это, означает, что при загрузке просто считывается программа по указанному адресу указанной длинны и ей передается управление. Что происходит дальше с ПК, это ее личное дело. Такой вид имеет например установочный диск Microsoft Windows NT.

CD-ROM представляет собой устройство с последовательной адресацией секторов с 0 до (обычно) 335249, которые имеют размер 2048 байт (в Mode 1). Интересная для нас часть логической структуры включает в себя:

Сектор  
0-15  
16 Primary Volume Descriptor
17 Boot Record Volume
...  
BC Booting Catalog
...  
BI_1-BI_m Bootable Disk Image
...  

При этом эмуляция включает в себя и трансляцию 4-х 512 байтных секторов в 2048 байтные на CD.

Для работы технологии загрузки используется возможность иметь на одном диске несколько описаний томов. Например при записи в формате Joilet используется просто два дескриптора - для ISO9660 и для Joilet, что повышает совместимость диска очень незначительной ценой объема. Сравните с длинными именами в Windows 95 - там в каждом элементе каталога располагается две записи - стандартная MS-DOS 8.3 и длинное имя Windows 95. На CD немного по другому, там есть два разных каталога, один ISO9660 с короткими именами, а второй Joilet - с длинными в unicode. А сами файлы занимают одно и тоже место. Просто на них есть ссылки из обоих каталогов. И если система (ее драйвер cdfs) умеет читать Joilet, то он это и делает, а если нет, то читает стандартный ISO9660.

Для исследования структуры CD-ROM используем его ISO образ - посекторную копию диска (об используемых для его получения программах см. в конце статьи).

Сектор 16 - PVD, нам менять не надо.

Обратите внимание, что смещение 0x8000 соответствует 16*2048.

Сектор 17 - Boot Volume Descriptor

Его структура подробно:

Смещение Тип Описание
Byte Boot Record индикатор,  0
1-5 Byte ISO-9660 ID, должен быть “CD001”
6 Byte Версия этого дескриптора, должно быть 1
7-26 Byte Boot System ID, должно быть “EL TORITO SPECIFICATION” далее 0
27-46 Byte не используется, должен быть 0
47-4A Dword Абсолютная ссылка на Boot Catalog.
4A-7FF Byte не используется, должен быть 0

Нужное нам здесь поле, это ссылка на Booting Catalog. Его необходимо изменить для соответствия ссылке на наш каталог.

В следующем секторе находится индикатор окончания таблицы дескрипторов. Я не знаю наверняка, нужен он или нет, но с ним точно все работает и диски, которые пишет ECDC его имеют.

Следующий интересный сектор, это собственно Booting Catalog.

Состоит он из двух записей по 32 байта. Первая это Validation Entry:

Смещение Тип Описание
0 Byte Header ID, должен быть 01
1 Byte ID платформы - 0 = 80x86, 1=Power PC, 2=Mac
2-3 Word должен быть 0
4-1B Character ID string
1C-1D Integer Контрольная сумма
1E Byte Key byte, должен быть 0x55
1F Byte Key byte, должен быть 0xAA

В принципе можно в любом случае (для 80x86) использовать приведенную на картинке. А вот если Вы захотите поменять ID string, то не забудьте исправить и контрольную сумму, так, чтобы сумма всех слов в этой 32 байтной записи была равна 0.

Следующая запись называется Initial/Default Entry:

Смещение Тип Описание
0 Byte Boot Indicator - 88 = Bootable, 00 = Not Bootable
1 Byte Boot media type
2-3 Word Load Segment
4 Byte System Type
5 Byte должен быть 0
6-7 Word Sector Count
8-0B Dword Load RBA
0C-1F Byte должен быть 0

В случае нескольких загрузочных образов после этой записи могут следовать другие, но такой вариант мы не будем рассматривать.

Boot Media Type

Этот байт определяет, какой носитель будет эмулироваться. Для этого используются биты 0-3 (остальные должны быть 0): 0 - без эмуляции, 1 - дискета 1.2Мб, 2 - дискета 1.44Мб, 3 - дискета 2.88Мб, 4 - жесткий диск.

Load Segment

В этом слове содержится адрес сегмента, в который будет загружен MBR/Boot Sector образа. Для IBM PC это 0x7C0. (Если в этом поле 0, то также используется традиционный 0x7C0).

System Type

Этот байт должен соответствовать байту типа системы в таблице разделов загрузочного образа. Например DOS-12 - 0x01, DOS-16 - 0x04, BIGDOS - 0x06 (>32Мб). Для дискеты ECDC устанавливает его в 0, скорее всего он прав.

Sector Count

Это поле задает число секторов (эмулированных - в расчете 512 байт на сектор), которые считаются  в вышеуказанный сегмент при загрузке. В нашем случае достаточно одного сектора.

Load RBA

Адрес первого сектора образа диска на CD.

Далее необходимо подготовить загрузочный образ.

Образ дискеты

Ну с этим ничего сложного нет. Любой программой (тем же diskedit например) считываем все сектора дискеты в файл. В нем последовательно находятся Boot Record, FAT1, FAT2, корневая директория, собственно файлы. Про формат дискеты (1.2, 1.44 ...) сказано и в Booting Catalog и в самом образе в Boot Record.

Образ жесткого диска

А вот с этим пришлось сильно повозиться. Сильно смущали упоминания ISO, ghost, diskedit, при подготовке этого образа. Конечно, скорее всего, если взять диск не более 640Мб, создать на нем один раздел, поставить систему и т.д., то наверное и можно было использовать diskedit для приготовления образа такого диска, но где взять сегодня такой маленький диск и куда его подключить?

Структура такого простого жесткого диска выглядит так: Первый сектор - MBR = загрузочный код + таблица разделов Первый сектор второй стороны - BootRecord первого раздела Затем идут как и в дискете две копии FAT, корневая директория, данные.

Таким образом, видно, что единственное отличие от дискеты это использование таблицы разделов. Однако за ним скрывается гораздо более глубокая проблема - как определить геометрию диска по данным на нем? Ведь без этого любая работа с диском становится проблематичной. Тем более, что у самого CD-ROMа используется обычная линейная адресация и в рассмотренных структурах загрузочного CD-ROM нигде нет места такой информации.

На самом деле это можно узнать по таблице разделов. Если предположить, что конец раздела обязательно приходится на последний сектор последней стороны некоторого цилиндра, то данные из MBR помогут нам узнать количество секторов в дорожке и сторон в цилиндре!

Из этой таблицы видно, что последним сектором каждого раздела является сектор номер 63, что с учетом нумерации секторов с 1 дает нам 63 сектора на дорожку. Аналогично для количества сторон получается цифра 255 (нумерация с 0!).

Кстати, тут же видно как решается проблема 8Гб предела - вместо начала/конца раздела используются поля относительного числа секторов и количества секторов в разделе, которые имеют размер двойного слова.

Напомню, что в режиме LBA адресация через CHS происходит так:
LBA 0 = Cylinder 0, Head 0, Sector 1
LBA X = ((Cylinder * Maximum Heads + Head) * Sector per Track ) + Sector -1

Как известно SCSI всегда работает в LBA режиме - с прямой адресацией секторов. Просто ему приходится эмулировать CHS для стандартного вида MBR и совместимости. Часто при этом в SCSI BIOS можно выбрать режим трансляции из CHS для дисков до 1Гб и больше 1Гб. (Кстати именно с различной трансляцией у разных контроллеров может быть связана неработа SCSI диска, отформатированного на одном контроллере при установке на другой).

Итак, было поведено несколько опытов (количество циллиндров в нашем случае не важно; диск на 270 действительно работает в LBA):

IDE (Award 4.51)

Объем Мб Heads Sectors Cylinders
270 32 63 262
540 32 63 524
1200 64 63 847
3500 128 63 621
13400 255 63 1650

SCSI (Tekram DC-390)

Объем Heads Sectors
<1G 64 32
>1G 255 63

Как Вы видите, все эти ухищрения направлены на недостижение количества цилиндров отметки 1024. Это связано с тем, что MBR, BIOS и многие другие, рассчитаны на хранение номера цилиндра в 10 битах. И граница 8Гб как раз и идет от 1024*255*63 секторов. Или можно посчитать эту границу по другому - только 3 байта на номер сектора в режиме LBA.

Формально, BIOS для загрузки должен сам обо всем догадаться, однако похоже это происходит не всегда. Многие испытатели отмечали, что есть некоторая закономерность в том, с какого диска - IDE или SCSI делать образ, и на каком CD-ROM он сможет загрузиться.

Тем не менее единственное требование, упомянутое в стандарте, это использование только одной и только первой записи в Partition Table. К счастью этого легко добиться.

Исходя из всего этого был придуман и опробован следующий способ получения образа жесткого диска: Создаем раздел необходимого размера на жестком диске. Форматируем (FAT12/16), делаем системным (можно сразу format /s, а можно и sys потом). Используем специально написанную программу (getimg.zip), которая по информации в BootRecord указанного диска воссоздает MBR и считывает всю информацию в один файл.

Не забудьте только приготовить необходимое место на другом диске или разделе.

Конечно у этого способа есть недостаток - для дальнейшего создания CD-ROM потребуется еще столько же места для ISO образа CD, однако будем надеяться, что сегодня найти 3*640Мб на диске достаточно легко, тем более при наличии в ПК CDR :).

Что касается геометрии жесткого диска, то вот результаты проведенных экспериментов по загрузке ПК с различных образов:

тест SCSI ATAPI
H 32 S 63, DOS-16 Yes (1) Yes (2)
H 255 S 63, Windows 98 Yes (1) Yes
H 64 S 32, Windows 98 (Zip drive) Yes (1) Yes

(1) в этом тесте после загрузки правильно виден только раздел D: жесткого диска (был C:). Скорее всего это связано с реализацией SCSI BIOS, т.к. он перехватывает Int 13 и не совсем прозрачно его использует.

(2) естественно раздел жесткого диска ПК с FAT32 не виден, т.к. система DOS 6.22

Таким образом никаких проблем с несовместимостью геометрии эмулируемого диска отмечено не было и можно сказать, что AWARD 4.51 BIOS и немного хуже Adaptec 7880 SCSI BIOS 1.32 справляются с идентификацией образа диска.

Загрузка с эмуляцией жесткого диска

Теперь опишем, как все это можно сделать для варианта с жестким диском.

Общий принцип такой: используем программу ECDC для подготовки ISO образа диска. Потом немного его правим diskeditом и записываем на CD.

Единственное, что я не совсем чисто решил, как добавить в структуру описаний томов, необходимый Boot Volume Descriptor. Проблема в том, что он должен располагаться в секторе 17. А в подготовленном образе там может быть что-то еще. Я сделал так (ценой Joilet, хотя она и так без GUI не работает): для образа указал в тип файловой системы Joilet, это привело к тому, что в секторе 17 оказался дескриптор тома Joilet, потом просто заменил его на Boot Volume Descriptor. А в 18 секторе - как и надо завершающий Volume Descriptor.

Booting Catalog и образ загрузочного диска могут располагаться в любом месте, поэтому мы их просто добавляем как файлы (желательно первыми, чтобы потом долго не искать). Для первого берем просто файл длинны 2048 с запоминающимся содержимым (например заполненный строчкой "BC**"). Второй и есть образ диска. Назовем его image.bin.

После создания образа (File -> Create CD image, записываем как .ISO), определяем, в какие сектора ECDC записал наш bootcat.bin и image.bin. Для этого открываем файл в diskedit и ищем по "BC**". Это будет bootcat.bin. Скорее всего он находится в секторе 0x1D, смещение в файле 0xE800, следом за ним (0xF000) видим MBR нашего образа жесткого диска. Еще один вариант поиска местоположения этих файлов, основанный на ISO каталоге, это поискать их имена в ISO образе и взять двойное слово на  31 байт раньше названия.

В 17 сектор (смещение 0x8800) записываем Boot Volume Descriptor, как указано выше, проверяем, что в байтах 0x47-0x4A правильная ссылка на Booting Catalog (у нас 0x0000001D):

0008800: 00 43 44 30 30 31 01 45 - 4C 20 54 4F 52 49 54 4F 0008810: 20 53 50 45 43 49 46 49 - 43 41 54 49 4F 4E 00 00 0008820: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 0008830: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 0008840: 00 00 00 00 00 00 00 1D - 00 00 00 00 00 00 00 00

Остальные нули. Такой файл можно скачать здесь - bootvd.bin. В адреса 47-4A для наглядности записано 0x12345678.

Теперь создаем Booting Catalog (сектор 0x1D):

000E800: 01 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 000E810: 00 00 00 00 00 00 00 00 - 00 00 00 00 AA 55 55 AA 000E820: 88 04 C0 07 04 00 01 00 - 1E 00 00 00 00 00 00 00 000E830: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00

Здесь указаны такие параметры: загрузочный образ (88), эмуляция жесткого диска (04), адрес 0x7C0, раздел DOS-16, загружать один сектор, начало образа диска - сектор 0x0000001E. Вот этот файл bootcat.bin.

Еще раз все проверив, записываем подправленный образ на CD: открываем ECDC, File -> Create CD from Disk image.

Вот собственно и все что удалось найти и проверить по этому вопросу.

Использовались:

Программы: Adaptec Easy CD Creator Symantec DISKEDIT Golden Hawk CDRWIN Gilles Vollant WinImage

Оборудование: MB Chaintech 6BTS (с AHA7880), AWARD BIOS 4.51 ASUS SD-S400 (ATAPI CD-ROM) Yamaha CRW6416S (SCSI CD-ROM/CD-RW)

Ссылки: Phoenix PC Industry Specifications http://www.ptltd.com/products/specs.html Andy McFadden CDR FAQ http://www.fadden.com/ Создание загрузочного CD с Авророй http://www.os2.ru/techn_sol/installos2/bootable_aurora.shtml

Кирилл Кочетков, (kochet@ixbt.com)
Опубликовано -- 2 декабря 1999 г.


  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте