UEFIマシンでgrub2を使用してドライブからISOファイルを起動するにはどうすればよいですか?


12

GPartedCloneZillaBoot-RepairUbuntu 14.04 32 bitなどのライブISOファイルがたくさんあります... /opt古いBIOSマシンにダウンロードしたものを、grubメニューに追加して起動することができました。:-)

現在、UEFIマシンがあり、見つけることができる情報はすべてBIOSマシンに関するものです。

これらのISOファイルをgrubから起動する手順は何ですか?

私はちょうど私が必要なスティックを見つけることができないため、USBスティックにこれらを常に「焼き付ける」ことにうんざりしています。 ) :-(


1
私はしばらく前にこの方法で行った、それは素晴らしいです。
有機大理石

1
他のドライブへのインストールやフラッシュドライブへのフルドライブインストールを簡単にするために、各ドライブに1つずつ、個別のパーティションを使用するのが好きです。help.ubuntu.com/community/Grub2/ISOBootの例:help.ubuntu.com/community/Grub2/ISOBoot/Examplesパーティションをマウントする前のパスを正しく取得し、取得に関する2つの主要な問題として詳細なブートパラメーターを取得する動作するように。フラッシュドライブが接続されていれば、パスも変更される可能性があります。ISOを調べてそのブートスタンザとパスを確認すると、詳細を把握するのに役立ちます。
オールドフレッド

1
以前にこの「grub-n-iso」メソッドを使用しましたが、うまく機能します:-)が、テスト用に別のコンピューターでisoファイルをテストし、isoファイルから高速USB3ペンドライブにクローンするか、永続的なライブを作成しますmkusbを搭載した USBペンドライブ。(USBペンドライブを小さなプラスチックの箱に保管しています。)
sudodus

VBoxはISOファイルを正常に実行し、終了時にマシン状態を保存します。MultiBootUSBにはISOブートをドラッグアンドドロップするオプションがあり、Virtual Machine Managerを使用したQEMUはすぐにisoを実行します。
CSキャメロン

1
とりあえずgrub2 2.02を使用してISOをループマウントします。Grub2 2.04はメモリ不足エラーを発生させます。bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 Ubuntu 18.04にはまだgrub 2.02があります。
オールドフレッド

回答:


14

grub 2.04にバグがあるため、以前またはそれ以降のバージョンを使用してください。

さて、ISOファイルをgrubに追加するための基本は、UEFIでもBIOSマシンでも同じです:ファイルの下部にアイテム(この例ではGPartedを使用)を編集/etc/grub.d/40_customして追加menuentryします。

menuentry "GParted Live ISO" {
}

次に、ISOを保存したディレクトリを含む変数を追加します(これまでのところ、これで良いことです:BIOSマシンとの違いはありません)。

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}

私は/optマシンのルートにディレクトリを作成するのが好きではないので、とにかくオプションのソフトウェアが常駐するLinux File System Hierarchyに従って、これらを保存するために使用しています。

loopback変数を追加する前に、ファイルが保存されているハードディスクを確認する必要があります。そのため、a:を実行df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1し、マシン上の出力は次のようになり/dev/sdb2ます。

ただし、 grubは(hdX,Y)表記を使用し、これがUEFIマシンとBIOSマシンの違いの出番です!マシンを再起動し、grubメニューに移動してを押しますC。これにより、grubコマンドプロンプトが表示されます。これは、以前とは異なるコマンドですが、必要なコマンドは 1つだけですls

私のマシンでは、出力は次のとおりです。

(hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...

え?4ドライブ?3つしかありません!そして、それ(hd1,4)はBIOS ではなく(hd1,gpt3)UEFIに(hd0)あり、パーティションはまったくありません!

明らかに、NVRAMの一部がストレージとして使用され(hd0) 、1からドライブの番号付けを開始する必要があるときに表示されます!  ISOファイルの起動に関するすべての情報は、0から番号付けを開始する必要があると述べています(BIOSマシンではこれは常に当てはまりますが一部のUEFIマシンで必ずしもそうではありません!)

値がそうloopbackなると(hd2,gpt2)$GPartedISOFile私のマシン上のISOファイルとしてだった/dev/sdb2(第二の駆動hd2、第二パーティションgpt2):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
}

もう一つの違いは、ということですlinuxし、initrdBIOSのマシンでは、と呼ばれているlinuxefilinuxefi私たちの最終的な結果を与える、UEFIマシンで:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$GPartedISOFile ip=frommedia toram=filesystem.squashfs union=overlay username=user
  initrdefi (loop)/live/initrd.img
}

そこで、そのファイルを保存し、grubを次のように更新します。

update-grub

上記のすべての後、再起動し、grubメニューに移動し、選択するGParted Live ISOと、USBスティックを再び探す必要なくISOを簡単に起動できるようになりました!

:-)

CloneZilla Liveの例(この質問の場合

menuentry "CloneZilla ISO" {
  set ISOFile="/opt/Live-ISOs/clonezilla-live-20170905-zesty-amd64.iso"
  loopback loop (hd2,gpt2)$ISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$ISOFile ip=frommedia toram=filesystem.squashfs union=overlay
  initrdefi (loop)/live/initrd.img
}

まだClonezillaをセットアップしましたか?少し違いますが、まだそれを理解していない場合は投稿できます。
オーガニックマーブル

1
「gimme the codez」という種類の人々のために明日追加するすべての回答について、別の回答を投稿します... @OrganicMarble
Fabby

+1ですが、おそらくこれらの日2からドロップしても安全update-grub2です。
WinEunuuchs2Unix

@ WinEunuuchs2Unixこれは私の歴史に載っています...私はただタイプupd↑してからコピー&ペーストします。リマインダーを更新していただきありがとうございます!
ファビー

6

別の方法は、次のように40_customに設定ファイルを追加するだけです:

menuentry 'Live ISOs on SSD' {
configfile (hd0,3)/ISO/livecdimage.cfg
} 

menuentry 'Live ISOs on HDD (boot on SSD)' {
configfile (hd1,3)/ISO/livecdimage.cfg
} 

これは、ISOを更新するときに必ず実行することを忘れてしまうためsudo update-grubです。上記のエントリを変更する必要はありません。live_cdimage.cfgを編集できます。これは、ヘッダー行のない40_customと同じ形式で、ISOパーティションの/ ISOフォルダーにあります。

toramを別のブートパラメーターとして追加し、Nvidiaを使用するシステムではnomodesetブートパラメーターを追加します。ただし、多くの場合、/ isodeviceをアンマウントする必要があります。

ISOデバイスをアンマウントできませんISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216をアンマウントし ます

sudo umount -l -r -f /isodevice

これは、livecdimage.cfgファイルの一部です

# livecdimage.cfg
# Add this to 40_custom to load this file:
# menuentry 'Live ISOs' {
# configfile (hd1,3)/iso/livecdimage.cfg
#} 
# Add iso names to livecdimage.cfg
#for i in `ls *.iso`;do echo "# "$i>>livecdimage.cfg; done;

menuentry "Ubuntu 16.04.4 xenial amd64" {
    set isofile="/ISO/ubuntu-16.04.4-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu 18.04 Bionic amd64" {
    set isofile="/ISO/bionic-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

# spacer line
menuentry " " {
set root= 
}

menuentry "Reboot" {
    reboot
}

menuentry "Halt" {
    halt
}

私はリブートが好きで、停止します!:-) +1 なぜ追加するのinsmodですか?チャットで私にpingを
送信

おそらくinmodは必要ありません。grub2では、いくつかの機能が組み込まれ、いくつかはアドイン(insmod)でした。おそらく最初は2010年にgptを使い始めたとき、またはpcがUEFIであり、grub2がBIOSでgptから起動したとしてもBIOS / MBRのために新しいものになる前に、insmod gptが必要でした。
オールドフレッド

答えてくれてありがとう。その答えからそれらの行を削除する方が良いと思いませんか?
ファビー

1
独自のスタンザを編集して、18.04が起動するかどうかを確認します。期待しています。また、gparted ISOブートエントリを更新したかったのですが、これは非常に古いので、少し戻ってきます。
オールドフレッド

1
起動しました。18.04フラッシュドライブが接続されていて、システムでhd0になるのを忘れていたので、起動時に正しいドライブを得るために1つのhdXのエントリを手動で編集する必要があります。gparted .25ブートは、.30に変更しただけでは機能しませんでした。ISOを調べてそのgrub.cfgを確認し、それらのパラメーターとgrubのループコマンドを使用する必要がありましたが、その後は機能しました。
オールドフレッド

5

mkusb MULTIBOOT HACK

Mkusbは、BIOSとUEFIの両方の機能を備えているため、カスタムブートドライブプロジェクトの優れた基盤となります。

このハックは、Windowsインストーラーを含む複数のISOファイルを起動し、grub2メニューを備えています。

ほとんどのOSのGrub2メニュー項目は、Google検索を使用して利用でき、この回答の範囲外です。

mkusbのデフォルト

永続的なUSBドライブを作成するときは、mkusbのデフォルトを使用します。

mkusbが再びデフォルトを使用する

疑わしい場合はmkusb永続性のデフォルトを使用します。パーティションサイズは後で調整できますが、時間がかかります。

DUSコンソール

インストール後のDUSコンソール。

GParted以前

パーティションの変更前にGParted。

後に分かれた

変更後にGparted-sdb4、ISO9660 OSパーティション、およびsdb5、ext2 casper-rwパーティションを、永続性ファイル用のFAT32パーティションで上書きします。

永続パーティション

永続パーティション-各OSに一意の名前のフォルダーを作成します(永続が必要です)

永続フォルダー

永続フォルダー-casper-rwファイルとオプションのhome-rwファイルを各永続フォルダーに追加します。home-rwファイルは、casper-rwファイルの名前を変更することで作成できます。home-rwファイルは、フルインストールの独立したホームパーティションのようなもので、バージョンのアップグレード後に再利用できます。

ISOフォルダー

NTFS usbdataパーティションにISOファイル用のフォルダーを作成します。

ISOフォルダーの内容

ISOフォルダーにいくつかのISOを追加します。

GRUBの場所

grub.cfgの場所

grub.cfg

grub.cfgを編集して、ISOファイルをループマウントします。含める:persistent persistent-path=/<persistent-folder-name>/永続性が必要な場合。

EDIT 18.04+では、指定したGRUB vmlinuzで vmlinuz.efiないとinitrdの initid.lzないinitrdのではありません

sudo parted -ls / dev / sdb

sudo parted -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Windowsインストーラーが必要な場合は、おそらくmkusbの「Windowsインストーラーの抽出」機能から始めるのが最も簡単です(Windows ISOをTARに手動で抽出する必要がありました)。

mkusb Windowsインストーラー

インストール後、ISO用のフォルダーを作成し、必要に応じて永続化用のフォルダーを作成します(上記の手順と同様)。

mkusb Windows GRUB

/boot/grub/grub.cfgを編集して、すべてのISOをループマウントし、永続フォルダーを指定します。

(Windows ISOファイルをループマウントする方法を見つけていません)。

上記をUSBスティックとして使用する場合は、Windows専用コンピューターに保存されているISOを起動するために使用できます。内蔵ドライブにはGrubは必要ありません。


そして、どのようにしてこれらをHDD / SDDに戻すのですか?質問は、USBスティックにそれらを追加することです。
ファビー

1
@ファビー、これはUSBスティックだけのものではありません。新しいSATAドライブをお持ちの場合は、この回答に記載されているとおりに起動し、UEFIモードとBIOSモードの両方で動作する堅牢なブートシステムをmkusbにインストールさせます。このSATAドライブは、内部にインストールするか、USBまたはeSATAを介して外部に接続できます。「従来のインストール済みシステム」と「grub-n-iso」を介して起動する新しいisoファイルの両方を追加することができます。
sudodus

OK、まだわかりません/opt/。これらのISOがに必要です。それ、どうやったら出来るの?(その間に+1の努力のためのけれども...)
Fabby

1
@ファビー:上記のようにISOの新しいフォルダーを作成する代わりに、grub.cfgの/ opt /にあるISOの場所をポイントすると、ペンドライブのgrubがハードドライブのISOを起動できます。これを試してみます。
CSキャメロン

@Fabby:ISOが内部ドライブの/ opt /にある場合、内部ドライブで使用しているのと同じメニューエントリが外部ドライブでも機能します。USBスティックでgrubを起動すると、内部のgrubメニューが混雑したり破損したりしないなどの利点があります。
CSキャメロン

3

3つの簡単なステップ

ISOをgrubメニューに追加し、そこから起動します。

まず、インストール grml-rescueboot

ターミナルを開き、次を入力します。

sudo apt install grml-rescueboot

次に、isoファイルを /boot/grml/

同じ端末で次を入力します。

sudo mv ~/Downloads/<filename.iso> /boot/grml/

第三に、grubを更新する

同じ端末で次を入力します。

sudo update-grub

必要に応じて、2番目と3番目の手順を繰り返します

から古いISOファイルを削除することを忘れないでください/boot/grml

参照:Grub2 ISOブートに関するUbuntuヘルプ

お役に立てれば


/bootそれらを置く最悪の場所です。申し訳ありませんが、grmlを調べました。ただし、努力のために+1
Fabby

+1をありがとう@Fabby!これは最善の方法ではないかもしれませんが、これが最も簡単なIMHOのようです。
user68186

1
+1:技術に詳しくないユーザーにとっては良い答えです。
ファビー

2

MultiBootUSB-QEMU

最小限の手間でISOファイルを起動し、永続性を必要としない場合、MultiBootUSBにはQEMUオプションが含まれます。

  • MultiBootUSBを起動し、Boot ISO / USBタブを選択します。

  • [イメージの選択]スペースにISOをドラッグアンドドロップします。

  • RAMサイズを選択し、Boot ISOボタンを押します。

grub.cfgを編集したり、ログアウトしたりする必要はありません。

MultiBootUSB-QEMU


気の利いた!後でこれを試してみます!
ファビー

@Fabby:WindowsバージョンのMBUSBとLinuxバージョンがあります。ISOを起動するためのWindowsバージョンを取得できず、USBのみを起動できました。Linuxバージョン9.2.0は、私にとって非常に便利です。
CSキャメロン

2

SIMPLE mkusb ISOマルチブート

マルチパーシスタンスが必要ない場合は、mkusbフラッシュドライブでオペレーティングシステムISOをマルチブートするのは簡単です。

mkusbを使用して、選択したデフォルトOSを使用して永続的USBドライブを作成します。 https://help.ubuntu.com/community/mkusb)。

usbdataパーティションsdx1にISOという名前のフォルダーを作成します。

起動するISOをこのフォルダーに追加します。

メニューエントリを/sdx3/boot/grub/grub.cfgに追加して、ISOをループマウントします。

サンプル:

menuentry "Ubuntu-18.04 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/ubuntu-18.04-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile splash --
        initrd (loop)/casper/initrd.lz
}

menuentry "GParted 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/gparted-live-0.31.0-1-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live union=overlay username=user config components noswap noeject toram=filesystem.squashfs ip='' nosplash findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}

menuentry "Clonezilla 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/clonezilla-live-2.5.5-38-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live live-config nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\"   ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" vga=788   ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.