質問: pxeブート可能な10mb以上のdosイメージの作成 システム、ハードドライブ、または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メディアを作成できます。linuxで起動可能なfreedosイメージを作成する手順は次のとおりです。警告/免責事項!!!以下で使用される一部のコマンドは、誤って使用すると、ディスクドライブからデータを消去する可能性があります。続行する前に、各プログラムのマニュアルページを読んで、コマンドの使用法を理解してください。貴重なデータがないセカンダリ/仮想マシンでこれらのコマンドを試してみることをお勧めします。ステップ1:prerequites(ms-sys)をインストールします。 パッケージマネージャーで利用できない場合は、ソースから_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 _ 手順2:空のディスクイメージを作成し、msdosパーティションを作成します。 ディスクイメージ用の空のファイルを作成します。 _$ 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と入力します。 ステップ3:最初のパーティションの開始セクターの場所を確認します。 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は、次のコマンドで使用されます。 ステップ4:fatファイルシステムでパーティションをフォーマットする フリーループデバイスを検索します。 _$ 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_はオプションですが、推奨されます。 手順5:_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_引数が必要です。 手順6:基本的なfreedosファイルと必要なその他のプログラムをディスクイメージのパーティションに書き込みます。 パーティションのマウント: _$ 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プログラムをインストールできます。 ステップ7:完了です! ディスクイメージをアンマウントします。 _$ sudo umount mnt/ _