お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2011-09-02 16:33:50

octanemv
新しいメンバ
登録日: 2011-08-28

複数のwindowsをgrub2から直接起動する

前提)
- 複数のwindowsとubuntuとマルチブートにしている
- ブートローダにGRUB2を使っている
- GRUB2からbootmgrのメニュー選択をスキップして直接所望の
  windowsを起動したい


準備)
- ブート(フラグのついた)パーティションのBoot/BCD をバックアップ
 windowsからだとロックされていてコピーできないのでlinuxで。

[基本パーティションにwindows(vista以降)がインストールされている場合]

a-1) windows側で
  defaultで所望のwindowsが起動するようにBCDを変更
  bcdedit /default {所望のidentifier}
  bcdedit /timeout 0

a-2) linux側で
  bootmgr, Boot/* を該当windowsがインストールされているパーティションにコピー
 バックアップしたBoot/BCDを元の場所にリストア 
  /etc/grub.d/40_customに
 menuentry win_foo {
     set root=(hdX,msdosY)  <- X, Y は適宜
     chainloader +1
  }

  update_grub実行
  #update_grubが自動で見つけたエントリでもブートするはずです。



[基本に加えて拡張パーティションにwindows(vista以降)がインストールされている場合]
WindowsがインストールするPBR(パーティションブートレコード)のセクタ情報が
物理ディスクを反映したものでないため、grub2でそのまま使えません。そのため
ひと手間かかります。legacy grubでは考慮されるので必要ありません。

b-1) a-1) と同じ

b-2) a-2) と同じ(除く menuentry)

以下すべてlinux側で。
以下 windowsがインストールされている拡張パーティション(内の論理ボリューム)を
/dev/sda5、/dev/sda5が/mnt/sda5にマウントされていると仮定

b-3) 該当パーティションのPBRをファイルにコピー
  dd if=/dev/sda5 of=/mnt/sda5/sda5.pbr bs=512 count=1

b-4) 該当パーティションの先頭セクタを調べて16進に変換
  parted) unit s
  parted) print
  例)
  番号 開始     終了
  5    251690418s    253787570 ...

  電卓等で
  251690418 => 0x0f007db2

b-5) b-3)で作った sda5.pbrをバイナリエディタで開く。
下記はバイト単位の表示。2バイト単位のときはエンディアンに注意

0000000: eb 52 90 4e 54 46 53 20 20 20 20 00 02 08 00 00  .R.NTFS    .....
0000010: 00 00 00 00 00 f8 00 00 3f 00 ff 00 3f 00 00 00  ........?...?...
...

0x1cから始まる 3f 00 00 00 をb-4)の開始セクタで置き換え保存

0000000: eb 52 90 4e 54 46 53 20 20 20 20 00 02 08 00 00  .R.NTFS    .....
0000010: 00 00 00 00 00 f8 00 00 3f 00 ff 00 b2 7d 00 0f  ........?....}..
...


b-6) 対応するmenuentryは
 
 menuentry win_foo_on_ext {
     set root=(hd0,msdos5)
     chainloader /sda5.pbr
  }

  update_grub実行
 # update_grubが自動で見つけたエントリはブートに失敗するはずです。


[Windows XPの場合]

  ntldr が /dev/sda1 にあると仮定。

  menuentry win_xp {
     set root=(hd0,msdos1)
     ntldr /ntldr
  }

  update_grub実行

ふさわしくない記述等あればご指摘ください。

オフライン

 

Board footer

Powered by FluxBB