マルチブート USB ドライブ

提供: ArchWiki
移動先: 案内検索

関連記事

マルチブート 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 --efi-directory /mnt --boot-directory=/mnt/boot --removable

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

GRUB の設定

マルチブート 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/iso/ ディレクトリに保存します。それ以外のディレクトリに保存する場合、loopback コマンドを使う時に ISO ファイルのパスの前にデバイスの識別子を付ける必要があります。例: loopback loop (hd1,2)$isofile。このデバイス識別子は永続的ではないため、このセクションの例では使いません。

以下のように永続的なブロックデバイスの命名を使うことができます:

# 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
ヒント: カーネルパラメータのリストは https://www.kernel.org/doc/Documentation/kernel-parameters.txt を見て下さい (完全ではありません)。

Alt Linux

  • Initramfs フレームワーク: ???
  • ライブフレームワーク: ???
  • Init システム: ???
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

ヒント: 32ビット環境を起動したい場合、x86_64i686 に置き換えて下さい。
月次リリース
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
}
ノート: archiso v23 (月次リリース 2015.10.01) 現在、GRUB とループバックデバイスを使う場合 archisodevice=/dev/loop0 パラメータは不要です。
archboot
  • Initramfs フレームワーク: mkinitcpio (cmdline: [4])
  • ライブフレームワーク: archboot (cmdline: none? RFD)
  • Init システム: systemd (cmdline: [5])
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
}

CentOS

標準インストールメディア
  • Initramfs フレームワーク: Dracut (cmdline: [6])
  • インストールプログラム: Anaconda (cmdline: [7])
  • Init システム: systemd (cmdline: [8])
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
}
ヒント: インストールイメージの場所を示す stage2 ブートパラメータ /dev/sdb2 は Anaconda によって使われます。fstab の1番目のフィールド (fs_spec) と同じように、以下のどれかに置き換えられます (例: linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:LABEL=MYUSBSTICK:/$isofile):
  • /dev/sdxY
  • LABEL=MYUSBSTICK
  • UUID=00000000-0000-0000-0000-0000deadbeef
特殊なディスクラベル (例: GPT) を使用する場合、PARTUUID=PARTLABEL= を使うことも可能です。
デスクトップライブメディア
  • Initramfs フレームワーク: Dracut (cmdline: [9])
  • ライブフレームワーク: fedora livecd-tools (cmdline: none)
  • Init システム: systemd (cmdline: [10])
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
}

Clonezilla Live

ヒント: 2014.01.05 から [11], Arch Linux の月次リリースには clonezilla が含まれています。
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
}

Debian

標準インストールメディア
  • Initramfs フレームワーク: initramfs-tools (cmdline: RFD)
  • インストールプログラム: debian-installer (cmdline: exists but missing online documentation)
  • Init システム: sysvinit (cmdline: RFD)
ヒント: 光学メディア以外の標準インストールメディア (例: USB スティックや HDD) から debian をインストールするには、インストールメディアのデフォルトの initramfs ((loop)/install.amd/initrd.gz) ではない別の initramfs を使用する必要があります。デフォルトの initramfs で起動すると、インストーラーがインストールに使用する iso イメージを発見・マウントすることができません。公式のミラーサイト からハードディスクインストール用の initramfs をダウンロードして、イメージファイルと同じディレクトリに配置してください。そして適当な名前を付けて下さい (下の例では debian-7.8.0-amd64-DVD-1.hdd.initrd.gz)。
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
}
ライブインストールメディア
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
}
ノート: fromiso=/dev/disk/by-.../.../$isofile を使うかわりに短く findiso=$isofile と指定してもかまいません。ただし findiso= よりも fromiso= を使った方が不必要なマウントをしなくなるので初期化が高速になります。

Elementary OS

  • Initramfs フレームワーク: RFD
  • ライブフレームワークあるいはインストールプログラム: RFD
  • Init システム: upstart (cmdline: RFD)
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
}

Fedora

標準インストールメディア
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
}
Workstation ライブメディア
  • Initramfs フレームワーク: Dracut (cmdline: [17])
  • ライブフレームワーク: fedora livecd-tools (cmdline: none)
  • Init システム: systemd (cmdline: [18])
menuentry '[loopback]Fedora-Live-Workstation-x86_64-21-5' {
	set isofile='/boot/iso/Fedora-Live-Desktop-x86_64-21-5.iso'
	loopback loop $isofile
	linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 iso-scan/filename=$isofile rd.live.image
	initrd (loop)/isolinux/initrd0.img
}

Gentoo

デスクトップ LiveDVD
  • Initramfs フレームワーク: genkernel (cmdline: [19])
  • ライブフレームワーク: livecd-tools (cmdline: RFD)
  • Init システム: OpenRC (cmdline: RFD)
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 
}
ヒント: 最小メディアでも上記で動作します。

GParted Live

menuentry "[loopback]gparted-live-0.22.0-2-amd64" {
	set isofile="/boot/iso/gparted-live-0.22.0-2-amd64.iso"
	loopback loop $isofile
	linux (loop)/live/vmlinuz boot=live union=overlay username=user config components quiet noswap noeject toram=filesystem.squashfs ip=  nosplash findiso=$isofile
	initrd (loop)/live/initrd.img
}

Kali Linux

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

  • Initramfs フレームワーク: Unknown
  • ライブフレームワーク: Unknown
  • Init システム: Unknown
menuentry "[loopback]KNOPPIX_V7.4.2DVD-2014-09-28-EN" {
        set isofile="/boot/iso/KNOPPIX_V7.4.2DVD-2014-09-28-EN.iso"
        loopback loop $isofile
        linux (loop)/boot/isolinux/linux bootfrom=/mnt-iso/$isofile acpi=off keyboard=us lang=us
        initrd (loop)/boot/isolinux/minirt.gz
}

Linux Mint

  • Initramfs フレームワーク: RFD
  • ライブフレームワークあるいはインストールプログラム: RFD
  • Init システム: RFD
menuentry "[loopback]linuxmint-201403-cinnamon-dvd-32bit" {
	set isofile="/boot/iso/linuxmint-201403-cinnamon-dvd-32bit.iso"
	loopback loop $isofile
	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
}

上記の設定で起動したときに '/live/vmlinuz not found' というエラーメッセージが表示される場合、以下を試して下さい:

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
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
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

ヒント: 32ビット環境を起動したい場合、x86_64i686 に置き換えて下さい。
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
}
ヒント: 新しいリリースを使う場合、parabolaisolabel= の後ろのラベル文字列は編集する必要があります。

Sabayon

  • Initramfs フレームワーク: genkernel? RFD
  • ライブフレームワークあるいはインストールプログラム: RFD
  • Init システム: openrc? RFD
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
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
ノート: Replace 64 with 32 if you want to boot into a 32-bit system.
menuentry '[loopback]systemrescuecd-x86-4.5.2' {
	set isofile='/boot/iso/systemrescuecd-x86-4.5.2.iso'
	loopback loop $isofile
	linux (loop)/isolinux/rescue64 isoloop=$isofile
	initrd (loop)/isolinux/initram.igz
}

Ubuntu

  • Initramfs フレームワーク: RFD
  • ライブフレームワークあるいはインストールプログラム: RFD
  • Init システム: upstart (cmdline: RFD)
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)。

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)。

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 をダウンロードして整合性を確認してください。

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
}
警告: 上記の方法で起動した場合、緊急時のメモリ消去ができません。

iso ファイルがリムーバルメディア上にない場合は live-media=removable オプションを削除してください。

Windows のチェインロード

Windows のインストールディスクをループバックするのは難易度がとても高くなります。単一かつ統一されたパーティションが含まれた USB ドライブから様々なプラットフォームをインストールできるようにする解決方法は、ブータブルな Windows USB ドライブを使用して、Windows のブートローダーを GRUB で置き換えることです。

GRUB をインストールする前に、Windows のブートローダーの名前を変更するか移動してください。デフォルトの .efi 実行ファイルとして存在し、64ビット環境なら (USB)/efi/boot/bootx64.efi にあります。そこに GRUB をインストールして、GRUB がデフォルトの実行ファイルとして使われるようにしてください。

名前を変えた Windows のブートローダーに GRUB からチェインロードして、上述の .iso ファイルをループバックするように GRUB を設定します。

menuentry '[chain]en_windows_8.1_professional_x64' {
	insmod chain
        chainloader /efi/boot/bootx64.efi.windows
}

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 を見て下さい。

32ビット環境の注意事項

128MiB 以上のイメージから32ビット環境を起動する場合、vmalloc の最大メモリ使用量を増やす必要があります。カーネルパラメータに vmalloc=valueM を追加することで増やせます。value は ISO イメージの容量も大きい値を MiB で指定してください [22]

例えば Arch インストール ISO から32ビット環境を起動する場合、Boot Arch Linux (i686) エントリの上で Tab キーを押して末尾に vmalloc=768M を追加してください。この設定をしないと起動時に以下のエラーが表示されます:

modprobe: ERROR: could not insert 'phram': Input/output error

参照