Я проходил этот процесс несколько раз, и хотя он чрезвычайно прост, я постоянно забываю точные шаги, которые я использовал, поэтому я документирую это здесь для моей собственной справки, а также для других. Для справки: я использую Slackware Linux 14.2+ в качестве PXE-сервера и загружаю несколько различных моделей Dell Optiplex для обновления BIOS. Как упоминалось в других ответах, вы можете создавать загрузочные ISO-образы для больших файловых систем. Однако, поскольку вы специально спросили о загрузочных образах дискет, вот шаги, которые я использую для этого.
Во-первых, некоторая справочная информация о MEMDISK и FAT12, чтобы поставить ваш вопрос в контекст. Существует много противоречивой и неоднозначной информации, так что, надеюсь, это немного прояснит ситуацию.
Поток syslinux 2003 года указывает, что MEMDISK поддерживает максимальный размер изображения 4 ГБ, в зависимости от аппаратного обеспечения (т. Е. Ограниченного объема памяти, но, возможно, дополнительных аппаратных соображений). Более ранняя ветка 2002 года также указывает на отдельное ограничение PXELINUX (пространство ядра Linux ограничено ~ 1 ГБ, но этой информации более 15 лет).
Из документации MEMDISK есть некоторые конкретные геометрии дискет, которые memdisk попытается угадать:
Дискеты изображения
Если образ диска меньше 4 194 304 байта (4096 КБ, 4 МБ), предполагается, что это образ дискеты, и MEMDISK попытается угадать его геометрию на основе размера файла. MEMDISK распознает все стандартные размеры дискет, а также распространенные расширенные форматы:
163,840 bytes (160K) c=40 h=1 s=8 5.25" SSSD
184,320 bytes (180K) c=40 h=1 s=9 5.25" SSSD
327,680 bytes (320K) c=40 h=2 s=8 5.25" DSDD
368,640 bytes (360K) c=40 h=2 s=9 5.25" DSDD
655,360 bytes (640K) c=80 h=2 s=8 3.5" DSDD
737,280 bytes (720K) c=80 h=2 s=9 3.5" DSDD
1,222,800 bytes (1200K) c=80 h=2 s=15 5.25" DSHD
1,474,560 bytes (1440K) c=80 h=2 s=18 3.5" DSHD
1,638,400 bytes (1600K) c=80 h=2 s=20 3.5" DSHD (extended)
1,720,320 bytes (1680K) c=80 h=2 s=21 3.5" DSHD (extended)
1,763,328 bytes (1722K) c=82 h=2 s=21 3.5" DSHD (extended)
1,784,832 bytes (1743K) c=83 h=2 s=21 3.5" DSHD (extended)
1,802,240 bytes (1760K) c=80 h=2 s=22 3.5" DSHD (extended)
1,884,160 bytes (1840K) c=80 h=2 s=23 3.5" DSHD (extended)
1,966,080 bytes (1920K) c=80 h=2 s=24 3.5" DSHD (extended)
2,949,120 bytes (2880K) c=80 h=2 s=36 3.5" DSED
3,194,880 bytes (3120K) c=80 h=2 s=39 3.5" DSED (extended)
3,276,800 bytes (3200K) c=80 h=2 s=40 3.5" DSED (extended)
3,604,480 bytes (3520K) c=80 h=2 s=44 3.5" DSED (extended)
3,932,160 bytes (3840K) c=80 h=2 s=48 3.5" DSED (extended)
Небольшой Perl-скрипт включен в каталог MEMDISK, который может определить геометрию, которую MEMDISK выберет для других размеров; в общем, MEMDISK будет правильно определять большинство используемых физических расширенных форматов, с 80 цилиндрами или немного выше.
LABEL floppy_image
LINUX memdisk
INITRD floppy.img
Если ваше изображение размером более 4 МБ и это изображение с дискеты, вы можете заставить MEMDISK рассматривать его как изображение с дискеты:
LABEL floppy_image
LINUX memdisk
INITRD floppy.img
APPEND floppy
На практике мне не повезло с параметром APPEND floppy
; Я получаю MEMDISK: No ramdisk image specified!
ошибка при использовании.
Традиционно образы дискет используют формат FAT12 с ограничением в 16 МБ и 8 КБ. Кажется, есть расширения для FAT12, которые позволяют 32 МБ или даже 256 МБ (кластеры 64 КБ), но я не уверен в специфике.
Если мы нацелены на максимальный размер FAT12 (16,736,256 байт) для загрузочного образа «дискеты», мы можем сделать следующее:
dd if=/dev/zero of=FAT12_16MB.img bs=1 count=16736256
Однако выполнение этой команды может занять минуту. Используя больший размер блока, мы можем сделать то же самое менее чем за секунду:
dd if=/dev/zero of=FAT12_16MB.img bs=8192 count=2043
Теперь, когда у нас есть «чистая дискета», нам нужно отформатировать ее как FAT12 (если вас интересуют доступные параметры для этой команды, запустите man mkfs.fat
для просмотра страницы руководства):
mkfs.fat -D 0x00 -F 12 -n FREEDOSBIOS FAT12_16MB.img
Теперь у нас есть отформатированный FAT12 образ «дискеты». Мы можем создать папку и смонтировать ее:
mkdir floppy
mount -t msdos -o loop FAT12_16MB.img floppy
И теперь мы можем начать копирование файлов на него. Я загрузил загрузочный диск FreeDOS OEM с fdos.org и скопировал его в мое увеличенное изображение:
wget http://www.fdos.org/bootdisks/autogen/FDOEM.288.imz
unzip FDOEM.288.imz
Создайте новую точку монтирования для образа FreeDOS и смонтируйте ее:
mkdir freedos12
mount -t msdos -o loop FDOEM.288 freedos12
Скопируйте операционную систему FreeDOS на свою большую дискету:
cp -r freedos12/* floppy
Затем размонтируйте раздел FreeDOS и удалите точку монтирования, если она больше не нужна:
umount freedos12
rmdir freedos12
Теперь у нас есть образ дискеты размером 16 МБ (FAT12_16MB.img
), содержащий операционную систему FreeDOS. Однако, если вы попытаетесь загрузить это через PXE, вы получите следующую ошибку:
Loading boot sector... booting...
This is not a bootable disk. Please insert a bootable floppy and press any key to try again...
Нам нужно создать загрузочный сектор на этом образе.
Важное замечание: Поскольку мы будем записывать данные непосредственно в файл образа, убедитесь, что образ вашей дискеты не смонтирован до следующего шага:
umount floppy
Скопируйте загрузочный сектор из образа FreeDOS (FDOEM.288
в увеличенное изображение `FAT12_16MB.img '):
dd if=FDOEM.288 of=FAT12_16MB.img bs=1 count=446 seek=62 skip=62 conv=notrunc
Теперь у вас есть PXE-загрузочный 16-мегабайтный диск FAT12 с FreeDOS. На этом этапе вы можете заново смонтировать образ и скопировать любые дополнительные файлы, которые вам нужны.
Точная конфигурация PXE, которую я использую для загрузки этого образа:
label bios
menu label FreeDOS
kernel memdisk
append initrd=FAT12_16MB.img
Существуют и другие полезные пошаговые ресурсы, с которыми я консультировался при создании этого ответа.