web-dev-qa-db-ja.com

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

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

現在、UEFIマシンがあり、BIOSマシンに関する情報がすべて見つかります。

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

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

11
Fabby

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

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変数を追加する前に、ファイルがどのハードディスクに保存されているかを確認する必要があります。したがって、df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-AMD64.iso | tail -1を実行し、マシン上の出力は/dev/sdb2です。

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

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

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

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

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

したがって、マシンのISOファイルが(hd2,gpt2)$GPartedISOFile(2番目のドライブ/dev/sdb2、2番目のパーティションhd2)であったため、loopbackの値はgpt2になります。

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

もう1つの違いは、BIOSマシンのlinuxinitrdがUEFIマシンのlinuxefilinuxefiと呼ばれることです。これにより、最終結果が得られます。

#!/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 (Works)" {
  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
}
13
Fabby

別の方法は、次のように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をアンマウントする必要があります。

Isodevice unmount 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
}
6
oldfred

mkusb MULTIBOOT HACK

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

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

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

mkusb defaults

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

mkusb use defaults again

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

DUS Console

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

GParted Before

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

Gparted after

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

Persistence partition

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

Persistence folder

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

ISO folder

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

ISO folder contents

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

GRUB location

grub.cfgの場所

grub.cfg

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

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 Installer

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

mkusb Windows grub

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

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

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

5
C.S.Cameron

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番目の手順を繰り返します

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

リファレンス: Grub2 ISOブートに関するUbuntuヘルプ

お役に立てれば

3
user68186

MultiBootUSB-QEMU

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

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

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

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

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

MultiBootUSB-QEMU

2
C.S.Cameron

SIMPLE mkusb ISO multibooter

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

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

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
}
1
C.S.Cameron