Ich habe diesen Prozess ein paar Mal durchgemacht, und obwohl er extrem einfach ist, vergesse ich immer wieder die genauen Schritte, die ich verwendet habe, und dokumentiere ihn hier für meine eigene Referenz sowie für andere. Für das Protokoll verwende ich Slackware Linux 14.2+ als PXE-Server und starte für mehrere BIOS-Updates von verschiedenen Dell Optiplex-Modellen. Wie in anderen Antworten erwähnt, können Sie startfähige ISO-Images für große Dateisysteme erstellen. Da Sie jedoch ausdrücklich nach startfähigen Disketten-Images gefragt haben, sind hier die Schritte, die ich dafür verwende.
Zunächst einige Hintergrundinformationen zu MEMDISK und FAT12, um Ihre Frage in einen Kontext zu stellen. Es gibt viele widersprüchliche und vieldeutige Informationen, und hoffentlich klärt das ein wenig.
Ein syslinux-Thread aus dem Jahr 2003 gibt an, dass MEMDISK eine maximale Bildgröße von 4 GB unterstützt, abhängig von der Hardware (dh speicherbeschränkt, aber möglicherweise zusätzliche hardwarespezifische Aspekte). Ein früherer Thread aus dem Jahr 2002 weist auch auf eine separate Einschränkung von PXELINUX hin (Linux-Kernel-Speicher ist auf ~ 1 GB beschränkt, diese Informationen sind jedoch über 15 Jahre alt).
In der MEMDISK-Dokumentation gibt es einige spezielle Floppy-Disk-Geometrien, die Memdisk zu erraten versucht:
Diskettenbilder
Wenn das Festplatten-Image weniger als 4.194.304 Byte (4096 KB, 4 MiB) enthält, wird davon ausgegangen, dass es sich um ein Disketten-Image handelt, und MEMDISK versucht, seine Geometrie anhand der Größe der Datei zu ermitteln. MEMDISK erkennt alle gängigen Diskettengrößen sowie gängige erweiterte Formate:
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)
Das MEMDISK-Verzeichnis enthält ein kleines Perl-Skript, das die Geometrie bestimmen kann, die MEMDISK für andere Größen auswählen würde. Im Allgemeinen erkennt MEMDISK die meisten verwendeten physischen Erweiterungsformate mit 80 Zylindern oder etwas höher.
LABEL floppy_image LINUX memdisk INITRD floppy.img
Wenn Ihr Bild größer als 4 MiB ist und es sich um ein Diskettenbild handelt, können Sie MEMDISK zwingen, es als Diskettenbild zu behandeln:
LABEL floppy_image LINUX memdisk INITRD floppy.img APPEND floppy
In der Praxis hatte ich mit dem APPEND floppy
Parameter kein Glück ; Ich erhalte eine MEMDISK: No ramdisk image specified!
Fehlermeldung, wenn ich es benutze.
Floppy-Images verwenden üblicherweise das FAT12-Format, das eine Beschränkung auf 16 MB und 8 KB-Cluster hat. Es scheint Erweiterungen für FAT12 zu geben, die 32 MB oder sogar 256 MB (64 KB Cluster) erlauben, aber ich bin mir nicht sicher, was genau ist.
Wenn wir die maximale FAT12-Größe ( 16.736.256 Bytes ) für ein startfähiges 'Disketten-Image festlegen, können wir Folgendes tun:
dd if=/dev/zero of=FAT12_16MB.img bs=1 count=16736256
Dieser Befehl kann jedoch eine Minute dauern. Mit einer höheren Blockgröße können wir dasselbe in weniger als einer Sekunde erreichen:
dd if=/dev/zero of=FAT12_16MB.img bs=8192 count=2043
Nun, da wir eine "leere Diskette" haben, müssen wir sie als FAT12 formatieren (wenn Sie an den verfügbaren Parametern für diesen Befehl interessiert sind, führen Sie sie aus man mkfs.fat
, um die Manpage anzuzeigen):
mkfs.fat -D 0x00 -F 12 -n FREEDOSBIOS FAT12_16MB.img
Jetzt haben wir ein formatiertes FAT12-Image "Diskette". Wir können einen Ordner erstellen und mounten:
mkdir floppy mount -t msdos -o loop FAT12_16MB.img floppy
Jetzt können wir Dateien kopieren. Ich habe die FreeDOS OEM- Bootdiskette von fdos.org heruntergeladen und in mein größeres Image kopiert:
wget http://www.fdos.org/bootdisks/autogen/FDOEM.288.imz unzip FDOEM.288.imz
Erstellen Sie einen neuen Einhängepunkt für das FreeDOS-Image und hängen Sie es an:
mkdir freedos12 mount -t msdos -o loop FDOEM.288 freedos12
Kopieren Sie das FreeDOS-Betriebssystem auf Ihre größere Diskette:
cp -r freedos12/* floppy
Hängen Sie dann die FreeDOS-Partition aus und löschen Sie den Einhängepunkt, wenn er nicht mehr benötigt wird:
umount freedos12 rmdir freedos12
Jetzt haben wir ein 16 MB-Disketten-Image ( FAT12_16MB.img
), das das FreeDOS-Betriebssystem enthält. Wenn Sie jedoch versuchen, dies über PXE zu starten, wird die folgende Fehlermeldung angezeigt:
Loading boot sector... booting... This is not a bootable disk. Please insert a bootable floppy and press any key to try again...
Wir müssen den Bootsektor für dieses Image erstellen. Wichtig: Da wir direkt in die Image-Datei schreiben, stellen Sie sicher, dass Ihr Disketten-Image vor dem nächsten Schritt nicht eingehängt ist:
umount floppy
Kopieren Sie den Bootsektor aus dem FreeDOS-Image ( FDOEM.288
in das größere Image "FAT12_16MB.img"):
dd if=FDOEM.288 of=FAT12_16MB.img bs=1 count=446 seek=62 skip=62 conv=notrunc
Jetzt haben Sie ein PXE-bootfähiges 16 MB FAT12-Disketten-Image mit FreeDOS. An diesem Punkt können Sie das Image erneut einhängen und alle zusätzlichen Dateien kopieren, die Sie benötigen.
Die genaue PXE-Konfiguration, die ich zum Starten dieses Image verwende, lautet:
label bios menu label FreeDOS kernel memdisk append initrd=FAT12_16MB.img
Es gibt einige hilfreiche Schritt-für-Schritt-Ressourcen, die ich beim Erstellen dieser Antwort konsultiert habe.