「マルチブート USB ドライブ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:ブートプロセス de:Multiboot USB Stick en:Multiboot USB drive {{Related articles start}} {{Related|GRUB}} {{Related|Syslinux}} {{Related|Archis...」)
 
(同期)
 
(4人の利用者による、間の16版が非表示)
1行目: 1行目:
[[Category:ブートプロセス]]
+
[[Category:Arch の入手とイントール]]
 
[[de:Multiboot USB Stick]]
 
[[de:Multiboot USB Stick]]
 
[[en:Multiboot USB drive]]
 
[[en:Multiboot USB drive]]
  +
[[es:Multiboot USB drive]]
  +
[[pt:Multiboot USB drive]]
  +
[[zh-hans:Multiboot_USB_drive]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|GRUB}}
 
{{Related|GRUB}}
12行目: 15行目:
   
 
利点:
 
利点:
  +
 
* 必要なのは単一のパーティションのみ
 
* 必要なのは単一のパーティションのみ
 
* 全ての ISO ファイルを単一のディレクトリに保存できる
 
* 全ての ISO ファイルを単一のディレクトリに保存できる
17行目: 21行目:
   
 
欠点:
 
欠点:
  +
 
* 対応していない ISO イメージもある
 
* 対応していない ISO イメージもある
 
* ISO ファイルのオリジナルのブートメニューは表示されない
 
* ISO ファイルのオリジナルのブートメニューは表示されない
23行目: 28行目:
 
=== 準備 ===
 
=== 準備 ===
   
USB ドライブに最低でも一つのパーティションを作成して [[GRUB]] が対応しているファイルシステムを作成してください。[[パーティショニング]]や[[ファイルシステム#デバイスのフォーマット]]を参照。ドライブに保存する ISO ファイルの合計容量にあわせて容量を決めて、ブートローダーのための容量を残しておいて下さい。
+
USB ドライブに最低でも一つのパーティションを作成して [[GRUB]] が対応しているファイルシステムを作成してください。[[パーティショニング]] [[ファイルシステム#デバイスのフォーマット]] を参照。ドライブに保存する ISO ファイルの合計容量にあわせて容量を決めて、ブートローダーのための容量を残しておいて下さい。
   
 
=== GRUB のインストール ===
 
=== GRUB のインストール ===
  +
  +
==== シンプルなインストール ====
   
 
USB ドライブ上のファイルシステムをマウント:
 
USB ドライブ上のファイルシステムをマウント:
31行目: 38行目:
 
# mount /dev/sdXY /mnt
 
# mount /dev/sdXY /mnt
   
{{ic|/boot}} ディレクトリを作成:
+
/boot ディレクトリを作成:
   
 
# mkdir /mnt/boot
 
# mkdir /mnt/boot
   
USB ドライブに grub をインストール:
+
USB ドライブに GRUB をインストール:
   
 
# grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdX
 
# grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdX
41行目: 48行目:
 
UEFI モードで ISO を起動したい場合、UEFI ターゲットで grub をインストールする必要があります:
 
UEFI モードで ISO を起動したい場合、UEFI ターゲットで grub をインストールする必要があります:
   
# grub-install --target x86_64-efi --efi-directory /mnt --boot-directory=/mnt/boot --removable
+
# grub-install --target=x86_64-efi --removable --boot-directory=/mnt/boot --efi-directory=/mnt
   
 
UEFI を使う場合、パーティションは MBR パーティションテーブルの最初のパーティションにして FAT32 でフォーマットしてください。
 
UEFI を使う場合、パーティションは MBR パーティションテーブルの最初のパーティションにして FAT32 でフォーマットしてください。
   
  +
==== UEFI GPT + BIOS GPT/MBR のハイブリッドブート ====
=== GRUB の設定 ===
 
   
  +
どこでも起動できるユニバーサル USB キーを作成したいときに有用な構成です。まず最初にデバイスに [[GPT]] パーティションテーブルを作成する必要があります。最低でも以下の3つのパーティションが必要です:
マルチブート USB ドライブを作るときは {{ic|grub.cfg}} は自動で生成するよりも手動で編集した方が楽です。もしくは、{{ic|/etc/grub.d/40_custom}} や {{ic|/mnt/boot/grub/custom.cfg}} に変更を加えてから [[GRUB#メイン設定ファイルの生成|grub-mkconfig]] で {{ic|/mnt/boot/grub/grub.cfg}} を生成してください。
 
   
  +
# BIOS ブートパーティション (gdisk タイプコード {{ic|EF02}})。このパーティションのサイズは 1 MiB でなければなりません。
イメージファイルが存在する USB ドライブのパーティションを識別するのに {{ic|/dev/sd''xY''}} よりも[[永続的なブロックデバイスの命名|永続的な名前]]を使うことが推奨されるので、利便性のため値を保持する変数を定義します。ISO イメージが grub と同一のパーティション上にある場合、起動時に UUID を読み取るように以下を使って下さい:
 
  +
# EFI システムパーティション (gdisk タイプコード {{ic|EF00}} で [[EFI_システムパーティション#パーティションのフォーマット|FAT32 ファイルシステム]])。このパーティションは 50 MiB まで小さくできます。
  +
# データパーティション ([[GRUB]] によってサポートされているファイルシステムを使用)。デバイスの残りの空き領域をこのパーティションに利用できます。
   
  +
次に、[https://www.rodsbooks.com/gdisk/hybrid.html ハイブリッド MBR] パーティションテーブルを作成しなければなりません。これがないと、BIOS MBR ベースのシステムは起動しません。システムが、存在すると期待されているパーティションを見つけられません。
{{hc|/mnt/boot/grub/grub.cfg|2=
 
# path to the partition holding ISO images (using UUID)
 
probe -u $root --set=rootuuid
 
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
 
}}
 
   
  +
[[gdisk]] を使ってハイブリッド MBR パーティションテーブルを作成する例:
または UUID を明示的に指定:
 
   
{{hc|/mnt/boot/grub/grub.cfg|2=
+
{{hc|# gdisk /dev/sd''X''|
  +
Command (? for help): r
# path to the partition holding ISO images (using UUID)
 
  +
Recovery/transformation command (? for help): h
set imgdevpath="/dev/disk/by-uuid/''UUID_value''"
 
}}
 
   
  +
WARNING! Hybrid MBRs are flaky and dangerous! If you decide not to use one,
もしくは、UUID の代わりにデバイスのラベルを使います:
 
  +
just hit the Enter key at the below prompt and your MBR partition table will
  +
be untouched.
   
  +
Type from one to three GPT partition numbers, separated by spaces, to be added to the hybrid MBR, in sequence: 1 2 3
{{hc|/mnt/boot/grub/grub.cfg|2=
 
# path to the partition holding ISO images (using labels)
+
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N
set imgdevpath="/dev/disk/by-label/''label_value''"
 
}}
 
   
  +
Creating entry for GPT partition #1 (MBR partition #1)
必要な UUID やラベルは {{ic|lsblk -f}} で確認できます。USB デバイスに Arch ISO と同一のラベルは使わないで下さい。ブートプロセスが失敗します。
 
  +
Enter an MBR hex code (default EF):
  +
Set the bootable flag? (Y/N): N
   
  +
Creating entry for GPT partition #2 (MBR partition #2)
次のセクションに書かれている例を見て、各 ISO イメージのブートエントリをヘッダの下に追加することで設定は完了です。
 
  +
Enter an MBR hex code (default EF):
  +
Set the bootable flag? (Y/N): N
   
  +
Creating entry for GPT partition #3 (MBR partition #3)
=== ブートエントリ ===
 
  +
Enter an MBR hex code (default 83):
  +
Set the bootable flag? (Y/N): Y
   
  +
Recovery/transformation command (? for help): x
ISO イメージは GRUB をインストールしたのと同じファイルシステムの {{ic|boot/iso/}} ディレクトリに保存します。それ以外のディレクトリに保存する場合、{{ic|loopback}} コマンドを使う時に ISO ファイルのパスの前にデバイスの識別子を付ける必要があります。例: {{ic|loopback loop '''(hd1,2)'''$isofile}}。このデバイス識別子は[[永続的なブロックデバイスの命名|永続的]]ではないため、このセクションの例では使いません。
 
  +
Expert command (? for help): h
  +
Expert command (? for help): w
   
  +
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
以下のように永続的なブロックデバイスの命名を使うことができます:
 
  +
PARTITIONS!!
{{bc|1=
 
# define globally (i.e outside any menuentry)
 
insmod search_fs_uuid
 
search --no-floppy --set='''isopart''' --fs-uuid d6de9100-1981-11e5-9fb9-74867a652f05 # your iso fs uuid here
 
# later use inside each menuentry instead
 
loopback loop '''($isopart)'''$isofile
 
}}
 
   
  +
Do you want to proceed? (Y/N): Y
{{Tip|カーネルパラメータのリストは https://www.kernel.org/doc/Documentation/kernel-parameters.txt を見て下さい (完全ではありません)。}}
 
 
==== Alt Linux ====
 
 
* Initramfs フレームワーク: ???
 
* ライブフレームワーク: ???
 
* Init システム: ???
 
 
{{bc|1=
 
menuentry "[loopback]altlinux-7.0.5-simply-x86_64-install-dvd5.iso" {
 
set gfxpayload=keep
 
insmod gzio
 
insmod part_msdos
 
insmod ext2
 
insmod xfs
 
set bootpart=uuid:df46d821-e7f9-4e35-bbd2-728bdce8d89a
 
set isodir=/boot/iso
 
set isofile=altlinux-7.0.5-simply-x86_64-install-dvd5.iso
 
loopback loop (${root})${isodir}/${isofile}
 
linux (loop)/syslinux/alt0/vmlinuz automatic=method:disk,${bootpart},directory:${isodir}/${isofile} ramdisk_size=183210 changedisk lang=ru_RU splash noeject xdriver=auto quiet=1 showopts
 
initrd (loop)/syslinux/alt0/full.cz
 
}
 
 
}}
 
}}
   
  +
パーティションをフォーマットすることを忘れずに:
==== Arch Linux ====
 
   
  +
# mkfs.fat -F32 /dev/sd''X''2
{{Tip|32ビット環境を起動したい場合、{{ic|x86_64}} を {{ic|i686}} に置き換えて下さい。}}
 
  +
# mkfs.ext4 /dev/sd''X''3
   
  +
これで、GRUB をインストールして EFI + GPT と BIOS + GPT/MBR の両方に対応させることができます。GRUB の設定 (--boot-directory) は同じ場所に保存してください。
===== 月次リリース =====
 
   
  +
まず、USB ドライブの EFI システムパーティションとデータパーティションをマウントする必要があります。
* Initramfs フレームワーク: [[mkinitcpio]] (cmdline: [https://projects.archlinux.org/mkinitcpio.git/tree/man/mkinitcpio.8.txt#n212])
 
* ライブフレームワーク: [[archiso]] (cmdline: [https://projects.archlinux.org/archiso.git/tree/docs/README.bootparams])
 
* Init システム: [[systemd]] (cmdline: [http://www.freedesktop.org/software/systemd/man/kernel-command-line.html])
 
   
  +
例:
{{bc|1=
 
menuentry '[loopback]archlinux-2014.12.01-dual.iso' {
 
set isofile='/boot/iso/archlinux-2014.12.01-dual.iso'
 
loopback loop $isofile
 
linux (loop)/arch/boot/'''x86_64'''/vmlinuz archisodevice=/dev/loop0 img_dev=$imgdevpath img_loop=$isofile
 
initrd (loop)/arch/boot/'''x86_64'''/archiso.img
 
}
 
}}
 
   
  +
# mount /dev/sd''X''3 /mnt
{{note|archiso v23 (月次リリース 2015.10.01) 現在、GRUB とループバックデバイスを使う場合 {{ic|1=archisodevice=/dev/loop0}} パラメータは不要です。}}
 
  +
# mkdir /mnt/boot /mnt/efi
  +
# mount /dev/sd''X''2 /mnt/efi
   
  +
そして、以下のように UEFI 用の GRUB をインストールします:
===== archboot =====
 
   
  +
ほとんどの場合、{{ic|EFI_MOUNTPOINT}} は、マウントされた USB ディスク上の {{ic|/mnt/efi}} ディレクトリに対応します。
* Initramfs フレームワーク: [[mkinitcpio]] (cmdline: [https://projects.archlinux.org/mkinitcpio.git/tree/man/mkinitcpio.8.txt#n212])
 
  +
{{ic|DATA_MOUNTPOINT}} はデータパーティションがマウントされる場所です。この例では、sd''X''3 のマウントポイントである {{ic|/mnt}} になります。
* ライブフレームワーク: [[archboot]] (cmdline: none? ''RFD'')
 
* Init システム: [[systemd]] (cmdline: [http://www.freedesktop.org/software/systemd/man/kernel-command-line.html])
 
   
  +
# grub-install --target=x86_64-efi --recheck --removable --efi-directory=/''EFI_MOUNTPOINT'' --boot-directory=/''DATA_MOUNTPOINT''/boot
{{bc|1=
 
menuentry '[loopback]archlinux-2014.11-1-archboot' {
 
set isofile='/boot/iso/archlinux-2014.11-1-archboot.iso'
 
loopback loop $isofile
 
linux (loop)/boot/vmlinuz_'''x86_64''' iso_loop_dev=$imgdevpath iso_loop_path=$isofile
 
initrd (loop)/boot/initramfs_'''x86_64'''.img
 
}
 
}}
 
   
  +
それから BIOS 用にインストール:
==== CentOS ====
 
   
  +
# grub-install --target=i386-pc --recheck --boot-directory=/''DATA_MOUNTPOINT''/boot /dev/sd''X''
===== 標準インストールメディア =====
 
   
  +
さらにフォールバックとして、MBR で起動可能なデータパーティションに GRUB をインストールすることもできます:
* Initramfs フレームワーク: [https://fedoraproject.org/wiki/Dracut Dracut] (cmdline: [https://git.kernel.org/cgit/boot/dracut/dracut.git/tree/dracut.cmdline.7.asc])
 
* インストールプログラム: [https://fedoraproject.org/wiki/Anaconda Anaconda] (cmdline: [https://github.com/rhinstaller/anaconda/blob/master/docs/boot-options.rst])
 
* Init システム: [[systemd]] (cmdline: [http://www.freedesktop.org/software/systemd/man/kernel-command-line.html])
 
   
  +
# grub-install --target=i386-pc --recheck --boot-directory=/''DATA_MOUNTPOINT''/boot /dev/sd''X''3
{{bc|1=
 
menuentry "[loopback]CentOS-7.0-1406-x86_64-'''DVD'''" {
 
set isofile='/boot/iso/CentOS-7.0-1406-x86_64-'''DVD'''.iso'
 
loopback loop $isofile
 
linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:'''/dev/sdb2''':/$isofile
 
initrd (loop)/isolinux/initrd.img
 
}
 
}}
 
   
  +
=== GRUB の設定 ===
{{tip|1=インストールイメージの場所を示す stage2 ブートパラメータ {{ic|1=/dev/sdb2}} は Anaconda によって使われます。[[fstab]] の1番目のフィールド (fs_spec) と同じように、以下のどれかに置き換えられます (例: {{ic|1=linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:'''LABEL=MYUSBSTICK''':/$isofile}}):
 
* {{ic|1=/dev/sd'''''xY'''''}}
 
* {{ic|1=LABEL=MYUSBSTICK}}
 
* {{ic|1=UUID=00000000-0000-0000-0000-0000deadbeef}}
 
特殊なディスクラベル (例: GPT) を使用する場合、{{ic|1=PARTUUID=}} や {{ic|1=PARTLABEL=}} を使うことも可能です。
 
}}
 
   
===== デスクトッライブメディア =====
+
==== テンレートを使う ====
   
  +
ドライブに特定の ISO ファイルやフォルダが存在する場合にのみ、他のブートエントリをロードできるようにする {{ic|grub.cfg}} と事前に生成済みの GRUB 設定ファイルを提供する git プロジェクトがいくつか存在します。
* Initramfs フレームワーク: [https://fedoraproject.org/wiki/Dracut Dracut] (cmdline: [https://git.kernel.org/cgit/boot/dracut/dracut.git/tree/dracut.cmdline.7.asc])
 
* ライブフレームワーク: fedora [https://fedoraproject.org/wiki/FedoraLiveCD livecd-tools] (cmdline: none)
 
* Init システム: [[systemd]] (cmdline: [http://www.freedesktop.org/software/systemd/man/kernel-command-line.html])
 
   
  +
* Multiboot USB: https://github.com/hackerncoder/multibootusb
{{bc|1=
 
menuentry '[loopback]CentOS-7.0-1406-x86_64-GnomeLive' {
 
set isofile='/boot/iso/CentOS-7.0-1406-x86_64-GnomeLive.iso'
 
loopback loop $isofile
 
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=CentOS-7-live-GNOME-x86_64 iso-scan/filename=$isofile rd.live.image
 
initrd (loop)/isolinux/initrd0.img
 
}
 
}}
 
   
  +
* GLIM (GRUB2 Live ISO Multiboot): https://github.com/thias/glim
==== Clonezilla Live ====
 
{{tip|1=2014.01.05 から [https://projects.archlinux.org/archiso.git/commit/?id=5cd02c704046cdb6974f6b10f0cac366eeebec0e], Arch Linux の月次リリースには clonezilla が含まれています。}}
 
   
  +
==== 手動設定 ====
* Initramfs フレームワーク: [https://anonscm.debian.org/cgit/kernel/initramfs-tools.git/ initramfs-tools] (cmdline: ''RFD'')
 
* ライブフレームワーク: [http://live.debian.net/ Debian Live] (cmdline: [http://manpages.debian.org/cgi-bin/man.cgi?query=live-boot&apropos=0&sektion=7&manpath=Debian+unstable+sid&format=html&locale=en])
 
* Init システム: [https://savannah.nongnu.org/projects/sysvinit sysvinit] (cmdline: ''RFD'')
 
   
  +
マルチブート USB ドライブを作るときは {{ic|grub.cfg}} は自動で生成するよりも手動で編集した方が楽です。もしくは、{{ic|/etc/grub.d/40_custom}} や {{ic|/mnt/boot/grub/custom.cfg}} に変更を加えてから [[GRUB#メイン設定ファイルの生成|grub-mkconfig]] で {{ic|/mnt/boot/grub/grub.cfg}} を生成してください。
{{bc|1=
 
menuentry "[loopback]clonezilla-live-2.2.3-25-amd64" {
 
set isofile="/boot/iso/clonezilla-live-2.2.3-25-amd64.iso"
 
loopback loop $isofile
 
linux (loop)/live/vmlinuz findiso=$isofile boot=live union=overlay username=user config
 
initrd (loop)/live/initrd.img
 
}
 
}}
 
   
  +
イメージファイルが存在する USB ドライブのパーティションを識別するのに {{ic|/dev/sd''xY''}} よりも[[永続的なブロックデバイスの命名|永続的な名前]]を使うことが推奨されるので、利便性のため値を保持する変数を定義します。ISO イメージが grub と同一のパーティション上にある場合、起動時に UUID を読み取るように以下を使って下さい:
==== Debian ====
 
   
  +
{{hc|/mnt/boot/grub/grub.cfg|2=
===== 標準インストールメディア =====
 
  +
# path to the partition holding ISO images (using UUID)
 
  +
probe -u $root --set=rootuuid
* Initramfs フレームワーク: [https://anonscm.debian.org/cgit/kernel/initramfs-tools.git/ initramfs-tools] (cmdline: ''RFD'')
 
  +
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
* インストールプログラム: [https://wiki.debian.org/DebianInstaller#Development debian-installer] (cmdline: ''exists but missing online documentation'')
 
* Init システム: [https://savannah.nongnu.org/projects/sysvinit sysvinit] (cmdline: ''RFD'')
 
 
{{tip|光学メディア以外の標準インストールメディア (例: USB スティックや HDD) から debian をインストールするには、インストールメディアのデフォルトの initramfs ({{ic|(loop)/install.amd/initrd.gz}}) ではない別の initramfs を使用する必要があります。デフォルトの initramfs で起動すると、インストーラーがインストールに使用する iso イメージを発見・マウントすることができません。[https://mirrors.kernel.org/debian/dists/stable/main/installer-amd64/current/images/hd-media/initrd.gz 公式のミラーサイト] からハードディスクインストール用の initramfs をダウンロードして、イメージファイルと同じディレクトリに配置してください。そして適当な名前を付けて下さい (下の例では {{ic|debian-7.8.0-amd64-DVD-1.hdd.initrd.gz}})。}}
 
 
{{bc|1=
 
menuentry '[loopback]debian-7.8.0-amd64-DVD-1' {
 
set isofile='/boot/iso/debian-7.8.0-amd64-DVD-1.iso'
 
set initrdfile='/boot/iso/debian-7.8.0-amd64-DVD-1.hdd.initrd.gz'
 
loopback loop $isofile
 
linux (loop)/install.amd/vmlinuz vga=791 iso-scan/ask_second_pass=true iso-scan/filename=$isofile
 
initrd $initrdfile
 
}
 
 
}}
 
}}
   
  +
または UUID を明示的に指定:
===== ライブインストールメディア =====
 
   
  +
{{hc|/mnt/boot/grub/grub.cfg|2=
* Initramfs フレームワーク: [https://anonscm.debian.org/cgit/kernel/initramfs-tools.git/ initramfs-tools] (cmdline: ''RFD'')
 
  +
# path to the partition holding ISO images (using UUID)
* ライブフレームワーク: [http://live.debian.net/ Debian Live] (cmdline: [http://manpages.debian.org/cgi-bin/man.cgi?query=live-boot&apropos=0&sektion=7&manpath=Debian+unstable+sid&format=html&locale=en])
 
  +
set imgdevpath="/dev/disk/by-uuid/''UUID_value''"
* Init システム: [https://savannah.nongnu.org/projects/sysvinit sysvinit] (cmdline: ''RFD'')
 
 
{{bc|1=
 
menuentry '[loopback]debian-live-7.8.0-amd64-xfce-desktop' {
 
set isofile='/boot/iso/debian-live-7.8.0-amd64-xfce-desktop.iso'
 
loopback loop $isofile
 
linux (loop)/live/vmlinuz boot=live config fromiso='''/dev/sdb2'''/$isofile
 
initrd (loop)/live/initrd.img
 
}
 
 
}}
 
}}
   
  +
もしくは、UUID の代わりにデバイスのラベルを使います:
{{note|{{ic|1=fromiso=/dev/disk/by-.../.../$isofile}} を使うかわりに短く {{ic|1=findiso=$isofile}} と指定してもかまいません。ただし {{ic|1=findiso=}} よりも {{ic|1=fromiso=}} を使った方が不必要なマウントをしなくなるので初期化が高速になります。}}
 
   
  +
{{hc|/mnt/boot/grub/grub.cfg|2=
==== Elementary OS ====
 
  +
# path to the partition holding ISO images (using labels)
 
  +
set imgdevpath="/dev/disk/by-label/''label_value''"
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワークあるいはインストールプログラム: ''RFD''
 
* Init システム: upstart (cmdline: ''RFD'')
 
 
{{bc|1=
 
menuentry '[loopback]elementaryos-freya-amd64.20150411' {
 
set isofile='/boot/iso/elementaryos-freya-amd64.20150411.iso'
 
loopback loop $isofile
 
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile locale='''en_US.UTF-8'''
 
initrd (loop)/casper/initrd.lz
 
}
 
 
}}
 
}}
   
  +
必要な UUID やラベルは {{ic|lsblk -f}} で確認できます。USB デバイスに Arch ISO と同一のラベルは使わないで下さい。ブートプロセスが失敗します。
==== Fedora ====
 
   
  +
次のセクションに書かれている例を見て、各 ISO イメージのブートエントリをヘッダの下に追加することで設定は完了です。
===== 標準インストールメディア =====
 
   
  +
=== ブートエントリ ===
* Initramfs フレームワーク: [https://fedoraproject.org/wiki/Dracut Dracut] (cmdline: [https://git.kernel.org/cgit/boot/dracut/dracut.git/tree/dracut.cmdline.7.asc])
 
* インストールプログラム: [https://fedoraproject.org/wiki/Anaconda Anaconda] (cmdline: [https://github.com/rhinstaller/anaconda/blob/master/docs/boot-options.rst])
 
* Init システム: [[systemd]] (cmdline: [http://www.freedesktop.org/software/systemd/man/kernel-command-line.html])
 
   
  +
ISO イメージは GRUB をインストールしたのと同じファイルシステムの {{ic|/boot-isos}} ディレクトリに保存していると仮定します。それ以外のディレクトリに保存している場合、{{ic|loopback}} コマンドを使う時に ISO ファイルのパスの前にデバイスの識別子を付ける必要があります。例: {{ic|loopback loop '''(hd1,2)'''$iso_path}}。このデバイス識別子は[[永続的なブロックデバイスの命名|永続的]]ではないため、このセクションの例では使いません。
{{bc|1=
 
menuentry '[loopback]Fedora-20-x86_64-DVD' {
 
set isofile='/boot/iso/Fedora-20-x86_64-DVD.iso'
 
loopback loop $isofile
 
linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:'''/dev/sdb2''':/$isofile
 
initrd (loop)/isolinux/initrd.img
 
}
 
}}
 
   
  +
以下のように永続的なブロックデバイスの命名を使うことができます。UUID は ISO のファイルシステムに従って置き換えてください:
===== Workstation ライブメディア =====
 
 
* Initramfs フレームワーク: [https://fedoraproject.org/wiki/Dracut Dracut] (cmdline: [https://git.kernel.org/cgit/boot/dracut/dracut.git/tree/dracut.cmdline.7.asc])
 
* ライブフレームワーク: fedora [https://fedoraproject.org/wiki/FedoraLiveCD livecd-tools] (cmdline: none)
 
* Init システム: [[systemd]] (cmdline: [http://www.freedesktop.org/software/systemd/man/kernel-command-line.html])
 
   
 
{{bc|1=
 
{{bc|1=
  +
# define globally (i.e outside any menuentry)
menuentry '[loopback]Fedora-Live-Workstation-x86_64-21-5' {
 
  +
insmod search_fs_uuid
set isofile='/boot/iso/Fedora-Live-Desktop-x86_64-21-5.iso'
 
  +
search --no-floppy --set='''isopart''' --fs-uuid ''123-456''
loopback loop $isofile
 
  +
# later use inside each menuentry instead
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 iso-scan/filename=$isofile rd.live.image
 
  +
loopback loop '''($isopart)'''$iso_path
initrd (loop)/isolinux/initrd0.img
 
}
 
 
}}
 
}}
   
  +
{{Tip|カーネルパラメータのリストは [https://docs.kernel.org/admin-guide/kernel-parameters.html kernel のコマンドラインパラメータのドキュメント] を見てください。ブートエントリのサンプルは [https://www.gnu.org/software/grub/manual/grub.html#Multi_002dboot-manual-config GRUB の上流のドキュメント] や起動したいディストリビューションのドキュメントも参照してください。}}
==== Gentoo ====
 
===== デスクトップ LiveDVD =====
 
   
  +
==== Arch Linux 月次リリース ====
* Initramfs フレームワーク: [https://wiki.gentoo.org/wiki/Genkernel genkernel] (cmdline: [https://gitweb.gentoo.org/proj/genkernel.git/tree/doc/genkernel.8.txt#n393])
 
* ライブフレームワーク: [https://gitweb.gentoo.org/proj/livecd-tools.git/ livecd-tools] (cmdline: ''RFD'')
 
* Init システム: [https://wiki.gentoo.org/wiki/Project:OpenRC OpenRC] (cmdline: ''RFD'')
 
   
  +
Arch Linux の ISO は [https://www.supergrubdisk.org/wiki/Loopback.cfg loopback.cfg] を提供しています。
{{bc|1=
 
menuentry "[loopback]livedvd-amd64-multilib-20140826" {
 
set isofile="/boot/iso/livedvd-amd64-multilib-20140826.iso"
 
loopback loop $isofile
 
linux (loop)/isolinux/gentoo root=/dev/ram0 init=/linuxrc aufs looptype=squashfs loop=/image.squashfs cdroot isoboot=$isofile vga='''791''' splash=silent,theme:default console=tty0
 
initrd (loop)/isolinux/gentoo.igz
 
}
 
}}
 
 
{{Tip|最小メディアでも上記で動作します。}}
 
 
==== GParted Live ====
 
 
* Initramfs フレームワーク: [https://anonscm.debian.org/cgit/kernel/initramfs-tools.git/ initramfs-tools] (cmdline: ''RFD'')
 
* ライブフレームワーク: [http://live.debian.net/ Debian Live] (cmdline: [http://manpages.debian.org/cgi-bin/man.cgi?query=live-boot&apropos=0&sektion=7&manpath=Debian+unstable+sid&format=html&locale=en])
 
* Init システム: [https://savannah.nongnu.org/projects/sysvinit sysvinit] (cmdline: ''RFD'')
 
   
 
{{bc|1=
 
{{bc|1=
menuentry "[loopback]gparted-live-0.22.0-2-'''amd64'''" {
+
menuentry '[loopback]archlinux-2023.10.14-x86_64.iso' {
set isofile="/boot/iso/gparted-live-0.22.0-2-'''amd64'''.iso"
+
set iso_path='/boot-isos/archlinux-2023.10.14-x86_64.iso'
  +
export iso_path
loopback loop $isofile
 
  +
search --set=root --file "$iso_path"
linux (loop)/live/vmlinuz boot=live union=overlay username=user config components quiet noswap noeject toram=filesystem.squashfs ip= nosplash findiso=$isofile
 
  +
loopback loop "$iso_path"
initrd (loop)/live/initrd.img
 
  +
root=(loop)
  +
configfile /boot/grub/loopback.cfg
  +
loopback --delete loop
 
}
 
}
 
}}
 
}}
   
  +
[[archiso]] も参照。
==== Kali Linux ====
 
 
* Initramfs フレームワーク: [https://anonscm.debian.org/cgit/kernel/initramfs-tools.git/ initramfs-tools] (cmdline: ''RFD'')
 
* ライブフレームワーク: [http://live.debian.net/ Debian Live] (cmdline: [http://manpages.debian.org/cgi-bin/man.cgi?query=live-boot&apropos=0&sektion=7&manpath=Debian+unstable+sid&format=html&locale=en])
 
* Init システム: [https://savannah.nongnu.org/projects/sysvinit sysvinit] (cmdline: ''RFD'')
 
 
{{bc|1=
 
menuentry "[loopback]kali-linux-1.0.7-'''amd64'''" {
 
set isofile='/boot/iso/kali-linux-1.0.7-'''amd64'''.iso'
 
loopback loop $isofile
 
linux (loop)/live/vmlinuz boot=live findiso=$isofile noconfig=sudo username=root hostname=kali
 
initrd (loop)/live/initrd.img
 
}
 
}}
 
   
==== Knoppix ====
+
==== MemTest86+ ====
   
  +
[[ストレステスト#MemTest86+|Memtest86+]] は月次リリースの ISO に含まれています。
* Initramfs フレームワーク: ''Unknown''
 
* ライブフレームワーク: ''Unknown''
 
* Init システム: ''Unknown''
 
   
 
{{bc|1=
 
{{bc|1=
menuentry "[loopback]KNOPPIX_V7.4.2DVD-2014-09-28-EN" {
+
menuentry '[loopback]archlinux-2023.03.01-x86_64.iso MemTest86+' {
set isofile="/boot/iso/KNOPPIX_V7.4.2DVD-2014-09-28-EN.iso"
+
set iso_path='/boot-isos/archlinux-2023.03.01-x86_64.iso'
loopback loop $isofile
+
loopback loop $iso_path
  +
linux (loop)/boot/memtest86+/memtest.efi
linux (loop)/boot/isolinux/linux bootfrom=/mnt-iso/$isofile acpi=off keyboard=us lang=us
 
initrd (loop)/boot/isolinux/minirt.gz
 
 
}
 
}
 
}}
 
}}
   
==== Linux Mint ====
+
==== Archboot ====
   
  +
[https://archboot.com Archboot Homepage] を見てください。
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワークあるいはインストールプログラム: ''RFD''
 
* Init システム: ''RFD''
 
   
 
{{bc|1=
 
{{bc|1=
menuentry "[loopback]linuxmint-201403-cinnamon-dvd-'''32'''bit" {
+
menuentry '[loopback]archlinux-2014.11-1-archboot' {
set isofile="/boot/iso/linuxmint-201403-cinnamon-dvd-'''32'''bit.iso"
+
set iso_path='/boot-isos/archlinux-2014.11-1-archboot.iso'
loopback loop $isofile
+
loopback loop $iso_path
  +
linux (loop)/boot/vmlinuz_'''x86_64''' iso_loop_dev=$imgdevpath iso_loop_path=$iso_path
linux (loop)/live/vmlinuz isofrom='''/dev/sdb2'''/iso/$isofile boot=live live-config live-media-path=/live quiet splash noeject noprompt
 
initrd (loop)/live/initrd.img
+
initrd (loop)/boot/initramfs_'''x86_64'''.img
}
 
}}
 
上記の設定で起動したときに '/live/vmlinuz not found' というエラーメッセージが表示される場合、以下を試して下さい:
 
 
{{bc|1=
 
menuentry "Linux Mint 17.2 Cinnamon LTS RC (x64)" {
 
set iso=/boot/iso/linuxmint-17.2-cinnamon-64bit.iso
 
loopback loop $iso
 
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$iso noeject noprompt
 
initrd (loop)/casper/initrd.lz
 
}
 
}}
 
 
==== openSUSE ====
 
 
===== 標準インストールメディア =====
 
 
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワークあるいはインストールプログラム: Kiwi? ''RFD''
 
* Init システム: ''RFD''
 
 
{{bc|1=
 
menuentry '[loopback]openSUSE-13.1-DVD-x86_64' {
 
set isofile='/boot/iso/openSUSE-13.1-DVD-x86_64.iso'
 
loopback loop $isofile
 
linux (loop)/boot/x86_64/loader/linux install=hd:$isofile
 
initrd (loop)/boot/x86_64/loader/initrd
 
}
 
}}
 
 
===== デスクトップライブメディア =====
 
 
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワークあるいはインストールプログラム: Kiwi? ''RFD''
 
* Init システム: ''RFD''
 
 
{{bc|1=
 
menuentry '[loopback]openSUSE-13.1-KDE-Live-x86_64' {
 
set isofile='/boot/iso/openSUSE-13.1-KDE-Live-x86_64.iso'
 
loopback loop $isofile
 
linux (loop)/boot/x86_64/loader/linux isofrom_device=$imgdevpath isofrom_system=$isofile LANG='''en_US.UTF-8'''
 
initrd (loop)/boot/x86_64/loader/initrd
 
}
 
}}
 
 
==== Parabola GNU/Linux-libre ====
 
 
{{Tip|32ビット環境を起動したい場合、{{ic|x86_64}} を {{ic|i686}} に置き換えて下さい。}}
 
 
{{bc|1=
 
menuentry '[loopback]parabola-2015.07.01-dual.iso' {
 
set isofile='/boot/iso/parabola-2015.07.01-dual.iso'
 
loopback loop $isofile
 
linux (loop)/parabola/boot/'''x86_64'''/vmlinuz parabolaisolabel=PARA_'''201507''' img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
 
initrd (loop)/parabola/boot/'''x86_64'''/parabolaiso.img
 
}
 
}}
 
 
{{Tip|新しいリリースを使う場合、{{ic|1=parabolaisolabel=}} の後ろのラベル文字列は編集する必要があります。}}
 
 
==== Sabayon ====
 
 
* Initramfs フレームワーク: genkernel? ''RFD''
 
* ライブフレームワークあるいはインストールプログラム: ''RFD''
 
* Init システム: openrc? ''RFD''
 
 
{{bc|1=
 
menuentry '[loopback]Sabayon_Linux_14.05_amd64_KDE' {
 
set isofile='/boot/iso/Sabayon_Linux_14.05_amd64_KDE.iso'
 
loopback loop $isofile
 
linux (loop)/boot/sabayon root=/dev/ram0 aufs cdroot locale='''en_US''' loop=/livecd.squashfs looptype=squashfs isoboot=$isofile
 
initrd (loop)/boot/sabayon.igz
 
}
 
}}
 
 
==== Slackware Linux ====
 
 
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワークあるいはインストールプログラム: ''RFD''
 
* Init システム: ''RFD''
 
 
{{bc|1=
 
menuentry '[loopback]slackware64-14.1-install-dvd' {
 
set isofile='/boot/iso/slackware64-14.1-install-dvd.iso'
 
loopback loop $isofile
 
linux (loop)/kernels/huge.s/bzImage printk.time=0
 
initrd (loop)/isolinux/initrd.img
 
}
 
}}
 
 
==== SystemRescueCD ====
 
 
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワークあるいはインストールプログラム: ''RFD''
 
* Init システム: ''RFD''
 
 
{{note|Replace {{ic|64}} with {{ic|32}} if you want to boot into a 32-bit system.}}
 
{{bc|1=
 
menuentry '[loopback]systemrescuecd-x86-4.5.2' {
 
set isofile='/boot/iso/systemrescuecd-x86-4.5.2.iso'
 
loopback loop $isofile
 
linux (loop)/isolinux/rescue'''64''' isoloop=$isofile
 
initrd (loop)/isolinux/initram.igz
 
}
 
}}
 
 
==== Ubuntu ====
 
 
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワークあるいはインストールプログラム: ''RFD''
 
* Init システム: upstart (cmdline: ''RFD'')
 
 
{{bc|1=
 
menuentry '[loopback]ubuntu-14.04.1-desktop-amd64' {
 
set isofile='/boot/iso/ubuntu-14.04.1-desktop-amd64.iso'
 
loopback loop $isofile
 
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile locale='''en_US.UTF-8'''
 
initrd (loop)/casper/initrd.lz
 
}
 
}}
 
 
==== Slitaz ====
 
 
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワーク: ''RFD''
 
* Init システム: ''RFD''
 
 
まず、slitaz の iso をダウンロードしてから、どこかに展開してください (この例では /dev/sda3 の /live/slitaz-4.0)。
 
 
{{bc|1=
 
menuentry 'slitaz-4.0 core' {
 
set dir='/live/slitaz-4.0'
 
set root=(hd0,msdos3)
 
set lang='pt_BR'
 
set kmap='br-abnt2'
 
linux ($root)/$dir/bzImage lang=$lang kmap=$kmap rw root=/dev/null vga=normal autologin
 
initrd ($root)/$dir/rootfs4.gz ($root)/$dir/rootfs3.gz ($root)/$dir/rootfs2.gz ($root)/$dir/rootfs1.gz
 
}
 
}}
 
 
==== Slax ====
 
 
* Initramfs フレームワーク: ''RFD''
 
* ライブフレームワーク: ''RFD''
 
* Init システム: ''RFD''
 
 
まず、Slax の zip (USB 用) をダウンロードして、どこかに展開してください (この例では /dev/sda3 の /live/slax)。
 
 
{{bc|1=
 
menuentry 'slax' {
 
set dir=/live/slax
 
set root=(hd0,msdos3)
 
linux $dir/boot/vmlinuz from=$dir vga=normal load_ramdisk=1 prompt_ramdisk=0 printk.time=0 slax.flags=perch,xmode
 
initrd $dir/boot/initrfs.img
 
}
 
}}
 
 
==== Tails ====
 
 
* Initramfs フレームワーク: ''Unknown''
 
* ライブフレームワーク: ''Unknown''
 
* Init システム: ''Unknown''
 
 
Tails の iso をダウンロードして整合性を確認してください。
 
 
{{bc|1=
 
menuentry "[loopback]tails-i386-1.5.iso" {
 
set isofile='/boot/iso/tails-i386-1.5.iso'
 
loopback loop $isofile
 
linux (loop)/live/vmlinuz2 boot=live config findiso=${isofile} live-media=removable apparmor=1 security=apparmor nopersistent noprompt timezone=Etc/UTC block.events_dfl_poll_msecs=1000 noautologin module=Tails
 
initrd (loop)/live/initrd2.img
 
}
 
}}
 
 
{{Warning|上記の方法で起動した場合、緊急時のメモリ消去ができません。}}
 
 
iso ファイルがリムーバルメディア上にない場合は {{ic|1=live-media=removable}} オプションを削除してください。
 
 
== Windows のチェインロード ==
 
 
Windows のインストールディスクをループバックするのは難易度がとても高くなります。単一かつ統一されたパーティションが含まれた USB ドライブから様々なプラットフォームをインストールできるようにする解決方法は、ブータブルな Windows USB ドライブを使用して、Windows のブートローダーを GRUB で置き換えることです。
 
 
GRUB をインストールする前に、Windows のブートローダーの名前を変更するか移動してください。デフォルトの ''.efi'' 実行ファイルとして存在し、64ビット環境なら {{ic|''(USB)''/efi/boot/bootx64.efi}} にあります。そこに GRUB をインストールして、GRUB がデフォルトの実行ファイルとして使われるようにしてください。
 
 
名前を変えた Windows のブートローダーに GRUB からチェインロードして、上述の ''.iso'' ファイルをループバックするように GRUB を設定します。
 
 
{{bc|1=
 
menuentry '[chain]en_windows_8.1_professional_x64' {
 
insmod chain
 
chainloader /efi/boot/bootx64.efi.windows
 
 
}
 
}
 
}}
 
}}
557行目: 228行目:
 
== Syslinux と memdisk を使う ==
 
== Syslinux と memdisk を使う ==
   
[http://www.syslinux.org/wiki/index.php/MEMDISK memdisk] モジュールを使うことで、ISO イメージをメモリにロードして、ブートローダーをロードすることができます。イメージファイルをロードしてオペレーティングシステムを実行できるのに十分なメモリ容量が USB ドライブを起動するシステムに存在することを確認してください。
+
[https://wiki.syslinux.org/wiki/index.php/MEMDISK memdisk] モジュールを使うことで、ISO イメージをメモリにロードして、ブートローダーをロードすることができます。イメージファイルをロードしてオペレーティングシステムを実行できるのに十分なメモリ容量が USB ドライブを起動するシステムに存在することを確認してください。
   
 
=== 準備 ===
 
=== 準備 ===
580行目: 251行目:
 
}}
 
}}
   
設定オプションについて詳しくは [http://www.syslinux.org/wiki/index.php/MEMDISK memdisk on Syslinux wiki] を見て下さい。
+
設定オプションについて詳しくは [https://wiki.syslinux.org/wiki/index.php/MEMDISK memdisk on Syslinux wiki] を見て下さい。
   
  +
== 自動化されたツール ==
=== 32ビット環境の注意事項 ===
 
   
  +
* {{App|GRUB2 Live ISO Multiboot (GLIM)|GNU/Linux ディストリビューションの ISO がいくつか保存されている VFAT の USB メモリスティックをマルチブート USB ドライブにするための GRUB 設定ファイル一式。|https://github.com/thias/glim}}
128MiB 以上のイメージから32ビット環境を起動する場合、vmalloc の最大メモリ使用量を増やす必要があります。カーネルパラメータに {{ic|1=vmalloc=''value''M}} を追加することで増やせます。{{ic|''value''}} は ISO イメージの容量も大きい値を MiB で指定してください [http://www.syslinux.org/wiki/index.php/MEMDISK#-_memdiskfind_in_combination_with_phram_and_mtdblock]。
 
  +
* {{App|liveusb-builder|GNU/Linux ディストリビューションのマルチブート USB スティックを作成するスクリプトスイート。|https://github.com/mytbk/liveusb-builder|{{AUR|liveusb-builder-git}}}}
 
  +
* {{App|MultiBootUSB|USB スティックに複数のライブ Linux イメージをインストール/削除できる、CLI と GUI のクロスプラットフォームの Python ソフトウェア。|https://github.com/mbusb/multibootusb|{{AUR|multibootusb}}}}
例えば [https://www.archlinuxjp.org/download/ Arch インストール ISO] から32ビット環境を起動する場合、{{ic|Boot Arch Linux (i686)}} エントリの上で {{ic|Tab}} キーを押して末尾に {{ic|1=vmalloc=768M}} を追加してください。この設定をしないと起動時に以下のエラーが表示されます:
 
  +
* {{App|[[Ventoy]]|ISO/WIM/IMG/VHD(x)/EFI ファイルの起動可能な USB ドライブを作成するためのオープンソースなツール。ventoy では、ディスクを何回もフォーマットする必要はありません。ただ ISO/WIM/IMG/VHD(x)EFI ファイルを USB ドライブにコピーするだけで、それらを直接起動できます。|https://www.ventoy.net/|{{AUR|ventoy-bin}}}}
 
modprobe: ERROR: could not insert 'phram': Input/output error
 
   
 
== 参照 ==
 
== 参照 ==
595行目: 265行目:
 
** https://help.ubuntu.com/community/Grub2/ISOBoot/Examples
 
** https://help.ubuntu.com/community/Grub2/ISOBoot/Examples
 
** https://help.ubuntu.com/community/Grub2/ISOBoot
 
** https://help.ubuntu.com/community/Grub2/ISOBoot
  +
** [https://github.com/thias/glim GRUB Live ISO Multiboot] - ISO イメージを起動するための GRUB 設定
 
* Syslinux:
 
* Syslinux:
** [http://www.syslinux.org/wiki/index.php/Boot_an_Iso_image Boot an ISO image]
+
** [https://wiki.syslinux.org/wiki/index.php?title=Boot_an_Iso_image Boot an ISO image]
  +
  +
{{TranslationStatus|Multiboot USB drive|2023-10-14|789903}}

2023年10月14日 (土) 19:59時点における最新版

関連記事

マルチブート USB フラッシュドライブを使うことで単一のドライブから複数の ISO ファイルを起動することができます。ISO ファイルをデバイスにコピーすることで ISO を展開することなく直接起動することが可能です。複数の方法が存在しますが、全ての ISO イメージが使えるというわけではありません。

GRUB とループバックデバイスを使う

利点:

  • 必要なのは単一のパーティションのみ
  • 全ての ISO ファイルを単一のディレクトリに保存できる
  • ISO の追加や削除が簡単

欠点:

  • 対応していない ISO イメージもある
  • ISO ファイルのオリジナルのブートメニューは表示されない
  • 動作するブートエントリを見つけるのが難しい

準備

USB ドライブに最低でも一つのパーティションを作成して GRUB が対応しているファイルシステムを作成してください。パーティショニングファイルシステム#デバイスのフォーマット を参照。ドライブに保存する ISO ファイルの合計容量にあわせて容量を決めて、ブートローダーのための容量を残しておいて下さい。

GRUB のインストール

シンプルなインストール

USB ドライブ上のファイルシステムをマウント:

# mount /dev/sdXY /mnt

/boot ディレクトリを作成:

# mkdir /mnt/boot

USB ドライブに GRUB をインストール:

# grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdX

UEFI モードで ISO を起動したい場合、UEFI ターゲットで grub をインストールする必要があります:

# grub-install --target=x86_64-efi --removable --boot-directory=/mnt/boot --efi-directory=/mnt

UEFI を使う場合、パーティションは MBR パーティションテーブルの最初のパーティションにして FAT32 でフォーマットしてください。

UEFI GPT + BIOS GPT/MBR のハイブリッドブート

どこでも起動できるユニバーサル USB キーを作成したいときに有用な構成です。まず最初にデバイスに GPT パーティションテーブルを作成する必要があります。最低でも以下の3つのパーティションが必要です:

  1. BIOS ブートパーティション (gdisk タイプコード EF02)。このパーティションのサイズは 1 MiB でなければなりません。
  2. EFI システムパーティション (gdisk タイプコード EF00FAT32 ファイルシステム)。このパーティションは 50 MiB まで小さくできます。
  3. データパーティション (GRUB によってサポートされているファイルシステムを使用)。デバイスの残りの空き領域をこのパーティションに利用できます。

次に、ハイブリッド MBR パーティションテーブルを作成しなければなりません。これがないと、BIOS MBR ベースのシステムは起動しません。システムが、存在すると期待されているパーティションを見つけられません。

gdisk を使ってハイブリッド MBR パーティションテーブルを作成する例:

# gdisk /dev/sdX
Command (? for help): r
Recovery/transformation command (? for help): h

WARNING! Hybrid MBRs are flaky and dangerous! If you decide not to use one,
just hit the Enter key at the below prompt and your MBR partition table will
be untouched.

Type from one to three GPT partition numbers, separated by spaces, to be added to the hybrid MBR, in sequence: 1 2 3
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N

Creating entry for GPT partition #1 (MBR partition #1)
Enter an MBR hex code (default EF):
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #2 (MBR partition #2)
Enter an MBR hex code (default EF):
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #3 (MBR partition #3)
Enter an MBR hex code (default 83):
Set the bootable flag? (Y/N): Y

Recovery/transformation command (? for help): x
Expert command (? for help): h
Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y

パーティションをフォーマットすることを忘れずに:

# mkfs.fat -F32 /dev/sdX2
# mkfs.ext4 /dev/sdX3

これで、GRUB をインストールして EFI + GPT と BIOS + GPT/MBR の両方に対応させることができます。GRUB の設定 (--boot-directory) は同じ場所に保存してください。

まず、USB ドライブの EFI システムパーティションとデータパーティションをマウントする必要があります。

例:

# mount /dev/sdX3 /mnt
# mkdir /mnt/boot /mnt/efi
# mount /dev/sdX2 /mnt/efi

そして、以下のように UEFI 用の GRUB をインストールします:

ほとんどの場合、EFI_MOUNTPOINT は、マウントされた USB ディスク上の /mnt/efi ディレクトリに対応します。 DATA_MOUNTPOINT はデータパーティションがマウントされる場所です。この例では、sdX3 のマウントポイントである /mnt になります。

# grub-install --target=x86_64-efi --recheck --removable --efi-directory=/EFI_MOUNTPOINT --boot-directory=/DATA_MOUNTPOINT/boot

それから BIOS 用にインストール:

# grub-install --target=i386-pc --recheck --boot-directory=/DATA_MOUNTPOINT/boot /dev/sdX

さらにフォールバックとして、MBR で起動可能なデータパーティションに GRUB をインストールすることもできます:

# grub-install --target=i386-pc --recheck --boot-directory=/DATA_MOUNTPOINT/boot /dev/sdX3

GRUB の設定

テンプレートを使う

ドライブに特定の ISO ファイルやフォルダが存在する場合にのみ、他のブートエントリをロードできるようにする grub.cfg と事前に生成済みの GRUB 設定ファイルを提供する git プロジェクトがいくつか存在します。

手動設定

マルチブート USB ドライブを作るときは grub.cfg は自動で生成するよりも手動で編集した方が楽です。もしくは、/etc/grub.d/40_custom/mnt/boot/grub/custom.cfg に変更を加えてから grub-mkconfig/mnt/boot/grub/grub.cfg を生成してください。

イメージファイルが存在する USB ドライブのパーティションを識別するのに /dev/sdxY よりも永続的な名前を使うことが推奨されるので、利便性のため値を保持する変数を定義します。ISO イメージが grub と同一のパーティション上にある場合、起動時に UUID を読み取るように以下を使って下さい:

/mnt/boot/grub/grub.cfg
# path to the partition holding ISO images (using UUID)
probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"

または UUID を明示的に指定:

/mnt/boot/grub/grub.cfg
# path to the partition holding ISO images (using UUID)
set imgdevpath="/dev/disk/by-uuid/UUID_value"

もしくは、UUID の代わりにデバイスのラベルを使います:

/mnt/boot/grub/grub.cfg
# path to the partition holding ISO images (using labels)
set imgdevpath="/dev/disk/by-label/label_value"

必要な UUID やラベルは lsblk -f で確認できます。USB デバイスに Arch ISO と同一のラベルは使わないで下さい。ブートプロセスが失敗します。

次のセクションに書かれている例を見て、各 ISO イメージのブートエントリをヘッダの下に追加することで設定は完了です。

ブートエントリ

ISO イメージは GRUB をインストールしたのと同じファイルシステムの /boot-isos ディレクトリに保存していると仮定します。それ以外のディレクトリに保存している場合、loopback コマンドを使う時に ISO ファイルのパスの前にデバイスの識別子を付ける必要があります。例: loopback loop (hd1,2)$iso_path。このデバイス識別子は永続的ではないため、このセクションの例では使いません。

以下のように永続的なブロックデバイスの命名を使うことができます。UUID は ISO のファイルシステムに従って置き換えてください:

# define globally (i.e outside any menuentry)
insmod search_fs_uuid
search --no-floppy --set=isopart --fs-uuid 123-456
# later use inside each menuentry instead
loopback loop ($isopart)$iso_path
ヒント: カーネルパラメータのリストは kernel のコマンドラインパラメータのドキュメント を見てください。ブートエントリのサンプルは GRUB の上流のドキュメント や起動したいディストリビューションのドキュメントも参照してください。

Arch Linux 月次リリース

Arch Linux の ISO は loopback.cfg を提供しています。

menuentry '[loopback]archlinux-2023.10.14-x86_64.iso' {
	set iso_path='/boot-isos/archlinux-2023.10.14-x86_64.iso'
	export iso_path
	search --set=root --file "$iso_path"
	loopback loop "$iso_path"
	root=(loop)
	configfile /boot/grub/loopback.cfg
	loopback --delete loop
}

archiso も参照。

MemTest86+

Memtest86+ は月次リリースの ISO に含まれています。

menuentry '[loopback]archlinux-2023.03.01-x86_64.iso MemTest86+' {
	set iso_path='/boot-isos/archlinux-2023.03.01-x86_64.iso'
	loopback loop $iso_path
	linux (loop)/boot/memtest86+/memtest.efi
}

Archboot

Archboot Homepage を見てください。

menuentry '[loopback]archlinux-2014.11-1-archboot' {
	set iso_path='/boot-isos/archlinux-2014.11-1-archboot.iso'
	loopback loop $iso_path
	linux (loop)/boot/vmlinuz_x86_64 iso_loop_dev=$imgdevpath iso_loop_path=$iso_path
	initrd (loop)/boot/initramfs_x86_64.img
}

Syslinux と memdisk を使う

memdisk モジュールを使うことで、ISO イメージをメモリにロードして、ブートローダーをロードすることができます。イメージファイルをロードしてオペレーティングシステムを実行できるのに十分なメモリ容量が USB ドライブを起動するシステムに存在することを確認してください。

準備

USB ドライブを適切にパーティショニングして Syslinux によってサポートされている fat32 や ext4 などのファイルシステムでパーティションを作成してください。それから、Syslinux をパーティションにインストールします。Syslinux#インストール を参照。

memdisk モジュールのインストール

Syslinux のインストール時に memdisk モジュールはインストールされてないため、手動でインストールする必要があります。Syslinux をインストールしたパーティションを /mnt/ にマウントして memdisk モジュールを Syslinux がインストールされているディレクトリにコピーしてください:

# cp /usr/lib/syslinux/bios/memdisk /mnt/boot/syslinux/

設定

USB ドライブに ISO ファイルをコピーした後、Syslinux の設定ファイルを編集して ISO イメージのメニューエントリを作成してください。ベーシックなエントリは以下のようになります:

boot/syslinux/syslinux.cfg
LABEL some_label
    LINUX memdisk
    INITRD /path/to/image.iso
    APPEND iso

設定オプションについて詳しくは memdisk on Syslinux wiki を見て下さい。

自動化されたツール

  • GRUB2 Live ISO Multiboot (GLIM) — GNU/Linux ディストリビューションの ISO がいくつか保存されている VFAT の USB メモリスティックをマルチブート USB ドライブにするための GRUB 設定ファイル一式。
https://github.com/thias/glim || パッケージが存在しないか AUR で検索
  • liveusb-builder — GNU/Linux ディストリビューションのマルチブート USB スティックを作成するスクリプトスイート。
https://github.com/mytbk/liveusb-builder || liveusb-builder-gitAUR
  • MultiBootUSB — USB スティックに複数のライブ Linux イメージをインストール/削除できる、CLI と GUI のクロスプラットフォームの Python ソフトウェア。
https://github.com/mbusb/multibootusb || multibootusbAUR
  • Ventoy — ISO/WIM/IMG/VHD(x)/EFI ファイルの起動可能な USB ドライブを作成するためのオープンソースなツール。ventoy では、ディスクを何回もフォーマットする必要はありません。ただ ISO/WIM/IMG/VHD(x)EFI ファイルを USB ドライブにコピーするだけで、それらを直接起動できます。
https://www.ventoy.net/ || ventoy-binAUR

参照

翻訳ステータス: このページは en:Multiboot USB drive の翻訳バージョンです。最後の翻訳日は 2023-10-14 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。