Grub2 を使ったマルチブート USB メモリ

最近の USB メモリは数ギガバイトあるので、起動イメージを複数保存できる容量がある。 そこで、USB メモリに Grub2 をインストールして、 USB メモリに保存してある複数の ISO イメージから起動させるようにしたい。 作業は Ubuntu 12.10 上で行った。

うまくいったのだが、grub.cfg に書く設定の探し方がよくわからなかった。 Ubuntu 12.10 と Debian 6.06 の netinst は起動できた(インストールが終わるまでは使っていない)。

USB メモリに Grub2 のインストール

http://norian.blog50.fc2.com/blog-entry-92.html にあるとおりに行った。

まず、USB メモリが /dev/sd? のどれなのか確認する。

df

で /media 以下にあるディレクトリを見ると USB メモリが /dev/sd? のどれなのかわかる。 私の環境では /dev/sdg だったので

sudo grub-install --no-floppy --root-directory=/media/USERNAME/MEMOROY /dev/sdg

のようにして grub を USB メモリにインストールする。

USB メモリに ISO イメージを保存するための boot/iso ディレクトリを作成しておく。

mkdir /media/USERNAME/MEMOROY/boot/iso

Ubuntu 12.10

ubuntu-12.10-desktop-amd64.iso と ubuntu-ja-12.10-desktop-i386.iso を起動するイメージとして使うことにする。 これらのファイルはダウンロードして /media/USERNAME/MEMOROY/boot/iso に保存する。

USB メモリの boot/grub/grub.cfg に ISO イメージに合う設定を書く必要がある。 http://www.miuxmiu.com/archives/2011/07/12/grub2_usb_memory_install_direct_livecd_iso_data_starting.html に 10.10 用の設定があった。ファイル名だけ変更した

menuentry "ubuntu-12.10-desktop-amd64.iso" {
loopback loop (hd0,1)/boot/iso/ubuntu-12.10-desktop-amd64.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-12.10-desktop-amd64.iso noeject noprompt --
initrd (loop)/casper/initrd.lz
}

menuentry "ubuntu-ja-12.10-desktop-i386.iso" {
loopback loop (hd0,1)/boot/iso/ubuntu-ja-12.10-desktop-i386.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-ja-12.10-desktop-i386.iso noeject noprompt --
initrd (loop)/casper/initrd.lz
}

を /media/USERNAME/MEMOROY/boot/grub/grub.cfg に書き込む (ファイルは存在しないので作成する)。

Debian 6.06 netinst

Debian 6.06 の netinst については http://140.120.15.179/Howto-Install/USBinst.html (そのうち消えそうなサイトだが) にあるように行った。

debian-6.0.6-amd64-netinst.iso と debian-6.0.6-i386-netinst.iso をダウンロードして /media/USERNAME/MEMOROY/boot/iso に保存する。

私は原理はわかっていないが initrd.gz と vmlinuz が必要であるらしい。

http://ftp.tw.debian.org/debian/dists/Debian6.0.6/main/installer-amd64/current/images/hd-media/ から initrd.gz と vmlinuz をダウンロードする。 ディレクトリ /media/USERNAME/MEMOROY/boot/amd64 を作成して、そこにこれら2つのファイルを移す。

mkdir /media/USERNAME/MEMOROY/boot/amd64
mv initrd.gz vmlinuz /media/USERNAME/MEMOROY/boot/amd64

同じように i386 に対しても実行する。 http://ftp.tw.debian.org/debian/dists/Debian6.0.6/main/installer-i386/current/images/hd-media/ から initrd.gz と vmlinuz をダウンロードして、/media/USERNAME/MEMOROY/boot/i386 に保存する。

mkdir /media/USERNAME/MEMOROY/boot/i386
mv initrd.gz vmlinuz /media/USERNAME/MEMOROY/boot/i386

grub.cfg には次を書き込む。

menuentry "debian-6.0.6-amd64-netinst.iso" {
 loopback loop /boot/iso/debian-6.0.6-amd64-netinst.iso
 linux /boot/amd64/vmlinuz desktop=lxde --
 initrd /boot/amd64/initrd.gz
}

menuentry "debian-6.0.6-i386-netinst.iso" {
 loopback loop /boot/iso/debian-6.0.6-i386-netinst.iso
 linux /boot/i386/vmlinuz desktop=lxde --
 initrd /boot/i386/initrd.gz
}

SystemRescueCD

systemrescuecd-x86-3.1.2.iso をダウンロードして /media/USERNAME/MEMOROY/boot/iso に保存する。 http://www.sysresccd.org/forums/viewtopic.php?f=14&t=2808 を参考にして grub.cfg に次を書き込む。

menuentry "systemrescuecd-x86-3.1.2.iso (32bit)" {
 loopback loop /boot/iso/systemrescuecd-x86-3.1.2.iso
 linux (loop)/isolinux/rescue32 isoloop=/boot/iso/systemrescuecd-x86-3.1.2.iso
 initrd (loop)/isolinux/initram.igz
}

menuentry "systemrescuecd-x86-3.1.2.iso (64bit)" {
 loopback loop /boot/iso/systemrescuecd-x86-3.1.2.iso
 linux (loop)/isolinux/rescue64 isoloop=/boot/iso/systemrescuecd-x86-3.1.2.iso
 initrd (loop)/isolinux/initram.igz
}

まだ、SystemRescueCD 自体は使ったことはないのでよくわかってはいないが、 USB からブートすると端末が使用できた。

使い方

USB メモリからブートすると grub で ISO を選択する画面になる。 そこで、使いたい項目を選択すれば良い。

参考

Tags of current page

, , ,