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で追加された機能でこのページに関係のあるものは、 なかなかやります。


TOPページにもどる    grubメインページにもどる
更新: 6 Feb. 2002 
30 Apr. 2000