Carpe Diem

  Top > スポンサー広告> GRUB・ブートローダ > マルチブート(2段階ブート)の設定  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

マルチブート(2段階ブート)の設定

2012 - 03/22 [Thu] - 23:33

GRUBやWindowsのブートローダは基本そのOS内に存在するため、ブートローダを所持するOSに何らか不具合があったり、再インストール等するときに面倒なことになりがちです。
そこでブートローダを独立して使用する方法が「2段階ブート」と呼ばれる手法です。

これにはMBRとPBRの知識が必要なのでまずはそこから

・MBR(マスターブートレコード)
ハードディスクドライブの先頭セクタ(セクタって言葉は「場所」って意味だと思えば良いかと)のこと。
OSをインストールしたときに自動的にインストールされます。
MBRは次項で説明するPBRを呼び出すことができます。
基本的にMBRは一つしかハードディスクに無いものと思ってください。

・PBR(パーティションブートレコード)
これはパーティションの先頭に作られるブートセクタ。
MBRと違ってOSの数だけ存在し、パーティションにインストールされます。
このPBRを経てOSが起動するわけです。
Linux以外は恐らく全部PBRが作られますが、Linuxもインストール時またはOS上でファイルをいじってPBRを作れます。インストール時に「拡張」や「高度な設定」で設定できます。


というわけで2段階というのは
MBR→OS
から
MBR→PBR→OS

にしようというわけです。これによって
・MBRが独立しているためOSの追加、削除がしやすい
・Windows→Linuxではインストールは容易だが、Linux→Windowsの順だと困難であった問題を解決


というメリットがあります。特に個人的に後者が嬉しいです。

今回の環境
/dev/sda1・・・Windows7
/dev/sda5・・・Ubuntu10.04
/dev/sda7・・・Ubuntu11.04


です。GRUBはUbuntu11.04のものを使用。つまりMBRはUbuntu11.04のGRUB

今回の設定の順番としては
①LinuxのGRUB設定をMBRからPBRへ移植
②GRUBのアップデート時にMBRが更新される設定を、MBRからPBRへ変更
③MBMをMBRへインストール


となります。またこれを実装する前に以下の解説サイトで今回行うことの詳細を確認したほうがいいです。慣れた人ならGRUBが死んだりカーネルパニックになっても対応できますが、そうでない場合はきちんと把握した上で行なってください。

Tips: grub2とgrub1の扱い方(様々な再セットアップ方法等)
単純なgrub2(grub ver. 1.97以降)のPBRへの(再)セットアップ
Debian系でgrub2のgrub-pcパッケージが正しく更新される為に確認しておくべきこと
MBMをLinux上でインストール可能にするパッケージ


では順に

◆LinuxのGRUB設定をPBRへ移植
# grub-setup -f /dev/sda7
grub-setup: warn: Attempting to install GRUB to a partitionless disk
or to a partition.
This is a BAD idea..
grub-setup: warn: Embedding is not possible. GRUB can only be
installed in this setup
by using blocklists. However, blocklists are UNRELIABLE and their use
is discouraged..

# echo $?
0



◆GRUBのアップデート時にMBRが更新される設定を、MBRからPBRへ変更
これはカーネルの更新時などでGRUBがアップデートする際に、そのままの設定ではMBRの更新となり不具合が生じます。なのでアップデートした時PBRが更新されるようにします。

ファイルはこちらからダウンロードしてください。

# chmod +x update_debconf_grub-pc_install_devices.sh
# sh update_debconf_grub-pc_install_devices.sh
target_device: /dev/sda7
target_device_uuid:
The debconf database will be updated.
Proceed? yes or no [n] yes
Updated successfully.



◆MBMをMBRへインストール

2通りあります。一つは本家からのデータをISOイメージに変換してCDやらUSBやらで起動時にロードさせインストールする方法
もう一つは解説サイトで配布しているインストーラを使用してインストールする方法です。

Linuxを既にインストールしている場合は後者のほうが楽なのでそちらを使用します。
こちらからファイルをダウンロードしてください。

# tar xzvf mbm-0.390-for-Linux-install-pack
# cd mbm-0.390-for-Linux-install-pack/
# ./install.sh

+ mkdir -p /usr/local/share/mbm
+ mkdir -p /usr/local/sbin
+ install -m 444 binary/0.39-md5sum.txt binary/mbm1.bin
binary/mbm2.bin /usr/local/share/mbm
+ install -m 554 shell-script/install-mbm /usr/local/sbin
# install-mbm /dev/sda
......
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 2048 62916607 31457280 7 HPFS/NTFS/exFAT
.....
/dev/sda7 * 62916608 94373887 15728640 83 Linux
MBM (Multiple Boot Manager) 0.39 will be installed on /dev/sda
Proceed? yes or no [n] y
Installing...
......


以上で設定は完了です。

再起動すると
最初のメニューに
1. HPFS/NTFS/ ←Windows7のブートローダ
2. HPFS/NTFS/ ←WIndows7の中身
3. HPFS/NTFS/ ←WIndows7の中身
4. +DOS Extend ←Extendでインストールした部分。
5. Diskette


と出ます。私の場合Ubuntu はExtendでパーティション分けしてその後ext4でインストしたのでまとめられてます。
4. +DOS Extend
を押すと展開され

4. -DOS Extend
5.  Linux ext2fs
6.  Solaris/Linux swap
7.  Linux ext2fs
8. Diskette


となります。使用するキーは主に
F1・・・ヘルプの表示
F4・・・詳細な説明
SP・・・デフォルトドライブの設定


です。Windowsをインストールするパーティションはアクティブにするなどの設定が必要ですが、それもこの設定画面でできます。
選択後、次にLinux等のPBRの選択画面が表示されると思います。Windowsならそのまま起動すると思います。
またGRUB設定をMBRからPBRへ移植しましたが、以前の設定で別パーティションのOSがGRUBに残っていればPBRでも起動できます。それを元にまた別パーティションのGRUB設定をPBRへ移植すればいいと思います。


◆体験談
私が行ったのは
①Ubuntu11.04のGRUBをPBR(sda7)へ
②MBMをMBRにインストール
③Ubuntu11.04のGRUB(PBR)からUbuntu10.04に入って、Ubuntu10.04のGRUBをPBR(sda5)へ
④MBRからUbuntu10.04(PBR)へ入り、Ubuntu10.04でGRUBを更新して、GRUB設定がMBRでなくPBRで更新されることを確認

です。すべて問題なく出来ました。
特に④は複数パーティションでそれぞれGRUBがある場合どちらを使うか選択画面が出るのですが、今回はきちんと分けているおかげか出ませんでした。


ソース:
Tips: マルチブートするなら2段階ブート方式に統一しよう
マルチブート(デュアルブート)環境の構築
[LinuxMint12]GRUB2をPBRに再セットアップ、MBMによる2段階ブートにしました
mbm を使ってマルチブートさせよう。


◆update_debconf_grub-pc_install_devices.shのソース
一応ですがなくなってしまうと困るので



#!/bin/bash -e

export LANG=C

echon() {
printf "%s" "$@"
}
yesno()
{
msg="$1"
def="$2"
while true ; do
echon "$msg"
read answer
if [ "$answer" ] ; then
case "$answer" in
y|Y|yes|YES)
return 0
;;
n|N|no|NO)
return 1
;;
*)
echo " "
echo "Error: Invalid response, expected \"yes\" or \"no\"."
continue
;;
esac
else
return $def
fi
done
}

usage()
{
echo "usage: $0 [OPTION]"
echo
echo " -d target_device specify target partition by device file name"
echo " -u uuid(preferred) specify UUID directly"
echo " -v get current value"
echo " -h print this message and exit"
echo
exit
}

exec_db()
{
tempfile=$(mktemp)
chmod +x "${tempfile}"
cat>${tempfile}<


コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。