Ubuntu日本語フォーラム
ログインしていません。
前提)
- 複数の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実行
ふさわしくない記述等あればご指摘ください。
オフライン