概要
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イメージからブートできるはずです。