5. grubへの機能追加(趣味の世界)
最近のHDDはどんどん容量が大きくなってきて、色んなOSや
複数のバージョンをインストールしたくなります。ですが、PCの規格上
基本パーティションは4つしか作れません。拡張パーティションを使えば
多くのパーティションを作ることはできますが、拡張パーティションは
再帰的な構造になっているので個人的に好きになれません。
ところで、動いてるOSにとって、最低必要なパーティションは
自分のパーティションだけです。HDDの全領域をパーティショニングしなくても
自分のパーティションだけ見えてればいいのです。
と言うことでMBRのパーティションテーブルをブートしたいOSのパーティション用
に書き換えれば、いくらでも沢山のOSをインストールすることができます。
例えば、まず下図 MBR-1のようにパーティションを切って、Linux #1にgrubを
インストールします。この状態のMBRをLinux #1のファイルシステムに
保存しておきます。
# dd if=/dev/hda of=/boot/grub/MBR-1 count=1
それから、fdisk, cfdisk, sfdisk 等を適当に使って、MBR-2のように
パーティションを切ります。そしてまたMBRをLinux #1
のファイルシステムに保存します。
# dd if=/dev/hda of=/boot/grub/MBR-2 count=1
保存してあるMBRファイルを ddコマンド等でMBRに書き込めば、MBR-1の状態と
MBR-2の状態を切替えることができます。同様にMBR-3, 4, ...と続ければ沢山の
OSをインストールできます。
MBR-1 MBR-2
┏━━━━━━━━━┓ ┏━━━━━━━━━┓
┃ 1GB Linux #1 ┃ ┃ 1GB Linux #1 ┃
┠─────────┨ ┠─────────┨
┃ 1GB Windows #1 ┃ ┃ ┃
┠─────────┨ ┃ ┃
┃ 1GB FreeBSD #1 ┃ ┃ 3GB 空き ┃
┠─────────┨ ┃ ┃
H ┃ 1GB Linux #2 ┃ ┃ ┃
D ┠─────────┨ ===> ┠─────────┨
D ┃ ┃ ┃ 1GB Windows #2 ┃
┃ ┃ ┠─────────┨
┃ ┃ ┃ 1GB Linux #3 ┃
┃ ┃ ┠─────────┨
┃ 空き ┃ ┃ 1GB FreeBSD #2 ┃
┃ ┃ ┠─────────┨
┃ ┃ ┃ ┃
┃ ┃ ┃ 空き ┃
┃ ┃ ┃ ┃
┃ ┃ ┃ ┃
┗━━━━━━━━━┛ ┗━━━━━━━━━┛
ここで面倒なのはMBRを書き換えるとき、OSが動いていなくてはならないことです。
grub動作中にMBRを書き換えれたらよいのにと思いました。
そこで、grubのソースを見てるとinstallコマンドがINT13Hを使ってセクター
のライトをしているので、installコマンドを利用することにしました。
[書式]
install source cp dest
sourceで指定した1セクターをdestで指定した位置にコピーします。
[使用例]
install (hd0,0)/boot/grub/MBR-2 cp (hd0)0
ちなみに私はMBRの後ろの空いているセクターにMBRを保存しているので、
install (hd0)4+1 cp (hd0)0
こんな感じになります。
また、MBRを書き換えたあと、grubが再起動してくれるとうれしいので、
bootコマンドを利用しました。
[書式]
boot mbr
これは、INT19Hを呼び出してるだけです。
このコマンドはマシンをリセットしないで MBR等のブートコードを呼んですぐに
立ち上がるので使ってみるとなかなか便利です。
こんなパッチですが、もし使いたい方がいらっしゃったら使ってみてください。
grub-0.91用
( add-patch と jpkey-patch 1.参照 )
grub-0.90用 ,
grub-0.5.96.1用 ( 同上 )
grub-0.5.95用 ( add-patch.gz ) ,
grub-0.5.94用 ( add-patch_0.5.94.gz )
grub-0.5.96で追加された機能でこのページに関係のあるものは、
- partnew コマンド:MBRのパーティションテーブルのうちの1つを書き換える
- parttype コマンド:MBRのパーティションテーブルのうちの1つの
パーティションタイプを書き換える
- reboot コマンド:リブートする
- halt コマンド:停止(電源断)する
- password コマンド:パスワードによる入力保護(lockコマンド併用)と
別の menu.lst の読み込み
なかなかやります。
TOPページにもどる
grubメインページにもどる
更新: 6 Feb. 2002
30 Apr. 2000