Eu já passei por esse processo algumas vezes, e embora seja extremamente fácil, eu continuo esquecendo os passos exatos que usei, então estou documentando aqui para minha própria referência, assim como para outros. Para o registro, estou usando o Slackware Linux 14.2+ como o servidor PXE e inicializando vários modelos diferentes do Dell Optiplex para atualizações do BIOS. Como mencionado em outras respostas, você pode criar imagens ISO inicializáveis para sistemas de arquivos grandes. No entanto, como você perguntou especificamente sobre imagens de disquete inicializáveis, aqui estão as etapas que uso para isso.
Primeiro, algumas informações básicas sobre MEMDISK e FAT12 para colocar sua questão no contexto. Há muitas informações conflitantes e ambíguas por aí, então, espero, isso esclarece um pouco as coisas.
Um thread syslinux de 2003 indica que o MEMDISK suporta um tamanho máximo de imagem de 4 GB, dependendo no hardware (isto é, considerações específicas de hardware limitadas à memória, mas possivelmente adicionais). Um thread anterior de 2002 também indica uma limitação PXELINUX separada (espaço do kernel do Linux limitado a ~ 1GB, mas esta informação tem mais de 15 anos).
Na documentação do MEMDISK , há algumas geometrias de disquete específicas que o memdisk tente adivinhar:
Floppy images
If the disk image is less than 4,194,304 bytes (4096K, 4 MiB) it is assumed to be a floppy image and MEMDISK will try to guess its geometry based on the size of the file. MEMDISK recognizes all the standard floppy sizes as well as common extended formats:
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)
A small perl script is included in the MEMDISK directory which can determine the geometry that MEMDISK would select for other sizes; in general, MEMDISK will correctly detect most physical extended formats used, with 80 cylinders or slightly higher.
LABEL floppy_image
LINUX memdisk
INITRD floppy.img
If your image is larger than 4 MiB and it is a floppy image, you can force MEMDISK to treat it as a floppy image:
LABEL floppy_image
LINUX memdisk
INITRD floppy.img
APPEND floppy
Na prática, não tive sorte com o parâmetro APPEND floppy
; Eu recebo um erro MEMDISK: No ramdisk image specified!
quando eu o uso.
Tradicionalmente, as imagens de disquetes usam o formato FAT12 , que tem um limite de 16MB e 8k clusters. Parece haver extensões para FAT12 que permitem 32MB ou até 256MB (64k clusters) mas não tenho certeza dos detalhes.
Se segmentarmos o tamanho máximo de FAT12 ( 16,736,256 bytes ) para um inicializável imagem de disquete, podemos fazer o seguinte:
dd if=/dev/zero of=FAT12_16MB.img bs=1 count=16736256
No entanto, esse comando pode levar um minuto para ser concluído. Usando um tamanho de bloco maior, podemos realizar a mesma coisa em menos de um segundo:
dd if=/dev/zero of=FAT12_16MB.img bs=8192 count=2043
Agora que temos um 'disquete vazio', precisamos formatá-lo como FAT12 (se você estiver interessado nos parâmetros disponíveis para este comando, execute man mkfs.fat
para visualizar a página man):
mkfs.fat -D 0x00 -F 12 -n FREEDOSBIOS FAT12_16MB.img
Agora temos uma imagem formatada do FAT12 'disquete'. Podemos criar uma pasta e montá-la:
mkdir floppy
mount -t msdos -o loop FAT12_16MB.img floppy
E agora podemos começar a copiar arquivos para ele. Eu baixei o disco de inicialização FreeDOS OEM de fdos.org e copiou para a minha imagem maior:
wget http://www.fdos.org/bootdisks/autogen/FDOEM.288.imz
unzip FDOEM.288.imz
Crie um novo ponto de montagem para a imagem FreeDOS e monte-a:
mkdir freedos12
mount -t msdos -o loop FDOEM.288 freedos12
Copie o sistema operacional FreeDOS para seu disquete maior:
cp -r freedos12/* floppy
Em seguida, desmonte a partição FreeDOS e exclua o ponto de montagem se não for mais necessário:
umount freedos12
rmdir freedos12
Agora, temos uma imagem de disquete de 16 MB ( FAT12_16MB.img
) contendo o sistema operacional FreeDOS. No entanto, se você tentar inicializar isso via PXE, você receberá o seguinte erro:
Loading boot sector... booting...
This is not a bootable disk. Please insert a bootable floppy and press any key to try again...
Precisamos criar o setor de inicialização nessa imagem. Importante: Como estaremos escrevendo diretamente para o arquivo de imagem, certifique-se de que sua imagem de disquete não esteja montada antes da próxima etapa:
umount floppy
Copie o setor de inicialização da imagem do FreeDOS ( FDOEM.288
para a imagem maior 'FAT12_16MB.img':
dd if=FDOEM.288 of=FAT12_16MB.img bs=1 count=446 seek=62 skip=62 conv=notrunc
Agora você tem uma imagem de disquete FAT12 de 16 MB inicializável no PXE com o FreeDOS. Neste ponto, você pode montar novamente a imagem e copiar quaisquer arquivos adicionais necessários.
A configuração exata do PXE que estou usando para inicializar esta imagem é:
label bios
menu label FreeDOS
kernel memdisk
append initrd=FAT12_16MB.img
Existem alguns outros úteis recursos de passo a passo que eu consultei enquanto criava esta resposta.