2010-06-18 14:25:36 +0000 2010-06-18 14:25:36 +0000
41
41

grub: ISO からの起動

GRUBでISOファイルにブートするにはどうすればいいですか?ISO ファイルは reiserfs パーティションにあり、GRUB はそれにアクセスすることができます (既にテスト済み)。

回答 (2)

55
55
55
2010-06-18 18:30:23 +0000

ISOファイルを起動する際の最大の問題は、起動するように設計されたISOは、ほとんどの場合、CDから起動するように設計されているということです。Grub 2 について Marco のブログで (私が強調しています):

GRUB は ISO9660 (“iso”) イメージを読み取ることができます。例えば、最初の数セクタをロードして起動することができます。しかし、ほとんどの人が気づいていないのは、"その後どうなるのか?*ロードされたオペレーティングシステムは何をするのでしょうか?

最も簡単な方法 **ランダムな ISO ファイルからブートする方法は、仮想マシン (VirtualBox, VMware, Virtual PC) に仮想 CD としてロードして、そこからブートすることです。これは、仮想マシンにとっては ISO ファイルではなく、本物の CD ハードウェア上の本物の CD だからです。

ベアメタル上のISOファイルからの起動はもっと難しいです。どのようにするかは、使用している Grub のバージョンに依存しますし、使用している ISO やブートするように設定された方法によって結果が異なる場合があります。これが、ほとんどのブート ISO-from-USB ツール (Unetbootin, WinToFlash, など) が通常、ISO の内容をドライブに extract している理由です – そうすることで、起動している OS を混乱させずに直接アクセスできるからです。


Grub 1

…よくわかりません。map –hook"_コマンドはGrub4DOSの強化版だと思いますが、可能であれば、メニュー項目はおそらくGrub4DOSによく似ているでしょう。プラス面では、GrubはGrub4DOSよりも幅広いファイルシステムをサポートしています。

Grub with reiserfs (未確認) のメモによると、「動作させるにはnotailでパーティションをマウントしなければならない」とのことです。

Memdisk はオプションです。

Grub4DOS

Grub4DOS provides some experimental “CD emulation” that works with some ISOs. 残念ながら、Grub4DOSはFAT32/NTFSファイルシステムしか読み込めません。Grub4DOSのダウンロード ](http://sourceforge.net/projects/grub4dos/files/)

ここにサンプルエントリ ソース )があります。

title fdfullcd.iso (0xFF)
  find --set-root /fdfullcd.iso
  map /fdfullcd.iso (0xFF)
  map --hook
  root (0xFF)
  kernel /isolinux/data/memdisk
  initrd /isolinux/data/fdboot.img

恐らくWin7のISOが起動できると思われます このエントリで .

title Windows 7
  map (hd0,0)/win7.iso (hd32)
  map --hook
  chainloader (hd32)

その他のISOは起動できる Memdiskで.

title Boot Hardware Detection Tool from iso image (with 'iso' parameter)
  kernel /memdisk iso
  initrd /hdt.iso

その他のISOは、 PenDriveLinuxのMultiBootISOs.exe のようなメニューコンフィギュレータを使用することもできます。フラッシュドライブにISOを配置し、ユーティリティを実行してブートローダをインストールし、ブートメニューを設定します。

Grub4DOSのインストールについては、 Hak5のエピソード を参照してください。


Grub 2

ここに Grub2 のエントリの例があります。現在のところ chainloader は ISO を起動するためには動作しないので、(1) loopback を使って ISO を「マウント」し、(2) ISO ファイルを指定する linux 行に iso-scanfindiso のようなものを追加する必要があります。

残念ながら、一般的な方法はありません。それぞれのブートエントリは、ターゲットの ISO の内容に合わせてカスタマイズする必要があります。ほとんどの Linux LiveCD はブートローダとして ISOLINUX を使用しています。isolinux.cfg を見つけて、そのブートエントリを調べて、通常何が起動するかを確認してください。

エントリの例 ソース )。

menuentry "Ubuntu Live 9.10 32bit" {
 loopback loop /boot/iso/ubuntu-9.10-desktop-i386.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-9.10-desktop-i386.iso noeject noprompt --
 initrd (loop)/casper/initrd.lz
}

menuentry "Grml small 2009.10" {
  loopback loop /boot/iso/grml-small_2009.10.iso
  linux (loop)/boot/grmlsmall/linux26 findiso=/boot/iso/grml-small_2009.10.iso apm=power-off lang=us vga=791 boot=live nomce noeject noprompt --
  initrd (loop)/boot/grmlsmall/initrd.gz
}

Linux 以外の LiveCD を起動しようとしている場合、運が悪いかもしれません。繰り返しになりますが、 Memdiskが役に立つかもしれません .

menuentry "Boot Hardware Detection Tool from iso" {
  linux16 /memdisk iso
  initrd16 /hdt.iso
}
``` 0x1&
1
1
1
2014-09-03 13:55:11 +0000

ターミナルから ddd を使ってパーティションに iso ファイルを書き込むことができます。注意してください、もし dd の使い方を間違えるとすべてを拭くことになります。以下のようになります: dd if=Desktop/LinuxCDFile.iso of=/Path/To/Partition