UEFI対応マルチOSブートUSBを作る

概要

3種類のOS(SystemRescueCD、Ubuntu、CentOS)をブートできるUSBメモリを作ります。UEFIでブートできるPCが対象です。この記事が古くなっていたので、その焼き直しです。

準備するもの

  • USBメモリ(16GB以上)
  • Linuxが動いている作業用PC(本記事ではGentoo/Linuxで検証しています)

パーティションの準備

GPTで単一パーティション、FAT32でフォーマットします。

sudo parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                                      
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? Yes                                                               
(parted) mkpart primary fat32 0% 100%                                           
(parted) name 1 multibootusb
(parted) quit                                                             
Information: You may need to update /etc/fstab.
sudo mkfs.vfat /dev/sdb1

ISOイメージの配置

作成したパーティションの /boot/iso 以下にISOイメージを保存します。

# 作成したパーティションをマウント
sudo mkdir /mnt/usb
sudo mount /dev/sdb1 /mnt/usb
# ISOイメージの保存場所を作る
sudo mkdir /mnt/usb/boot/iso

# あらかじめダウンロードしたISOイメージをコピーする
sudo cp ~/Downloads/systemrescuecd-amd64-6.1.6.iso /mnt/usb/boot/iso
sudo cp ~/Downloads/ubuntu-20.04-desktop-amd64.iso /mnt/usb/boot/iso
sudo cp ~/Downloads/ubuntu-20.04-live-server-amd64.iso /mnt/usb/boot/iso
sudo cp ~/Downloads/CentOS-7-x86_64-Minimal-2003.iso /mnt/usb/boot/iso
sudo cp ~/Downloads/CentOS-8.2.2004-x86_64-minimal.iso /mnt/usb/boot/iso

GRUBのインストールと設定

USBにブートローダをインストールします。

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

次に、GRUBの設定ファイルを作成しますが、先にUSBメモリのIDを確認します。今回の例では D797-84E0 です。次の手順で必要になるので覚えておきます。

lsblk -f | grep /mnt/usb
└─sdb1      vfat       FAT32         D797-84E0                             232.5G     0% /mnt/usb

GRUBの設定を /mnt/usb/boot/grub/grub.cfg に記載します。この例では下記の設定を記載します。1行目のIDは手元の環境に合わせて書き換えてください。

# path to the partition holding ISO images (using UUID)
set imgdevpath="/dev/disk/by-uuid/D797-84E0"

insmod all_video

menuentry "[loopback] SystemRescueCd 6.1.6 64bit" {
	set isofile='/boot/iso/systemrescuecd-amd64-6.1.6.iso'
	loopback loop $isofile
	echo 'Loading kernel ...'
	linux (loop)/sysresccd/boot/x86_64/vmlinuz img_dev=$imgdevpath img_loop=$isofile archisobasedir=sysresccd copytoram setkmap=us
	echo 'Loading initramfs ...'
	initrd (loop)/sysresccd/boot/intel_ucode.img (loop)/sysresccd/boot/amd_ucode.img (loop)/sysresccd/boot/x86_64/sysresccd.img
}

menuentry "[loopback] Ubuntu 20.04 Desktop" {
	set isofile="/boot/iso/ubuntu-20.04-desktop-amd64.iso"
	loopback loop $isofile
	linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
	initrd (loop)/casper/initrd
}

menuentry "[loopback] Ubuntu 20.04 Server" {
	set isofile="/boot/iso/ubuntu-20.04-live-server-amd64.iso"
	loopback loop $isofile
	linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
	initrd (loop)/casper/initrd
}

menuentry "[loopback] CentOS 7 x86_64 Minimal" {
	set isofile="/boot/iso/CentOS-7-x86_64-Minimal-2003.iso"
	loopback loop $isofile
	linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:$imgdevpath:/$isofile
	initrd (loop)/isolinux/initrd.img
}

menuentry "[loopback] CentOS 8 x86_64 Minimal" {
	set isofile="/boot/iso/CentOS-8.2.2004-x86_64-minimal.iso"
	loopback loop $isofile
	linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:$imgdevpath:/$isofile
	initrd (loop)/isolinux/initrd.img
}

以上でファイルの準備は終了です。syncを叩いて書き込み完了を待ちましょう。

sync

これでUSBメモリの作成は終了です。

USBでブートする

ブート中の画面でThinkPadならF12をタイプすると起動メディアを選択できます。ここで、作成したUSBを選択すると、トップ画像のようなブートメニューが表示され、選択肢によって各OSのISOイメージからブートできるはずです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA