起動可能なFreeDOSイメージを作成する手順は次のとおりです。

起動可能なFreeDOSイメージを作成する手順は次のとおりです。

spinriteというDOSベースのHDDユーティリティがあります。 freedosオペレーティングシステムを使用して起動可能なフラッシュドライブを作成し、作成後に実行ユーティリティをドライブにコピーしたいと思います。

gpartedを使ってドライブを分割し、Fat32でフォーマットし、起動フラグを設定してみました。完了したら、OSをインストールして実行ファイルを追加する方法を見ることはできません。 Freedosのイメージファイルがあり、このファイルでフラッシュドライブを作成しようとすると起動しません。どんな助けでも大変感謝します。

答え1

公式のFreeDOSイメージ(この記事を書いている時点で)は、「ライブCD」として使用するのではなく、インストールメディアとして使用するためのものです。したがって、目的に適したブータブルメディアを作成するには、公式のFreeDOSインストーライメージの1つを変更するだけです。ただし、特にフロッピーイメージを使用する場合は、選択するメディアのサイズによって制限されることがあります。

この回答では、Linuxで最初から最小FreeDOSブートディスクイメージ(必要なサイズ)を作成し、MBR、VBR、ブートに必要な最小FreeDOSファイルセット、および単一プログラム(spinrite)を作成することに焦点を当てます。 )やBIOSアップデートツールなどのDOSユーティリティ

その後、PXEブートを使用してこのFreeDOSイメージを起動するか、次のコマンドを使用してUSBドライブに書き込むことができます。ddFreeDOSブートドライブを作成します。もちろん、ここで使用されている手順を拡張して、FreeDOSフルバージョンに同梱されている完全なソフトウェアスイートを追加することを含む、必要なFreeDOSメディアを作成できます。

Windowsシステムでは、次のツールを使用できます。ルーパーズこれをするために。ただし、Linuxでは次のものを使用できます。ms-sys(Rufusが内部的に使用するソースコード)

起動可能なFreeDOSイメージを作成する手順は次のとおりです。


警告/免責事項! ! !以下で使用されているいくつかのコマンドは、誤って使用するとディスクドライブからデータを消去する可能性があります。続行する前に、各プログラムのマニュアルページを読み、コマンドの使い方を学びます。貴重なデータのないセカンダリ/仮想マシンでこれらのコマンドを試すこともできます。


ステップ1:前提条件(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にインストールできるパッケージを使用する必要がありますmsgfmtgettext

    $ sudo apt install gettext
    
  • コンパイルとインストール:

    $ make
    $ sudo make install
    

ステップ2:空のディスクイメージを作成し、msdosパーティションを作成します。

  • ディスクイメージ用の空のファイルを作成します。

    $ truncate -s 50M disk.img
    

    注:50MiBサイズのディスクイメージはここに作成されますが、必要なサイズに設定できます。

  • ディスクイメージを分割します。

    $ 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):次のように入力します。ec

ステップ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 xセクタサイズバイト= 2048 x 512バイト=1048576バイト。実際には、開始セクタを明示的に指定します。ステップ2ただし、パーティションがすでに作成されている場合に役立つ可能性があるため、この手順を含めました。この数は:2048年そして1048576次のコマンドで使用されます。

ステップ4:FATファイルシステムを使用したパーティションのフォーマット

  • 無料サイクリング機器検索:

    $ losetup -f
    /dev/loop0
    
  • パーティションのループデバイスを作成します(オフセット=に位置)。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セクタ内のパーティション1のオフセットです。ステップ3。このパラメーターは-R8オプションですが、推奨されます。

ステップ5:ms-sysMBR(マスターブートレコード)と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-sysRufusとは異なり、RufusはFAT32のバックアップブートレコードを作成しませんが、これはイメージが起動可能に妨げられてはいけません。
  • 次に、ループデバイスからディスクイメージファイルをマウント解除/分離します。

    $ sudo losetup -d /dev/loop0
    
  • 最後に、Windows 7 MBRをディスクイメージに書き込みます。

    $ 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リポジトリからダウンロードされましたが、公式のFreeDOSウェブサイトから抽出されました。readme.txt上記を参照https://github.com/pbatard/rufus/tree/master/res/freedos/公式のFreeDOSソースからバイナリを取得するRufusの詳細。

  • パーティションにファイルをコピーする:

    $ 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.COMKERNEL.SYS。残りのファイルはオプションです。
    • 削除する前に、追加のファイルをディスクイメージにコピーすることもできます(例:spinrite.exe)。
    • これらのコマンドはオプションですが、ルールに従ってファイルにfatattr隠し属性とシステム属性を追加します。 Debian/Ubuntu システムでは、次のコマンドを使用してプログラムをインストールできます。COMMAND.COMKERNEL.SYSfatattrsudo apt-get install fatattr

ステップ7:完了しました!

  • ディスクイメージをマウント解除します。

    $ sudo umount mnt/
    

答え2

FreeDOS イメージをカスタマイズする方法は次のとおりです。

  1. Freedosサイトからダウンロードした起動可能なフロッピーイメージから始めます。残念ながら、BIOSアップデートプログラムなどのワンタイムユーティリティを実行する必要がない機能がいっぱいです。

  2. 次のコマンドを使用してコピーをインストールします。

    mkdir -p ./floppy
    cp -a ./freedos-1440kb.img freedos-empty.img
    mount -o loop,rw freedos-empty.img ./floppy
    
  3. cd ./floppyそして不要な内容はすべて削除してください。最終的に、1.44MBのイメージには約1.2MBまたは1.3MBの空き容量が必要です。

  4. cd .. ; umount ./floppy

  5. これにより、必要な数のカスタムイメージを作成するために使用できるほぼ空のブータブルイメージが提供されます。次にコピーを作成し、必要な内容をコピーします。例えば

    cp -a ./freedos-empty.img ./freedos-spinrite.img
    mount -o loop,rw freedos-spinrite.img ./floppy
    cp spinrite.exe ./floppy
    umount ./floppy
    

その後、このイメージをフロッピードライブ、フラッシュドライブなどにコピーできます(たとえば、USBスティックのデバイスノードがある場所などcat freedos-spinrite.img > /dev/sdX)。sdX空で使用可能なフラッシュドライブが必要な場合は決して見つからないため、これはほとんど行われません。また、grubやtftpメニューを使用するよりも多くの作業が必要で、時間もかかります。さらに、USBスティックの起動は、ローカルハードドライブまたはTFTPサーバーに保存されているディスクイメージよりも遅くなります。

私の場合は、それを私の/boot/images/ディレクトリにコピーして実行しましたupdate-grub。その後、scp必要な可能性がある他のコンピュータにコピーし、update-grubsshを介して実行しました。

また、これを私のフォルダにコピーし、そのディレクトリ内のすべてのファイルのメニュー項目を生成するため/var/lib/tfptboot/freedos/に作成したスクリプトを実行しました。*.img

これにより、ブート時にgrubメニューからfreedosイメージをブートでき、ブート時に「ネットワークカードからブート」オプションを持つすべてのシステム(つまり、これらのほとんどすべてのシステム)でipxeとtftpを介してネットワーク経由でfreedosイメージをブートできます。できます。ipxegrubから起動するという事実も含める場合)。

マザーボードのBIOSをアップデートしたり、LSI SASカードをITモードに戻したり、一部のSeagateドライブにファームウェアアップデートを適用したりするなど、起動可能なイメージを作成するために使用しました。

しかし、これが私が「超大型」/bootパーティション(1GBまたは2GB以上)を作成するのが好きな理由です。したがって、「合理的な」サイズのすべての画像を起動できます。また、これを行うと/bootのスペースが不足することなく、常に古いカーネルイメージを消去する必要があります。ブートやミラーリングなどにgparted便利です。clonezilla


追加: grub 設定

最初にこれを設定するのはtftpかなり多くの作業なので、ここではプロセスについて詳しく説明しません(このサイトの他の回答ですでに説明していると確信しており、私のtftpスクリプトは私のフラッグハブアカウント - まだmemdisk / freedosスクリプトをアップロードしていませんが、やるべきことはほとんどありませんgrub

  1. インストールしますsyslinux(または少なくともmemdiskバイナリのコピーを取得します)。
  2. cp memdisk /boot
  3. mkdir -p /boot/イメージ
  4. 起動可能な*.imgイメージ*.isoファイルを/boot/images
  5. スクリプト42_memdisk(下記参照)をコピーして/etc/grub.d/実行可能にします。chmod +x /etc/grub.d/42_memdisk
  6. update-grubルートとして実行

注:上記はDebian、Ubuntu、Mintなどの最も関連/派生ディストリビューションに適用されます。他のディストリビューションは設定が若干異なるgrubため、それに応じてプロセスを調整する必要があります。

memdiskフロッピーディスクイメージ、CD-ROM / DVDイメージ、ハードディスクイメージなど、すべての起動可能なディスクイメージから起動できます。

42_メモリディスク(これはgrubのメニュー項目を生成するスクリプトです):

#!/bin/sh
set -e

IMAGES=/boot/images
. /usr/lib/grub/grub-mkconfig_lib
if test -e /boot/memdisk ; then
  echo "Found memdisk: $MEMDISKPATH" >&2
  MEMDISKPATH="$( make_system_path_relative_to_its_root "/boot/memdisk" )"

  find "$IMAGES" -name '*.img' -o -name '*.iso' | sort | 
  while read image ; do
      IMAGEPATH="$( make_system_path_relative_to_its_root "$image" )"
      echo "Found image: $IMAGEPATH" >&2
      cat << EOF
menuentry "Bootable image: $(basename $IMAGEPATH | sed -E -e 's/\.(img|iso)$//i')" {
EOF
      prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e 's/^/\t/'
      cat << EOF
        linux16 $MEMDISKPATH bigraw
        initrd16 $IMAGEPATH
}
EOF
  done
fi

IIRC、これは数年前にこのようなことをする方法を検索しながら見つけたスクリプトを修正しました(どこにも覚えていません)。

出力例:

# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.14.0-2-amd64
Found initrd image: /boot/initrd.img-4.14.0-2-amd64
Found linux image: /boot/vmlinuz-4.14.0-1-amd64
Found initrd image: /boot/initrd.img-4.14.0-1-amd64
Found linux image: /boot/vmlinuz-4.12.0-2-amd64
Found initrd image: /boot/initrd.img-4.12.0-2-amd64
Found iPXE image: /boot/ipxe.lkrn
Found memtest86 image: /memtest86.bin
Found memtest86+ image: /memtest86+.bin
Found memdisk:
Found image: /images/LSI.img
Found image: /images/Seagate-PH-CC49.img
Found image: /images/fd-asus-m5a97.img
Found image: /images/freedos-empty.img
done

関連情報