spinriteというDOSベースのHDDユーティリティがあります。 freedosオペレーティングシステムを使用して起動可能なフラッシュドライブを作成し、作成後に実行ユーティリティをドライブにコピーしたいと思います。
gpartedを使ってドライブを分割し、Fat32でフォーマットし、起動フラグを設定してみました。完了したら、OSをインストールして実行ファイルを追加する方法を見ることはできません。 Freedosのイメージファイルがあり、このファイルでフラッシュドライブを作成しようとすると起動しません。どんな助けでも大変感謝します。
答え1
公式のFreeDOSイメージ(この記事を書いている時点で)は、「ライブCD」として使用するのではなく、インストールメディアとして使用するためのものです。したがって、目的に適したブータブルメディアを作成するには、公式のFreeDOSインストーライメージの1つを変更するだけです。ただし、特にフロッピーイメージを使用する場合は、選択するメディアのサイズによって制限されることがあります。
この回答では、Linuxで最初から最小FreeDOSブートディスクイメージ(必要なサイズ)を作成し、MBR、VBR、ブートに必要な最小FreeDOSファイルセット、および単一プログラム(spinrite)を作成することに焦点を当てます。 )やBIOSアップデートツールなどのDOSユーティリティ
その後、PXEブートを使用してこのFreeDOSイメージを起動するか、次のコマンドを使用してUSBドライブに書き込むことができます。dd
FreeDOSブートドライブを作成します。もちろん、ここで使用されている手順を拡張して、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にインストールできるパッケージを使用する必要があります
msgfmt
。gettext
$ 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):
次のように入力します。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 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-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とは異なり、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.COM
はKERNEL.SYS
。残りのファイルはオプションです。 - 削除する前に、追加のファイルをディスクイメージにコピーすることもできます(例:spinrite.exe)。
- これらのコマンドはオプションですが、ルールに従ってファイルに
fatattr
隠し属性とシステム属性を追加します。 Debian/Ubuntu システムでは、次のコマンドを使用してプログラムをインストールできます。COMMAND.COM
KERNEL.SYS
fatattr
sudo apt-get install fatattr
- ディスクイメージを起動可能にするために実際に必要な唯一のファイル
ステップ7:完了しました!
ディスクイメージをマウント解除します。
$ sudo umount mnt/
答え2
FreeDOS イメージをカスタマイズする方法は次のとおりです。
Freedosサイトからダウンロードした起動可能なフロッピーイメージから始めます。残念ながら、BIOSアップデートプログラムなどのワンタイムユーティリティを実行する必要がない機能がいっぱいです。
次のコマンドを使用してコピーをインストールします。
mkdir -p ./floppy cp -a ./freedos-1440kb.img freedos-empty.img mount -o loop,rw freedos-empty.img ./floppy
cd ./floppy
そして不要な内容はすべて削除してください。最終的に、1.44MBのイメージには約1.2MBまたは1.3MBの空き容量が必要です。cd .. ; umount ./floppy
これにより、必要な数のカスタムイメージを作成するために使用できるほぼ空のブータブルイメージが提供されます。次にコピーを作成し、必要な内容をコピーします。例えば
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-grub
sshを介して実行しました。
また、これを私のフォルダにコピーし、そのディレクトリ内のすべてのファイルのメニュー項目を生成するため/var/lib/tfptboot/freedos/
に作成したスクリプトを実行しました。*.img
これにより、ブート時にgrubメニューからfreedosイメージをブートでき、ブート時に「ネットワークカードからブート」オプションを持つすべてのシステム(つまり、これらのほとんどすべてのシステム)でipxeとtftpを介してネットワーク経由でfreedosイメージをブートできます。できます。ipxe
grubから起動するという事実も含める場合)。
マザーボードのBIOSをアップデートしたり、LSI SASカードをITモードに戻したり、一部のSeagateドライブにファームウェアアップデートを適用したりするなど、起動可能なイメージを作成するために使用しました。
しかし、これが私が「超大型」/boot
パーティション(1GBまたは2GB以上)を作成するのが好きな理由です。したがって、「合理的な」サイズのすべての画像を起動できます。また、これを行うと/bootのスペースが不足することなく、常に古いカーネルイメージを消去する必要があります。ブートやミラーリングなどにgparted
便利です。clonezilla
追加: grub 設定
最初にこれを設定するのはtftp
かなり多くの作業なので、ここではプロセスについて詳しく説明しません(このサイトの他の回答ですでに説明していると確信しており、私のtftpスクリプトは私のフラッグハブアカウント - まだmemdisk / freedosスクリプトをアップロードしていませんが、やるべきことはほとんどありませんgrub
。
- インストールします
syslinux
(または少なくともmemdisk
バイナリのコピーを取得します)。 cp memdisk /boot
- mkdir -p /boot/イメージ
- 起動可能な
*.img
イメージ*.iso
ファイルを/boot/images
。 - スクリプト
42_memdisk
(下記参照)をコピーして/etc/grub.d/
実行可能にします。chmod +x /etc/grub.d/42_memdisk
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