マルチブート USB ドライブ
マルチブート USB フラッシュドライブを使うことで単一のドライブから複数の ISO ファイルを起動することができます。ISO ファイルをデバイスにコピーすることで ISO を展開することなく直接起動することが可能です。複数の方法が存在しますが、全ての ISO イメージが使えるというわけではありません。
目次
- 1 GRUB とループバックデバイスを使う
- 1.1 準備
- 1.2 GRUB のインストール
- 1.3 GRUB の設定
- 1.4 ブートエントリ
- 1.4.1 Alt Linux
- 1.4.2 Arch Linux
- 1.4.3 CentOS
- 1.4.4 Clonezilla Live
- 1.4.5 Debian
- 1.4.6 Elementary OS
- 1.4.7 Fedora
- 1.4.8 Gentoo
- 1.4.9 GParted Live
- 1.4.10 Kali Linux
- 1.4.11 Knoppix
- 1.4.12 Linux Mint
- 1.4.13 openSUSE
- 1.4.14 Parabola GNU/Linux-libre
- 1.4.15 Sabayon
- 1.4.16 Slackware Linux
- 1.4.17 SystemRescueCD
- 1.4.18 Ubuntu
- 1.4.19 Slitaz
- 1.4.20 Slax
- 1.4.21 Tails
- 2 Windows のチェインロード
- 3 Syslinux と memdisk を使う
- 4 参照
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
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
月次リリース
- Initramfs フレームワーク: mkinitcpio (cmdline: [1])
- ライブフレームワーク: archiso (cmdline: [2])
- Init システム: systemd (cmdline: [3])
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 }
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 }
デスクトップライブメディア
- 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
- Initramfs フレームワーク: initramfs-tools (cmdline: RFD)
- ライブフレームワーク: Debian Live (cmdline: [12])
- Init システム: sysvinit (cmdline: RFD)
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)
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 }
ライブインストールメディア
- Initramfs フレームワーク: initramfs-tools (cmdline: RFD)
- ライブフレームワーク: Debian Live (cmdline: [13])
- Init システム: sysvinit (cmdline: RFD)
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 }
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
標準インストールメディア
- Initramfs フレームワーク: Dracut (cmdline: [14])
- インストールプログラム: Anaconda (cmdline: [15])
- Init システム: systemd (cmdline: [16])
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
- Initramfs フレームワーク: initramfs-tools (cmdline: RFD)
- ライブフレームワーク: Debian Live (cmdline: [20])
- Init システム: sysvinit (cmdline: RFD)
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
- Initramfs フレームワーク: initramfs-tools (cmdline: RFD)
- ライブフレームワーク: Debian Live (cmdline: [21])
- Init システム: sysvinit (cmdline: RFD)
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
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 }
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
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