Я проходил этот процесс несколько раз, и хотя он чрезвычайно прост, я постоянно забываю точные шаги, которые я использовал, поэтому я документирую это здесь для моей собственной справки, а также для других. Для справки: я использую 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
Существуют и другие полезные пошаговые ресурсы, с которыми я консультировался при создании этого ответа.