ISOファイルをパーティションにコピーしました(つまり、dd if = isofile of =/dev/sdb1)。 GRUB経由でそのパーティションを起動するにはどうすればよいですか?
チェーンローダー(hd1,0)+1だけで試してみると、実行可能形式が不明と表示されます。
ISOファイルからの起動に関する質問 に関する私の回答を参照してください。それを出発点として、古いハードドライブでいくつかのテストを実行しました。以前に Grub2を構成 から マルチISOを起動 フラッシュドライブを使用したことがあるので、次のようにしました。
古いハードドライブにいくつかのパーティションを作成します。これはUSB-IDEアダプターを使用して行われたため、ドライブは/ dev/sdbとして表示されます。
最初のパーティションを/ mntにマウントし、システムからドライブにGrubのコピーをインストールしました。
Sudo grub-install --no-floppy --root-directory=/mnt /dev/sdb
ISOを2番目のパーティションに「焼き付け」ました。
Sudo dd if=avg.iso /dev/sdb2
これはAVGウイルススキャナーISOです。マルチISOフラッシュドライブでは、これを使用してISOを直接起動します。
menuentry "AVG Rescue CD" {
loopback loop /iso/avg.iso
linux (loop)/isolinux/vmlinuz max_loop=255 vga=791 init=linuxrc iso-scan/filename=/iso/avg.iso
initrd (loop)/isolinux/initrd.lzm
}
ハードドライブのパーティションからこれを機能させるには、loopbackコマンドをnixし、ルートデバイスなどを設定する必要があります。 Grub2にルートデバイスを自動的に検出させる試みはすべて失敗したので、パーティションに直接向けました。これは機能しますが、Grubのデバイス列挙に注意してください。起動しようとしているドライブが(hd0)ではない可能性があります。 ISOパーティションの有効なエントリは次のとおりです。
menuentry "AVG Rescue CD" {
linux (hd0,2)/isolinux/vmlinuz max_loop=255 vga=791 init=linuxrc
initrd (hd0,2)/isolinux/initrd.lzm
}
これにより、起動可能なISOオンパーティションが作成されます。
これは、Grub2がISO9660ファイルシステムを読み取ることができるため、この特定のISOがパーティション上のISOに対応できるOSをロードしているため、およびカーネルがロードする実質的にすべてがinitrd。
Grub4DOSまたはGrub1を使用している場合は、チェーンローダーで同様のトリックを引き出すことができる場合があります。これがWin7ISOを直接起動するように機能すると仮定します( ソース ):
title Windows 7
map (hd0,0)/win7.iso (hd32)
map --hook
chainloader (hd32)
この変更で運が良かったかもしれません(ISOを2番目のプライマリパーティション(hd0,1)に「焼き付けた」と仮定します。それ以外の場合は、適切なパーティションに置き換えます)。
title Windows 7
map (hd0,1) (hd32)
map --hook
chainloader (hd32)
あなたはこれで逃げることもできます:
title Windows 7
chainloader (hd0,1)
ただし、ISOは実際にはドライブから起動するように構成されていないため、他の問題が発生する可能性があります。
Grub4DOS (最後の公式ビルド)を使用してそれを行うことができた方法は次のとおりです。
Grub4DOSは boot iso images ができるので、パーティションに対してそれを実行できるはずです。
isoパーティションを新しいドライブにマップし、次のコマンドで起動します。
title Boot ISO Partition
map (hd0,7) (0xff)
map --hook
chainloader (0xff)
しかし、これは機能せず、ディスク全体がマップされています。
幸い、map
は最初の引数として「ファイルまたはブロックリスト」を取ることができます。
パーティションに必要なブロック数を確認します。
$ Sudo fdisk -l /dev/sda
...
Device Boot Start End Blocks Id System
/dev/sda8 5948 6087 1124518+ b W95 FAT32
1.1Gbパーティションを作成したので、ここで1124518 * 2 = 2249036
を使用する必要があります。
(技術的には2249037ですが、問題ではありません)
次に、ブロックリストをgrubに渡します。
title Boot ISO Partition
map --heads=0 --sectors-per-track=0 (hd0,7)0+2249036 (0xff)
map --hook
chainloader (0xff)
そしてそれは動作します!
ノート:
(hd32)
の代わりに(0xff)
を使用することもできます。Grub2からGrub4DOSをチェーンロードするには:
menuentry "Boot ISO Partition" {
root (hd0,1)
set opts='map --heads=0 --sectors-per-track=0 (hd0,7)0+2249036 (0xff);
map --hook;
chainloader (0xff) '
linux16 /boot/grub4dos/grub.exe --config-file=$opts
}
これを/boot/grub/grub.cfg
(またはおそらくより良い/etc/grub.d/40_custom
)に追加します。
(最初のパーティションのgrub.exe
に/boot/grub4dos
があると仮定)
結論:実際にはかなりクールです。
これは、すべてのハイブリッドISOで機能するはずです。それらはiso9660パーティションでファイルを見つけることができるので、ubuntuライブイメージや他のLinuxisosでうまく機能します。リアルモード(DOS)でも問題ありません。 WindowsISOは対応できません。
グジン ところでもできます。
BalenaEtcher、dd、またはISO9660ファイルを使用するその他の方法を使用して作成されたLive USBの起動に問題がある場合は、内蔵ドライブのgrubを使用して起動できる場合があります。
次のmenuentryを内蔵ドライブのgrubメニューに追加してみてください
menuentry "Ubuntu - flash drive" {
search --set=root --fs-uuid xxxx-xx-xx-xx-xx-xx-xx
set gfxpayload=keep
linux ($root)/casper/vmlinuz$casper_flavour file=/cdrom/preseed/ubuntu.seed quiet splash ---
initrd ($root)/casper/initrd$casper_flavour
}
ここで、xxxx-xx-xx-xx-xx-xx-xxはライブUSBのUUIDです。
この方法は、ISO9660ファイルを起動するライブUSBまたは永続USBで機能するはずです。