概要
Linux環境で複数のOSイメージを1つのUSBメモリから起動できるようにする手法について説明する。主に2つのアプローチがあり、1つはVentoyという専用ツールを利用する方法、もう1つは手動でGRUBを導入し個別にパーティションを分割する方法である。以下では後者の手動による設定手順を詳しく記載する。
前提条件
- x86_64アーキテクチャのコンピュータ
- Linux OSがインストールされた環境
- 複数のブートISOイメージ(Windows PE、Linux LiveCD、インストールメディアなど)
ISOイメージの準備
起動に使用するISOファイルを事前に用意する。代表的なものとしては以下が挙げられる:
- Windows PE(Mini Windows PE、WinPEなど)
- Linux LiveCD(Ubuntu、Debian、CentOSなど)
- Linux インストールディスク
各ISOファイルの容量を確認しておく。以下のコマンドでサイズを把握し、パーティション設計の参考にする:
ls -lh *.iso
出力されるサイズを基に必要なパーティションサイズを決定する(1024バイト単位で計算)。
USBメモリの-disk
まず、USBメモリのパーティショニングを行う。GPartedツールを使用すると視覚的に作業を進行できる:
gparted
パーティション構成は以下の原則に基づいて設計する:
- 最初のパーティション:FAT32フォーマット、容量は100MB〜500MB程度(GRUBブートローダのインストールに使用)
- 2番目以降のパーティション:各ISOイメージ専用の領域を確保、ファイルシステムは「未フォーマット」または「クリア」を選択
例如、3つのISOイメージがある場合は合計4つのパーティションを作成する。
既存のデータがある場合は、パーティションのリサイズ機能を使用して空き容量を確保する必要がある。GRUBインストール用のパーティションは必ずしも最初である必要はないが、混乱を避けるため最初の 配置recommended。
ISOイメージの書き込み
各ISOファイルを対応するパーティションに直接書き込む。ddコマンドを使用する:
sudo dd if=ubuntu.iso of=/dev/sdb2 bs=4M status=progress
sudo dd if=winpe.iso of=/dev/sdb3 bs=4M status=progress
sudo dd if=centos.iso of=/dev/sdb4 bs=4M status=progress
※ device名は環境に応じて適切に変更すること。
書き込み完了後、GPartedでパーティション 상태を確認すると、ISOイメージを書き込んだ領域が認識される。
ブートファイルの調査
各パーティションのブートローダがどのファイルを参照しているかを特定する必要がある。-mount各大パーティションを-mountして確認する:
sudo mount /dev/sdb2 /mnt/temp1
ls -la /mnt/temp1/boot/efi/
sudo umount /mnt/temp1
一般的な配置:
- Linux系:
/boot/efi/grubx64.efi - Windows系:
/boot/efi/bootx64.efi
各パーティションのUUIDも確認しておく:
sudo blkid /dev/sdb2 /dev/sdb3 /dev/sdb4
GRUBのインストール
最初のパーティションにGRUBをインストールする:
sudo mount /dev/sdb1 /mnt/usb
sudo mkdir -p /mnt/usb/boot/efi
sudo grub-install --target=x86_64-efi --removable \
--boot-directory=/mnt/usb/boot \
--efi-directory=/mnt/usb/boot/efi \
/dev/sdb
Installationが正常に完了したか確認すること。
GRUB設定ファイルの作成
ブートメニューを定義する設定ファイルを作成する:
sudo touch /mnt/usb/boot/grub/grub.cfg
sudo nano /mnt/usb/boot/grub/grub.cfg
設定ファイルの例:
insmod all_video
insmod gfxterm
insmod chain
menuentry "Ubuntu Live" {
search --fs-uuid --set=root XXXX-XX-XX-XX-XX-XX-XX-XX
chainloader /boot/grub/x86_64-efi/normal.mod
configfile /boot/grub/grub.cfg
}
menuentry "Windows PE" {
set root=(hd0,gpt3)
chainloader /EFI/BOOT/bootx64.efi
}
menuentry "CentOS Install" {
set root=(hd0,gpt4)
chainloader /EFI/BOOT/BOOTX64.EFI
}
注意点:
- Windows PEのISOではUUID認識に問題がある場合があり、その場合はパーティション番号で指定する
- Linux LiveCDが複数存在する場合、chainloaderではなく直接linuxカーネルを 指定する必要がある
Linux LiveCDの詳細設定
複数のLinux LiveCDを使用する場合、各ISOのブートパラメータを正確に設定する必要がある。まず元のISO内の設定ファイルを参照:
sudo mount /dev/sdb2 /mnt/check
cat /mnt/check/boot/grub/grub.cfg
sudo umount /mnt/check
起動パラメータを確認し、USBメモリ側の設定にbootfrom=/dev/sdXYパラメータを追加する:
menuentry "Kali Linux" {
search --fs-uuid --set=root YYYY-YYYY-YYYY-YYYY
linux /live/vmlinuz boot=live bootfrom=/dev/sdb2 components quiet splash
initrd /live/initrd.img
}
これにより、正しいパーティションから起動イメージが読み込まれる。
仕上げ
すべての設定が完了したら、マウントを解除してUSBメモリを 安全に取り出す:
sudo umount /mnt/usb
コンピュータを再起動し、BIOS/UEFIの設定でUSBメモリからのブートを選択すれば、作成したマルチブートUSBメモリが使用できる。