USBでマルチブートしてみる
「USBでKNOPPIX」を応用してUSBメモリを使ってマルチブートをしてみます。GRUBとEXTLINUXとの組み合わせではBoot errorとなりうまくいかなかったのでEXTLINUX起動領域を作成して実現しました。
概要
Linuxをインストールするとき、CDドライブが認識されない!とか、そもそもCDドライブがついてない!というときにインストール用のUSBメモリを作成するのが面倒くさいということが割とあるので、以下の組み合わせを作ってみました。PCのセットアップをよく行う人には便利かも。普段はデータ用USBメモリとして使用しておき、いざというときにはブータブルUSBとして利用できます。
- FAT32データ領域
- KNOPPIX 6.0.1
- Vine Linux 4.2インストーラ
- CentOS 5.2インストーラ
ブートローダには同様にEXTLINUXを使い、もちろんWindowsからはLinuxのファイルが見えないようにします。ただ、今回は利便性を考えてVineおよびCentOSのインストールCDイメージはFAT32上に配置しました。CentOSのインストールイメージは4GBあるので大容量のUSBメモリがおすすめ。
USBでKNOPPIXの知識を前提とします。
ブートの仕組み
簡単にブートの仕組みを解説しておきます。
- MBR読み込み
- USBメモリ上のアクティブパーティションからEXTLINUX起動
- ユーザーに選択された領域のEXTLINUXをチェーンローダでブート
- それぞれのシステムへ
このようにチェーンローダを使って次の段階のブートを行います。
手順概要
大まかには「USBでKNOPPIX」と同じです。ところがマルチブートに案外手こずったのでメモとして残しておきます。
- パーティションを切る
- フォーマット
- 起動領域の構築
- 領域の構築
- CDから起動ファイルをコピー
- EXTLINUXのインストール
- MBRの書き込み
- インストールCDイメージをデータ領域にコピー
以上です。
実際の手順
パーティションを切る
KNOPPIXの時と同様にLinuxのFDISKを使いUSBメモリのパーティションを切ります。使用したメモリはBUFFALOのRUF2-J8GSで今回は以下のようにしました。
デバイス | ブートフラグ | ID | システム | 容量 | 用途 |
/dev/sdc1 | 0x05 | 拡張領域 | 全部 | ||
/dev/sdc5 | 0x0c | Win95 FAT32 (LBA) | 7GB | データ用 | |
/dev/sdc6 | * | 0x83 | Linux ext2 | 16MB | 起動領域 |
/dev/sdc7 | 0x83 | Linux ext2 | 16MB | Vine Linux | |
/dev/sdc8 | 0x83 | Linux ext2 | 16MB | CentOS | |
/dev/sdc9 | 0x83 | Linux ext3 | 1GB | KNOPPIX |
ポイントは起動領域(sdc6)です。最初に起動領域をブートして、選択画面を表示します。そこからSYSLINUXのチェーンローダで他の領域をブートします。なお、インストーラの領域は起動ファイルのみなので16MBもあれば大丈夫でした(私の環境では2シリンダ)。もちろん起動領域にはアクティブフラグを立てます。
パーティションを切ったらそれぞれの領域をフォーマットします。16MBの領域はext2、KNOPPIXの領域のみext3にしました。
起動領域の構築
必要なパーティションが作成できたらまず起動領域から作っていきます。起動領域といっても大げさな物ではなくEXTLINUXをセットアップするだけです。
# mount /dev/sdc6 /mnt/disk # extlinux -i /mnt/disk
続いて/mnt/diskにextlinux.confを作成します。KNOPPIXの時はisolinux.cfgの名前を変更するだけでしたが、選択メニューを表示させるので自分で書きます。以下は私が作成した例です。
- extlinux.conf
DEFAULT vesamenu.c32 <-- グラフィカルメニューの表示 PROMPT 0 MENU TITLE Multiple Linux Loader MENU BACKGROUND syslinux.jpg <-- バックグラウンドイメージを読み込む TIMEOUT 600 LABEL knoppix MENU LABEL KNOPPIX 6.0.1 MENU DEFAULT KERNEL chain.c32 <-- チェーンローダでブート APPEND hd0 9 <-- /dev/sdc9に相当 LABEL vine MENU LABEL Vine Linux 4.2 Installer (image in Part#5) KERNEL chain.c32 APPEND hd0 7 LABEL centos MENU LABEL CentOS 5.2 Installer (image in Part#5) KERNEL chain.c32 APPEND hd0 8
また、グラフィカルメニューモジュールであるvesamenu.c32、およびチェーンローダモジュールchain.c32が必要になるのでコピーします。Vine 4.2と5.0でファイルの場所が違うのでそれぞれ載せておきます。
- Vine 4.2
ところがVine 4.2でインストールされるsyslinux-3.63パッケージのチェーンローダは論理パーティションからブートすることができません( http://syslinux.zytor.com/archives/2008-April/009848.html )。そのためVer.3.73のアーカイブからコピーしました。ついでに背景イメージファイルもコピーするといいでしょう。これは640x480サイズのJPEGまたはPNGなら使えるようです。なお、vesamenu.c32はEXTLINUXのバージョンに合わせないとメニューがうまく表示されませんでした。# cp /usr/lib/syslinux/vesamenu.c32 /mnt/disk # cp syslinux-3.73/com32/modules/chain.c32 /mnt/disk # cp syslinux-3.73/sample/m16-640x640-syslinux.jpg /mnt/disk/syslinux.jpg
- Vine 5.0 -- 2009-12-22
Vine 5.0ではSYSLINUXが3.82になったのでVine 4.2時点での問題点は解決されています。ファイルの場所などが変更されているので追記しておきます。# cp /usr/share/syslinux/vesamenu.c32 /mnt/disk # cp /usr/share/syslinux/chain.c32 /mnt/disk # cp /usr/share/doc/syslinux-3.82/sample/m16-640x640-syslinux.jpg /mnt/disk/syslinux.jpg
作業が終わると以下のファイルがそろっているはずです。
- extlinux.conf -- 設定ファイル
- extlinux.sys -- システムファイル
- chain.c32 -- チェーンローダモジュール
- vesamenu.c32 -- グラフィカルメニューモジュール
- syslinux.jpg -- 背景画像(任意)
以上で起動領域は完成です。マウントを解除しておきます。
# umount /mnt/disk
各領域の作成
続いて各領域に起動ファイルをコピーします。
KNOPPIX領域はUSBでKNOPPIXを参照してください。インストーラはisolinux以下のみをコピーします。Vine、CentOSでそれぞれ行います。
# mount /dev/sdc7 /mnt/disk # cp -av /mnt/cdrom/isolinux/* /mnt/disk # extlinux -i /mnt/disk # mv /mnt/disk/isolinux.cfg /mnt/disk/extlinux.conf # umount /mnt/disk
MBRの書き込み
SYSLINUXのMBRイメージを書き込みます。
# cat /usr/lib/syslinux/mbr.bin > /dev/sdc
CDイメージのコピー
Vine、CentOSインストーラが使用するCDイメージをFAT32領域にコピーします。
# mount /dev/sdc5 /mnt/disk # cp Vine42-i386.iso /mnt/disk # cp CentOS-5.2-i386-bin-DVD.iso /mnt/disk
以上でKNOPPIX、Vineインストーラ、CentOSインストーラが使用できるUSBメモリが構築できました
苦労した〜。