システム、ハードドライブ、またはBIOSに必要なすべてのファームウェアアップデートを含む、「大規模な」DOSフロッピーディスクイメージ(たとえば10MB以上)を作成したいと思います。
すべてがPXEで起動されたイメージ上にあるため、DOSイメージがネットワーク対応である必要はありませんが、ネットワークは素晴らしいでしょう。 Zipディスクはフロッピーディスクコントローラーに接続されており、100MBを超えていたため、これは可能であるはずです。
私はずっと前にこれをやろうとしましたが、起動に失敗するだけであまりにも多くの時間を費やしました。ですから、そのような悪夢のような獣を作成して編集する方法について誰かが信頼できる指示を持っているなら、私に知らせてください。 PXEに使用してUSBスティックにコピーできる画像があれば尚可です。
残念なメーカーは、LAN経由で簡単に起動してネットワークを構築できるすべてのファームウェアアップデートを含む単一の起動可能なLinuxISOを提供していません。 HPサーバーはこれを行い、それは素晴らしいです。
目的に合わせてFreeDOSブート可能イメージ(必要なサイズ)を作成してから、ソフトウェアまたはBIOS更新ツールなどのDOSユーティリティを追加できます。
あなたの質問から、あなたはLinuxにアクセスでき、ターミナル/コマンドラインの使用に精通しているようです。したがって、この回答では、Linuxでのブート可能イメージの作成に焦点を当てます。 Windowsマシンでは、 Rufus のようなツールを使用してこれを行うことができます。
次に、PXEブートを使用してこのFreeDOSイメージをブートするか、 dd
を使用してUSBドライブに書き込み、FreeDOSブートドライブを作成できます。もちろん、ここで使用する手順を拡張して、FreeDOSフルエディションに付属するソフトウェアの完全なスイートを追加するなど、必要なFreeDOSメディアを作成できます。
警告/免責事項!!!以下で使用される一部のコマンドは、誤って使用すると、ディスクドライブからデータを消去する可能性があります。続行する前に、各プログラムのマニュアルページを読んで、コマンドの使用法を理解してください。貴重なデータがないセカンダリ/仮想マシンでこれらのコマンドを試してみることをお勧めします。
パッケージマネージャーで利用できない場合は、ソースから_ms-sys
_をインストールします。
_$ wget https://sourceforge.net/projects/ms-sys/files/ms-sys%20stable/2.6.0/ms-sys-2.6.0.tar.gz
$ tar -xzvf ms-sys-2.6.0.tar.gz
$ cd ms-sys-2.6.0
_
Ms-sysをコンパイルするには、以下を使用してDebian/Ubuntuにインストールできるmsgfmt
パッケージからgettext
が必要です。
_$ Sudo apt install gettext
_
コンパイルとインストール:
_$ make
$ Sudo make install
_
ディスクイメージ用の空のファイルを作成します。
_$ truncate -s 50M disk.img
_
注:ここでは50 MiBサイズのディスクイメージが作成されますが、これは必要なサイズにすることができます
ディスクイメージをパーティション分割します。
_$ fdisk disk.img
Command (m for help): o
Created a new DOS disklabel with disk identifier 0x1234abcd.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): <ENTER>
First sector (2048-102399, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-102399, default 102399): <ENTER>
Command (m for help): t
Selected partition 1
Partition type (type L to list all types): c
Command (m for help): a
Selected partition 1
The bootable flag on partition 1 is enabled now.
Command (m for help): w
_
注:上記の
fdisk
コマンドは、FAT32ファイルシステムが必要であることを前提としています。 FAT16ファイルシステムを使用する場合は、上記の質問でPartition type (type L to list all types):
をe
の代わりにc
と入力します。
Fdiskを使用して、開始セクターを決定します。
_$ fdisk -l disk.img
Disk disk.img: 50 MiB, 52428800 bytes, 102400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1234abcd
Device Boot Start End Sectors Size Id Type
disk.img1 * 2048 102399 100352 49M c W95 FAT32 (LBA)
_
注:上記の
fdisk
出力から、開始セクターオフセットは2048セクターまたは2048 xsector_sizeバイト= 2048 x 512バイト=1048576バイト。実際には、ステップ2で開始セクターを明示的に指定しましたが、パーティションが既に作成されている場合に役立つ可能性があるため、このステップを含めました。これらの番号:2048および1048576は、次のコマンドで使用されます。
フリーループデバイスを検索します。
_$ losetup -f
/dev/loop0
_
パーティションのループデバイスを作成します(ディスクイメージのoffset =1048576にあります):
_$ Sudo losetup -o1048576 /dev/loop0 disk.img
_
FATファイルシステムの作成:
FAT16ファイルシステムを作成するには:
_$ Sudo mkfs.vfat -F16 -R8 -h2048 /dev/loop0
_
FAT32ファイルシステムを作成するには:
_$ Sudo mkfs.vfat -F32 -h2048 /dev/loop0
_
注: _
mkfs.vfat
_ パラメーターでは_-h2048
_が必要です。 _mkfs.vfat
_は、このパラメーターを指定しない限り、パーティションの前の非表示セクターをブートレコードに書き込みません。これは、イメージのブートに必要です)。ここでも、_2048
_は、ステップ3で決定されたセクター単位のパーティション1オフセットです。パラメータ_-R8
_はオプションですが、推奨されます。
ms-sys
_を使用して、マスターブートレコード(MBR)とボリュームブートレコード(VBR)に書き込みます。最初に、パーティションがループデバイスとしてロードされている間にVBRを書き込みます。
FAT16ファイルシステムを作成するには:
_$ Sudo ms-sys --fat16free /dev/loop0
_
FAT32ファイルシステムを作成するには:
_$ Sudo ms-sys --fat32free /dev/loop0
_
ノート:
- このコマンドは使用しないでください。_
ms-sys --partition /dev/loop0
_は、一部の_ms-sys
_ドキュメントで必要とされる場合があると説明されている場合でも、使用しないでください。 _mkfs.vfat
_によってすでに正しく書き込まれている非表示セクターフィールドを上書きします- _
ms-sys
_は最初のブートレコードにのみ書き込みます。 _ms-sys
_ Rufusとは異なり、FAT32のバックアップブートレコードには書き込みませんが、これによってイメージのブート可能性が妨げられることはありません。
次に、ディスクイメージファイルをループデバイスからアンロード/デタッチします。
_$ Sudo losetup -d /dev/loop0
_
そして最後に、Windows 7MBRをディスクイメージに書き込みます。
_$ ms-sys --mbr7 --force disk.img
_
注:通常の(デバイス以外の)ファイルに書き込む場合、_
ms-sys
_には_--force
_引数が必要です。
パーティションのマウント:
_$ mkdir mnt
$ Sudo mount -o loop,offset=1048576 disk.img mnt/
_
必要なFreeDOSファイルをダウンロードして抽出します。
_$ wget https://github.com/pbatard/rufus/archive/v3.6.tar.gz
$ tar -xvf v3.6.tar.gz rufus-3.6/res/freedos/
_
注:これらのファイルはRufus githubリポジトリからダウンロードされますが、公式のFreeDOSWebサイトから抽出されます。 Rufusが公式のFreeDOSソースからバイナリを取得したかどうかの詳細については、 https://github.com/pbatard/rufus/tree/master/res/freedos/ の_
readme.txt
_を参照してください。
ファイルをパーティションにコピーします。
_$ Sudo mkdir mnt/LOCALE
$ Sudo cp rufus-3.6/res/freedos/!(COMMAND.COM|KERNEL.SYS) mnt/LOCALE/
$ Sudo cp rufus-3.6/res/freedos/{COMMAND.COM,KERNEL.SYS} mnt/
$ printf '@echo off\r\nset PATH=.;\\;\\LOCALE\r\necho Using US-English keyboard with US-English codepage [437]\r\n' | Sudo tee mnt/AUTOEXEC.BAT
$ Sudo fatattr +h +s mnt/COMMAND.COM
$ Sudo fatattr +h +s mnt/KERNEL.SYS
_
ノート:
- ディスクイメージを起動可能にするために本当に必要なファイルは、_
COMMAND.COM
_と_KERNEL.SYS
_だけです。残りのファイルはオプションです- マウントを解除する前に、他のファイルをディスクイメージにコピーすることもできるようになりました(例:BIOSファームウェアの更新)。
fatattr
コマンドはオプションですが、通常どおり、ファイル_COMMAND.COM
_および_KERNEL.SYS
_に非表示のシステム属性を追加します。 Debian/Ubuntuシステムでは、_Sudo apt-get install fatattr
_を使用してfatattr
プログラムをインストールできます。
ディスクイメージをアンマウントします。
_$ Sudo umount mnt/
_
私はこのプロセスを数回経験しました。非常に簡単ですが、使用した正確な手順を忘れ続けているので、私自身や他の人の参考のためにここに文書化します。ちなみに、私はPXEサーバーとしてSlackware Linux 14.2+を使用しており、BIOSアップデートのためにいくつかの異なるDellOptiplexモデルを起動しています。他の回答で述べたように、大規模なファイルシステム用に起動可能なISOイメージを作成できます。ただし、起動可能なフロッピーイメージについて具体的に質問されたので、そのために使用する手順を次に示します。
まず、質問をコンテキストに入れるためのMEMDISKとFAT12に関するいくつかの背景情報。そこには矛盾した曖昧な情報がたくさんあるので、うまくいけば、これで少し問題が解決します。
2003年のsyslinuxスレッド は、MEMDISKがハードウェアに応じて4GBの最大イメージサイズをサポートすることを示します(つまり、メモリが制限されていますが、ハードウェア固有の追加の考慮事項がある場合があります)。 2002年の以前のスレッド は、個別のPXELINUX制限も示しています(Linuxカーネルスペースは約1GBに制限されていますが、この情報は15年以上前のものです)。
MEMDISKドキュメント から、memdiskが推測しようとする特定のフロッピーディスクジオメトリがいくつかあります。
フロッピー画像
ディスクイメージが4,194,304バイト(4096K、4 MiB)未満の場合、フロッピーイメージであると見なされ、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)
MEMDISKが他のサイズに対して選択するジオメトリを決定できる小さなPerlスクリプトがMEMDISKディレクトリに含まれています。一般に、MEMDISKは、80シリンダー以上の、使用されているほとんどの物理的な拡張フォーマットを正しく検出します。
LABEL floppy_image
LINUX memdisk
INITRD floppy.img
画像が4MiBより大きく、フロッピー画像の場合は、MEMDISKにフロッピー画像として処理させることができます。
LABEL floppy_image
LINUX memdisk
INITRD floppy.img
APPEND floppy
実際には、APPEND floppy
パラメーターを使用することはできませんでした。使用するとMEMDISK: No ramdisk image specified!
エラーが発生します。
従来、フロッピーイメージは FAT12形式 を使用します。これには16MBと8kクラスターの制限があります。 FAT12への拡張 があり、32MBまたは256MB(64kクラスター)を許可しているようですが、詳細は不明です。
起動可能な「フロッピー」イメージの最大FAT12サイズ( 16,736,256バイト )をターゲットにすると、次のことができます。
dd if=/dev/zero of=FAT12_16MB.img bs=1 count=16736256
ただし、そのコマンドが完了するまでに1分かかる場合があります。より大きなブロックサイズを使用すると、同じことを1秒未満で達成できます。
dd if=/dev/zero of=FAT12_16MB.img bs=8192 count=2043
'空のフロッピーディスク'ができたので、FAT12としてフォーマットする必要があります(このコマンドで使用可能なパラメーターに関心がある場合は、man mkfs.fat
を実行してmanページを表示します)。
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 Boot Disk from 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
これで、FreeDOSオペレーティングシステムを含む16MBのフロッピーイメージ(FAT12_16MB.img
)ができました。ただし、これを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
これで、FreeDOSを使用したPXEブート可能な16MBFAT12フロッピーイメージができました。この時点で、イメージを再マウントして、必要な追加ファイルをコピーできます。
このイメージの起動に使用している正確なPXE構成は次のとおりです。
label bios
menu label FreeDOS
kernel memdisk
append initrd=FAT12_16MB.img
この回答を作成する際に私が相談したいくつかの その他の役立つステップバイステップのリソース があります。
これは簡単に行うことはできませんが、不可能ではありません。
すべてのファームウェアアップグレードを含む起動可能なFreeDOSISOを作成できます。次に、PXELINUXとmemdiskを使用してそのISOをPXE起動します。
LABEL BIOS UPG
MENU LABEL Bios Upg
KERNEL memdisk
APPEND iso initrd=FreDosBiosUpg.iso
memdiskカーネルは、より大きなイメージをロードできません。
大きな画像をロードするには、vmlinuzカーネルを試す必要があります。オンラインのLinuxミラーで見つけることができます。centosの1つを使用して、いくつかの大きな画像をロードしました。