ブラウザの JavaScript がオフ(ブロックまたは許可しない)に設定されているため、このページは正常に機能しません。
disklessfun’s Wiki*
[
ホーム
]
一覧
最終更新
バックアップ
ヘルプ
Top
>
grub2_and_grub1
>
複製
?
ms
grub2_and_grub1 をテンプレートにして作成
これらのキーワードがハイライトされています:
開始行:
(2015-7-21)grub2に関する古い情報を大幅に削除しました。&color(Red){&size(10){思い切って古い情報を切ったので、初期のgrub2を採用している古い環境においては本ページの内容が最適でない場合もあります。&br;Linux Mint 13(等)の方、ごめんなさい};};
#br
そもそもこのページは6年前、ネット上にgrub2の情報が乏しくて、grub2に関して多くの誤った情報を目にし、「このまま放置すればマルチブート手法が混乱する」「自分がgrub2の情報を提供するしかない」と思って作成したものです。
#br
6年経ち、grub2もかなり洗練され使いやすくなり、必須の情報も格段に少なくなりました。
----
TITLE:Tips: grub2とgrub-legacyの扱い方(様々な再セットアップ方法等)
RIGHT:初出 2009-11-02
RIGHT:最終更新 2015-7-26
LEFT:
&color(Blue){本ページは[[&color(Blue){スマートな''マルチブート''};>multipleboot]]''を実現する為に必須となる''grub2, grub(grub-legacy)の知識を掲載しています。''レストア・レスキュー時に必要な''grub2, grub-legacyの復旧手法も掲載しています。};
#br
&color(Blue){grub2ももちろんgrub-legacyと同様、PBRにセットアップすることができ、マルチブート環境を管理のし易い[[&color(Blue){%%%''2段階ブート''%%%};>multipleboot]]に統一することができます。MBRにセットアップするマルチブートマネージャには従
※MBMはUEFIに対応していないのでUEFIマザボの場合はLegacyサポートを有効にしておく必要があります。また2Tバイト以下のハードディスク、SSDである必要があります。
&size(9){grub2はUEFI時代は必須になります。だけど開発者の考え方が[[ちょっと変>#grub2_warning]]←%%今のところ%%このままずっとみたい};
#br
#contents
#br
* マルチブート環境を構築する場合全般に通じるお勧めの手法 [#cfaf9c29]
#br
マルチブートを念頭に置く場合、[[%%%ここ%%%>#e406aca7]]にも記述していますが、''OSのインストールは、事前にLive OS上等でgpartedやfdisk等で(マルチブート用の)パーティションテーブルを作成した後に始めることをお勧めします。''
#br
そうすればWindowsのインストーラに(BitLockerを使わない場合に)パーティションの浪費とも言える「System Reserved」を作られなくて済みますし、Debian等やUbnutu等のインストール中に問題なく論理パーティションのPBRにgrub2をセットアップすることが出来ま
&aname(grub2);
* grub2 [#c36a0990]
** 2段階ブート(マルチブート)関連でgrub2について最低限必要な情報 [#bba11969]
*** ''(1)(Linux)OSインストール後にgrub2のセットアップ先をPBRに移す際の構文'' [#z2330a74]
# grub-install --force /dev/hoge
加えて、[[%%%この作業%%%>#additional_work]](Debian,Ubuntu系の場合)
#br
&size(10){※ };[[&size(10){--forceを付けなくてはならない理由};>#grub2_warning]]
*** ''(2)(Linux)OSの引っ越し時やレストアやレスキュー時等に、他のOS上でgrub2をPBRにセットアップする際の構文'' [#v20c9a35]
# grub-install --force --root-directory=(/dev/hogeのマウントポイント) /dev/hoge
&size(8){&color(Red){(2015-7-26)バカな間違いを見つけたので修正しました。};};
#br
&size(10){※ };[[&size(10){--forceを付けなくてはならない理由};>#grub2_warning]]
&aname(disable_os_prober);
*** ''(3)2段階ブート時、grub2のメニューから不要なエントリを削除する作業'' [#v28e6712]
/etc/default/grub に GRUB_DISABLE_OS_PROBER=true を追記した後、update-grub を実行する
#br
grub2をマルチブートマネージャとして使用しない(替りにMBM等を使用する)場合は、&color(Blue){grub.cfgに余計なエントリーが追加されないように、/etc/default/grubにGRUB_DISABLE_OS_PROBER=trueを追記しておくことをお薦めします。};私はもちろんそのよう
*** ''(4)(Debian, Ubuntu系)OSのインストーラ画面で'' [#e406aca7]
OSをインストールしたりgrub2をセットアップする''パーティション''を自分で選べるように、一見インストーラが“最も勧めないように見える”(高度な知識が必要です等と警告される、大抵一番下の)選択肢を選ぶべきです。
#br
その為にパーティションテーブルを事前に作成しておくことをおすすめします。Live OS上で作業しておけばいいでしょう。
#br
Windows(8, 8.1や10も含む)系, Debian系, Ubuntu系 このいずれをインストールする場合においても、(1)事前にパーティションを作成し、(2)[[MBMインストール手段※1>mbm]]を準備しておくと、後が楽※2だと思います。
#br
※1 MBMはUEFIに対応していないのでUEFIマザボの場合はLegacyサポートを有効にしておく必要があります。またブートに関連するハードディスクは2Tバイト以下のサイズである必要があります。
※2「Windowsを新規インストールした際にインストーラがMBRを上書き」しても平気になります。
*** ''(5)RHEL系(CentOS)等での注意点'' [#qda5f950]
インストーラがgrub2のPBRへのセットアップをサポートしていないRHEL系(CentOS等)で、grub2を手動でPBRにセットアップした後の運用法に関して少し[[''%%%こちら%%%''>exec-cmd#c7183227]]に記述しました。
&aname(additional_work);
*** Debian系でgrub2のgrub-pcパッケージが正しく更新される為に確認しておくべきこと [#x3f37a52]
Ubuntuだと9.10以降に採用されたgrub2は、一般的になった頃には既に開発停止になっていたgrub-legacyとは異なり、今後もどんどん開発が進み、各ディストリから次々とアップデート・パッケージがリリースされることが想定されます。grub2パッケージのアップデ
''ダウンロード'' &ref(update_debconf_grub-pc_install_devices.sh,nolink); ''Ubuntu 9.10以降専用''(2010-5-31更新)Debianではまだ確認していないので一応Ubuntu専用としていますが、この辺りの仕様がDebianとUbuntuで異なるということはないと思うので
''grub2を/bootを含むパーティション(/とか/bootのパーティション)のPBRにセットアップしている環境・専用&size(14){(決め打ち)};です。''(私が非常に推奨しない)1段階ブートにしている人は使用しないで下さい。
&size(16){''使い方''};
''1. 現在の設定値を見る''
# /パス/update_debconf_grub-pc_install_devices.sh -v
''2. 普通の環境で普通に設定する(現在起動中のOSの、/bootを含むパーティションのUUIDを設定)''
# /パス/update_debconf_grub-pc_install_devices.sh # 引数なし
更新前にはユーザに確認を求めます。Enterを押すだけでは更新はおこなわれません。
''3. ブートデバイス(/bootや/) がraid1デバイスの場合に設定する''
# /パス/update_debconf_grub-pc_install_devices.sh -d /dev/sda1(例) # 生デバイス名を指定する
''4. chroot環境で設定する''
# ./update_debconf_grub-pc_install_devices.sh -u hoge-fuga # UUIDを直接指定する
長いUUIDを引数で指定するのは難しいので、chroot前に、設定したいUUIDだけを書き込んだファイルを作成しておくといいと思います。そして、
# ./update_debconf_grub-pc_install_devices.sh -u `cat hoge`
みたいな感じで使用すればいいと思います。
※本スクリプト(ツール)を実行する環境のDebconfデータベースしか参照・更新できません。他のOS上からはchrootしないと参照・更新できません。
&color(Blue){grub-pcパッケージがアップデート時に参照する、Debconfデータベース(Windowsでのレジストリみたいなもの)の該当部(grub2インストール先デバイス)に、UUID形式で現在のブートデバイスを書きこみます。標準では該当部にはUbuntu 9.10だと生のデバ
[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}<<EOT
#!/bin/bash -e
. /usr/share/debconf/confmodule
db_go
EOT
if ! ${VIEWMODE}; then
cat>>${tempfile}<<EOT
db_set grub-pc/install_devices "/dev/disk/by-uuid/${target_device_uuid}"
EOT
fi
cat>>${tempfile}<<EOT
db_get grub-pc/install_devices
db_stop
EOT
if ! ${VIEWMODE}; then
cat>>${tempfile}<<EOT
echo "Updated successfully."
EOT
fi
cat>>${tempfile}<<EOT
echo 2>&1 "grub-pc/install_devices: \${RET}"
rm "\${0}"
EOT
exec "${tempfile}"
}
test `id -u` -ne 0 && echo "Run as root." && exit 1
arg_target_device=;arg_uuid=;VIEWMODE=false
while getopts "d:u:vh" opt; do
case $opt in
\?) OPT_ERROR=1; usage;;
d) arg_target_device="$OPTARG";; # Optional argument: -d /dev/??
u) arg_uuid="$OPTARG";; # Optional argument: -u ?????
v) VIEWMODE=true;; # Optional argument: -v(Get current value)
h) usage;;
esac
done
${VIEWMODE} && exec_db
if test -n "${arg_target_device}" && test -n "${arg_uuid}"; then
echo "Warning: uuid has been given. target_device will be ignored."
fi
target_device=
if test -n "${arg_uuid}"; then
testline=$(echo "${arg_uuid}"|tr -d [:alnum:]|tr -d \-)
test -n "${testline}" && echo "Error, Invalid argument." && exit 1
target_device_uuid=${arg_uuid}
else
if test -n "${arg_target_device}"; then
if test ! -e "${arg_target_device}"; then
echo "Error, ${arg_target_device} does not exist." && exit 1
else
target_device=${arg_target_device}
fi
else
target_device=`mount|grep "on /boot "|cut -d" " -f1`
test -z "${target_device}" && target_device=`mount|grep "on / "|cut -d" " -f1`
fi
line=`blkid|grep "${target_device}:"`
line=${line#*UUID\=\"*}
line=${line%%\"*}
testline=$(echo "${line}"|tr -d [:alnum:]|tr -d \-)
test -n "${testline}" && echo "Error, Can't get UUID." && exit 1
target_device_uuid=${line}
fi
echo "target_device: ${target_device}"
echo "target_device_uuid: ${target_device_uuid}"
echo "The debconf database will be updated."
yesno "Proceed? yes or no [n] " 1 && exec_db
&aname(grub2_warning);
** ちょっと問題な、grub2開発者の考え方 [#p5602207]
grub2をPBRにセットアップしようとすると以下の警告文が表示されます。
|grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR. This is a BAD idea.&br;grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UN
このような警告を出すgrub2開発者の考えは、[[%%%''このページ''%%%>multipleboot]]を設けている私の考えとは真っ向から対立します。
grub2開発者は、''grub2をMBRにセットアップして「grub2が(マルチブートの)全OSのブートを司る」''ことを至上と考えているのだと見えます。これは「自分達が開発したソフトウェアが広範囲に使われること」が「ユーザの使い勝手」よりも優先するという本末転倒
#br
grub2開発者の考えと私の考えにはそれぞれ長所・短所がありますが、実際には上の警告文に逆らって[[%%%''このページ''%%%>multipleboot]]の考え方を実践してgrub(grub2,grub-legacy)をPBRにセットアップし、MBRにはもっと欠点の少ないマルチブートマネージャ
#br
少し考えるだけで、「grubが(マルチブートの)全OSのブートを司る」手法の破綻が見えると思います。たとえばLinuxを複数インストールした場合、「メインのLinux」以外のLinuxでカーネルアップデートをおこなってもそれが「メインのLinux」で使用する設定ファイ
#br
grub2,grub-legacyをPBRにセットアップした場合の短所は、PBRはMBR(正確にはMBRとそれに続く領域)に比べて狭く、ファイルシステムドライバを格納することができない為、grubディレクトリ中の特定のファイル(grub2ではcore.img,grub-legacyではstage2)の物理的
しかし[[%%%''このページ''%%%>multipleboot]]で記しているような数々の長所がありますので、grubをPBRにセットアップすることを強くお薦めします。
** (念の為削除せず置いておきます)Ubuntu 10.10インストーラの実態 [#i88606a4]
|Ubuntu 10.10インストーラの(かんたん)調査(&color(Red){途中};)(ubuntu-ja-10.10-desktop-i386.isoで確認)|
|CENTER:「ディスク領域の割り当て」の1番目の画面での選択肢|CENTER:「ディスク領域の割り当て」の2番目の画面|CENTER:ブートローダ・インストール先の''指定''|CENTER:結果(ブート方式に関して)|h
|他のOSと共存させてインストールする|「拡張パーティショニングツール」を利用しない|CENTER:指定できない|CENTER:1段階ブート|
|~|「拡張パーティショニングツール」を利用する&br;(「手動でパーティションを設定する」を選んだ場合と実質的に同じことになる)|CENTER:MBR(デフォルト)|CENTER:1段階ブート|
|~|~|CENTER:PBR|CENTER:&color(Blue){2段階ブート};|
|ディスク全体を削除してから使用する|「拡張パーティショニングツール」を利用しない|CENTER:指定できない|CENTER:1段階ブート|
|~|「拡張パーティショニングツール」を利用する&br;(「手動でパーティションを設定する」を選んだ場合と実質的に同じことになる)|CENTER:MBR(デフォルト)|CENTER:1段階ブート|
|~|~|CENTER:PBR|CENTER:&color(Blue){2段階ブート};|
|手動でパーティションを設定する(高度な知識が必要です)||CENTER:MBR(デフォルト)|CENTER:1段階ブート|
|~|~|CENTER:PBR|CENTER:&color(Blue){2段階ブート};|
エラー発生時等の例外ケースの除けばだいたいこんな感じです。
-既存のNTFS領域を縮小してLinuxをインストールする領域を作り出したい場合は「他のOSと共存させてインストールする」を選択し、且つ「拡張パーティショニングツール」を利用しない手法を選択すればいいと思います。ただしこの場合は必ず1段階ブートになって
-それ以外の場合は「拡張パーティショニングツール」を利用し、且つブートローダをPBRにインストール(grub用語ではセットアップ)することをお勧めします。
&aname(ubuntu-installer-tips);
** (念の為削除せず置いておきます)Ubuntu 9.10, 10.04インストーラの実態 [#f8f6a20e]
&color(Blue){(2010-5-18追記)「それぞれ別のものとしてインストールし、起動時にどれを起動するか選択」をを選択した場合の具体的な問題のひとつは、インストーラが拡張パーティションのIDを5(Extended)と書き込むことです。それ自体は悪くない筈なんですが
#br
&color(Blue){以下は上表に記したバグと比べると該当ケースは少ないと思いますが、一応、気に留めて頂きたいと思います。};
[[&ref(grub2_and_grub1_1_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=grub2_and_grub1_1_b.jpg&refer=grub2_and_grub1]]
&color(Blue){拡張ボタンを押すと表示されるブートローダ(grub2)のインストール先指定画面についてですが、9.04以前と同様にテキストボックスにキーボードで入力して指定することもできます。しかし''ドロップダウンリストから選択して指定することをお薦めし
** データ持ち運び用 USBメモリなんかにLive OSを仕込む場合等に便利な grub2のloopマウント機能 [#abbac6f6]
(2015-7-26追記)
私の推奨する[[2段階ブート>multipleboot]]等に直接は関係ないんですが、常備(携帯)するUSBメモリにLive OS(古い言い方だとOneCD Linux)を仕込んでおくことは、Linuxerだけでなく、Windowsだけでマルチブートする人にとっても、とても役立つ可能性があります
#br
具体例を、手短に記述します。
#br
USBメモリはMBR形式パーティションテーブルを持つものとします(普通そうなってます)。
USBメモリは全域が1パーティションで確保されているものとします(普通そうなってます)。
USBメモリのパーティションはFAT32でフォーマットされているものとします(大概そうなってます)。
#br
上記の状況で、特に変わった使い方をしていないとすると、USBメモリ上のパーティションは(Live OSを含む)Linux上で/dev/sd[x]1と認識されます。
[x]の箇所にはaとかbとかcとかdとかが入ります。# fdisk -l などのコマンドで確認できます。
#br
grub2は以下のような作業でUSBメモリにインストールします。(Live OSを含む)Linux上の作業です。
#br
MBRにインストールする場合はこんな感じです。
# grub-install --root-directory=(/dev/sd[x]1のマウントポイント) /dev/sd[x]
&size(10){この場合最後は必ず数字以外の文字、aとかbとかcとかdとかです。};
#br
参考までにPBRにインストールする場合は
# grub-install --force --root-directory=(/dev/sd[x]1のマウントポイント) /dev/sd[x]1
PBRにインストールした場合はMBRにブートローダが必要です。
Debian,Ubuntu系だとmbrパッケージをインストールして# install-mbr /dev/sd[x] コマンドを実行したり、[[MBM>mbm]]をインストールすることでMBRにブートローダが入ります。私だとまず殆どの場合、MBMをインストールします。複数のディスクやSSDやUSBメモリが
Windows上でもdiskpartでMBRにブートローダをインストールすることができます。その場合及びinstall-mbrを使用した場合は/dev/sd[x]1をアクティブに設定する作業も必要です。
※USBメモリに複数のLive OSじゃないLinuxをインストールすることもあるでしょうからPBRへのセットアップの方法も記述しておきました。
#br
grub.cfg(の原型)はこんな感じで作成します。
# grub-mkconfig -o (/dev/sd[x]1のマウントポイント)/boot/grub/grub.cfg
#br
あとは、Live OSのisoを配置し、適宜grub.cfgを編集します。
grub.cfg(の原型)の適切な場所に、以下のような記述を挿入します。
menuentry "Live OS 1" {
set iso_path='boot/konalinux-3.0-mate_i386.iso'
loopback loop /$iso_path
linux (loop)/live/vmlinuz boot=live fromiso=/dev/disk/by-uuid/4BFB-4F96/$iso_path \
quiet splash noeject locales=ja_JP.UTF-8 timezone=Asia/Tokyo
initrd (loop)/live/initrd.img
boot
}
このような記述はDebian,Ubuntu系Live OSでかなり共通に使えます。ただしこの中の「live/vmlinux」や「live/initrd.img」の箇所はisoによって異なる場合もあります。isoの中のファイルパスを# isoinfo -lR -i hoge.isoで見ることで確認できますが、より確実を
また、set iso_path='boot/konalinux-3.0-mate_i386.iso'の部分をset iso_path='/boot/konalinux-3.0-mate_i386.iso'のように記述してはいけません。先頭にスラッシュを記述すれば絶対パスと等しくなるのでつい記述したくなるんですが、駄目です。ここに記述
あと、fromiso=??の箇所に、替りにfindiso=hoge.isoと記述することも可能は可能なんですが、お勧めしません。findisoを記述すると認識順にハードディスクやUSBメモリのパーティションをマウントしてisoファイルを検索しようとします。時間がかかりますし、i
※ハイバーネートされていたりしてマウントできない場合がある。
&aname(grub1);
* grub-legacy(grub ver. 0.97) [#f9f8df40]
&color(Blue){以下のコンテンツは当サイト内の別のページからコピーあるいは移動したものです。今のところ別のページに一部同一の内容が存在します。};
&aname(grub1_simple_setup);
** grub-legacy(grub ver. 0.97)のセットアップ(grubのPBRへのセットアップ法) [#hda4f096]
もしマルチブート環境を構築するなら、是非[[%%%このページ%%%>multipleboot]]に目を通してみて下さい。
----
|COLOR(BLUE):BGCOLOR(LightYellow):|c
|※他のOS上からgrubを再セットアップする場合は[[%%%&color(Blue){こんな感じの作業};%%%>#grub1_rescue]]が必要になる場合があります。(どんな場合に必要なのかについての説明は長くなるので略します。)|
(2008-1-17ちょっとだけ更新)COLOR(BLUE):usbで接続されているデバイスへのgrubのセットアップは何か特別ではないかとの先入観を持たれている方が多いようです。でも実際には内蔵HDDに対してセットアップする場合と何らと言っていいほど変わりません。usbデバ
私の場合、こんな感じです。
自分の環境に適宜合わせて下さい。
※以下の(hd1,0)とは、作業をおこなったPCにとっての2番目のハードディスクの1番目のパーティションを意味します。リムーバルなUSBハードディスクもしくはUSBメモリが2番目のハードディスクとして認識されているということになります。(hd1,0)との表記につ
&aname(single-stage-type);
[[&size(17){''&color(Blue){1段階ブート};''};>multipleboot]]&size(17){''&color(Blue){の場合、};''};
# grub
GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p
(hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"...
succeeded
Done.
grub>quit
※setup (hd1)は母艦PCにとっての2番目のハードディスクのMBRにgrubのstage1をセットアップする(書き込む)ことを意味します。作業時にUSBハードディスクもしくはUSBメモリが何番目のハードディスクと認識されていようとUSBブートに直接関係はありません。
&aname(dual-stages-type);
&color(Red){↓※以下の作業を始めておこなう方は、それまでに確実に[[&color(Red){%%%2段階ブート%%%};>multipleboot]]が何かを理解し、自分で[[&color(Red){%%%MBM%%%};>mbm]]等のMBR専用のブートローダをインストールする必要があることを理解してから作業
[[&size(17){''&color(Blue){2段階ブート};''};>multipleboot]]&size(17){''&color(Blue){の場合、};''};
2段階ブートの場合、たとえばこのように、
# grub
grub> root (hd1,0) ←rootで指定するのはmenu.lst(grub.conf),stage2等の場所
grub> setup (hd1,0) ←setupで指定するのはgrub(grubのstage1)の書き込み先
setupで指定するデバイスをハードディスク(の先頭)ではなくパーティション(の先頭)とします。
上は母艦上の作業としてのサンプルですが、
普通にLinuxをブートし、そのOS上でブートの方式を1段階ブートから[[%%%2段階ブート%%%>multipleboot]]に変更する場合であれば、たとえば、
# grub
grub> root (hd0,0) ←rootで指定するのはmenu.lst(grub.conf),stage2等の場所
grub> setup (hd0,0) ←setupで指定するのはgrub(grubのstage1)の書き込み先
こんな感じになります。もちろん詳細は適宜自身の環境に合わせて下さい。
マルチブート環境の場合、↑このように、[[grubをPBR(パーティションの先頭セクタ)にセットアップする>multipleboot]]ことを強く推奨します。
&aname(grub1_rescue);
** grub-legacy(grub ver. 0.97)の、レスキュー時等の(ブートした環境とは別の環境への)セットアップ [#x960025d]
マルチブートするなら[[%%%2段階ブートに統一して%%%>multipleboot]]、[[%%%MBM%%%>mbm]]を使用しましょう。[[%%%MBM%%%>mbm]]は、WindowsがインストールするMicrosoft謹製のMBR用ブートローダやgrubのchainloader機能の上位互換となる高機能なブートローダ
----
|COLOR(BLUE):BGCOLOR(LightYellow):|c
|以下のような手順は、リストア時など、他のOSから別のOSのgrubを再設定する場合特有のものです。[[&color(Blue){1段階ブートから2段階ブートに変更する};>multipleboot]]場合など、単純にgrubを再設定するだけなら[[%%%&color(Blue){こんな感じの作業};%%%
#br
|COLOR(Red):BGCOLOR(LightYellow):|c
|(2008-2-27追加)最近はどのLinuxディストリビューションもgrub0.97を採用しているようなので、あまり以下の手順は必要ないようです。[[&color(Red){%%%こんな感じの作業%%%};>#dual-stages-type]]でうまくいかなかった場合のみ、以下の手順を実行した方がい
新しいHDDにシステム全体をレストアしたり(grubのセットアップ先がMBR,PBRの場合共通)、別の領域にOSを引越したり(同MBR,PBRの場合共通)、stage2ファイルを上書きしたり(同PBRの場合)した際にはgrubの再セットアップが必要となります。MBRにセットアップする
+grubの再セットアップ前に、レストアされた側の/boot/grubディレクトリを、レストアされた側のファイルシステム上にバックアップしておきます
+レストアされた側の/boot/grubディレクトリ内のstage1、必要なstage1.5、stage2を、''レストアする側から同名のファイルをコピーして''上書きします
+(勿論レストアする側の)grubコマンドでgrubをセットアップします([[参考>#grub1_simple_setup]])
+レストアされた側のOSを起動後、バックアップしておいたgrubディレクトリからファイルをコピーして、先に上書きしてしまったファイル群を元に戻すか、boot/grubディレクトリ全体をバックアップしておいたものと入れ替えることで、/boot/grubをバックアップ前
+(勿論レストアされた側のOS上で、)grubを再セットアップします([[参考>#grub1_simple_setup]])
COLOR(BLUE):※grubをPBRにセットアップした場合はstage1.5は使われません。
COLOR(BLUE):※[[&color(Blue){ディストリビューションによる設定ファイル名の違い};>multipleboot#grub_conf]]も頭に入れておいたほうが望ましいです。特に、上に書いた手順を自分なりにアレンジしたい場合には不可欠な知識だと思います。
** grub-legacyでのハードディスクの表現 [#m423f92c]
&aname(grub1_express);
SATAのPCでは特殊な設定をしていない限り、以下の表の対応が成立します。
&color(Red){grub2とgrub1ではハードディスクの表現が異なります。};
|CENTER:一般的な表現|CENTER:grub1上での表記|Linux上でのSATA接続の場合のデバイス名|h
|1番目のハードディスク※|CENTER:(hd0)|CENTER:/dev/sda|
|1番目のハードディスク※の第1パーティション|CENTER:(hd0,0)|CENTER:/dev/sda1|
|1番目のハードディスク※の第2パーティション|CENTER:(hd0,1)|CENTER:/dev/sda2|
|1番目のハードディスク※の第3パーティション|CENTER:(hd0,2)|CENTER:/dev/sda3|
|1番目のハードディスク※の第4パーティション|CENTER:(hd0,3)|CENTER:/dev/sda4|
|1番目のハードディスク※の第5パーティション|CENTER:(hd0,4)|CENTER:/dev/sda5|
|1番目のハードディスク※の第6パーティション|CENTER:(hd0,5)|CENTER:/dev/sda6|
|1番目のハードディスク※の第7パーティション|CENTER:(hd0,6)|CENTER:/dev/sda7|
|2番目のハードディスク※|CENTER:(hd1)|CENTER:/dev/sdb|
|2番目のハードディスク※の第1パーティション|CENTER:(hd1,0)|CENTER:/dev/sdb1|
|2番目のハードディスク※の第2パーティション|CENTER:(hd1,1)|CENTER:/dev/sdb2|
|2番目のハードディスク※の第3パーティション|CENTER:(hd1,2)|CENTER:/dev/sdb3|
|2番目のハードディスク※の第4パーティション|CENTER:(hd1,3)|CENTER:/dev/sdb4|
|2番目のハードディスク※の第5パーティション|CENTER:(hd1,4)|CENTER:/dev/sdb5|
※ハードディスクにはUSBメモリやUSB接続のSDカードやUSBアダプタを介したCF等も含みます。内蔵・外付けの区別はありません。
現在は各ハードディスクにパーティションを最高16個作成できます。ただしそのうち1個は拡張領域となるのでファイルシステムとして確保できる数は最大15となります。
#br
* ご要望、ご意見、質問を下のフォームにどうぞ&br;(でもここより、[[掲示板>board]]や[[書き込みフォーム>form]]のページに書いて頂いた方が気づき易いと思います。) [#g278213f]
#areaedit(nofreeze,noauth,btn:[修正(書き間違った場合にご利用下さい)])
- 貴殿に同意 grub2 で痛い目にあった。 -- [[naka]] &new{2012-11-19 (月) 06:08:19};
- ”grub2 の場合はこちら” で --force を使う手 目からうろこ 有難うございました。 -- [[Leo]] &new{2014-05-17 (土) 22:25:12};
- Debian8とArchlinuxをデュアルブートにしたく検索していたところHPにたどり着きましたが -- [[kkuma]] &new{2015-08-25 (火) 11:55:36};
- あら改行出来なかったすいません。それで現状で一段ブートになっているものを2段にしたいにですが例が多すぎてどうすれば良いか良く分かりません。 -- [[kkuma]] &new{2015-08-25 (火) 11:57:59};
- まず現状把握です。HDDもしくはSSDはMSDOS形式の(fdiskコマンドでパーティションの割り具合が参照できる)パーティションテーブルですよね。それが前提です。次に、Debian8、Archlinuxのどちらが“削除したら、もう一方も起動できなくなるOS”ですか? 大概gr
- 詳細な情報にとても助かっています。もしご存知でしたら教えていただきたいのですが・・・。最新のManjaro Linux 15.09ではinitrdを2つ指定するようです。Manjaro Linux自身のupdate-grubは成功しますが、他のパーティションにインストールしてあるディス
- grub-mkconfigのソースは解析していないのですが、Mnjaro以外の(普通の)Linuxのgrub-mkconfigが、「一つのカーネルに対応するinitedが2個」だと気づかない(認識しない)のは当然だと思います。何十年間もカーネル1個に対してラムディスク1個の関係なので、そ
- そうですね、grub2はいずれソースコードの改良が追いついて行かないのではと感じています。先ほど、Manjaro Linuxを再インストールして別パーティションのディストリビューションからupdate-grubしたら、起動できる方のinitrdを一つですが選びました。うー
- この問題の影響範囲はあくまでもgrub-mkconfigが生成するテキストファイルのみにとどまります。いろいろ工夫できるでしょう。また今のところはManjaro Linuxをrescue Linuxにすればそう困ることもないでしょう。 -- [[disklessfun]] &new{2015-11-21 (土) 0
#comment
#areaedit(end)
終了行:
(2015-7-21)grub2に関する古い情報を大幅に削除しました。&color(Red){&size(10){思い切って古い情報を切ったので、初期のgrub2を採用している古い環境においては本ページの内容が最適でない場合もあります。&br;Linux Mint 13(等)の方、ごめんなさい};};
#br
そもそもこのページは6年前、ネット上にgrub2の情報が乏しくて、grub2に関して多くの誤った情報を目にし、「このまま放置すればマルチブート手法が混乱する」「自分がgrub2の情報を提供するしかない」と思って作成したものです。
#br
6年経ち、grub2もかなり洗練され使いやすくなり、必須の情報も格段に少なくなりました。
----
TITLE:Tips: grub2とgrub-legacyの扱い方(様々な再セットアップ方法等)
RIGHT:初出 2009-11-02
RIGHT:最終更新 2015-7-26
LEFT:
&color(Blue){本ページは[[&color(Blue){スマートな''マルチブート''};>multipleboot]]''を実現する為に必須となる''grub2, grub(grub-legacy)の知識を掲載しています。''レストア・レスキュー時に必要な''grub2, grub-legacyの復旧手法も掲載しています。};
#br
&color(Blue){grub2ももちろんgrub-legacyと同様、PBRにセットアップすることができ、マルチブート環境を管理のし易い[[&color(Blue){%%%''2段階ブート''%%%};>multipleboot]]に統一することができます。MBRにセットアップするマルチブートマネージャには従
※MBMはUEFIに対応していないのでUEFIマザボの場合はLegacyサポートを有効にしておく必要があります。また2Tバイト以下のハードディスク、SSDである必要があります。
&size(9){grub2はUEFI時代は必須になります。だけど開発者の考え方が[[ちょっと変>#grub2_warning]]←%%今のところ%%このままずっとみたい};
#br
#contents
#br
* マルチブート環境を構築する場合全般に通じるお勧めの手法 [#cfaf9c29]
#br
マルチブートを念頭に置く場合、[[%%%ここ%%%>#e406aca7]]にも記述していますが、''OSのインストールは、事前にLive OS上等でgpartedやfdisk等で(マルチブート用の)パーティションテーブルを作成した後に始めることをお勧めします。''
#br
そうすればWindowsのインストーラに(BitLockerを使わない場合に)パーティションの浪費とも言える「System Reserved」を作られなくて済みますし、Debian等やUbnutu等のインストール中に問題なく論理パーティションのPBRにgrub2をセットアップすることが出来ま
&aname(grub2);
* grub2 [#c36a0990]
** 2段階ブート(マルチブート)関連でgrub2について最低限必要な情報 [#bba11969]
*** ''(1)(Linux)OSインストール後にgrub2のセットアップ先をPBRに移す際の構文'' [#z2330a74]
# grub-install --force /dev/hoge
加えて、[[%%%この作業%%%>#additional_work]](Debian,Ubuntu系の場合)
#br
&size(10){※ };[[&size(10){--forceを付けなくてはならない理由};>#grub2_warning]]
*** ''(2)(Linux)OSの引っ越し時やレストアやレスキュー時等に、他のOS上でgrub2をPBRにセットアップする際の構文'' [#v20c9a35]
# grub-install --force --root-directory=(/dev/hogeのマウントポイント) /dev/hoge
&size(8){&color(Red){(2015-7-26)バカな間違いを見つけたので修正しました。};};
#br
&size(10){※ };[[&size(10){--forceを付けなくてはならない理由};>#grub2_warning]]
&aname(disable_os_prober);
*** ''(3)2段階ブート時、grub2のメニューから不要なエントリを削除する作業'' [#v28e6712]
/etc/default/grub に GRUB_DISABLE_OS_PROBER=true を追記した後、update-grub を実行する
#br
grub2をマルチブートマネージャとして使用しない(替りにMBM等を使用する)場合は、&color(Blue){grub.cfgに余計なエントリーが追加されないように、/etc/default/grubにGRUB_DISABLE_OS_PROBER=trueを追記しておくことをお薦めします。};私はもちろんそのよう
*** ''(4)(Debian, Ubuntu系)OSのインストーラ画面で'' [#e406aca7]
OSをインストールしたりgrub2をセットアップする''パーティション''を自分で選べるように、一見インストーラが“最も勧めないように見える”(高度な知識が必要です等と警告される、大抵一番下の)選択肢を選ぶべきです。
#br
その為にパーティションテーブルを事前に作成しておくことをおすすめします。Live OS上で作業しておけばいいでしょう。
#br
Windows(8, 8.1や10も含む)系, Debian系, Ubuntu系 このいずれをインストールする場合においても、(1)事前にパーティションを作成し、(2)[[MBMインストール手段※1>mbm]]を準備しておくと、後が楽※2だと思います。
#br
※1 MBMはUEFIに対応していないのでUEFIマザボの場合はLegacyサポートを有効にしておく必要があります。またブートに関連するハードディスクは2Tバイト以下のサイズである必要があります。
※2「Windowsを新規インストールした際にインストーラがMBRを上書き」しても平気になります。
*** ''(5)RHEL系(CentOS)等での注意点'' [#qda5f950]
インストーラがgrub2のPBRへのセットアップをサポートしていないRHEL系(CentOS等)で、grub2を手動でPBRにセットアップした後の運用法に関して少し[[''%%%こちら%%%''>exec-cmd#c7183227]]に記述しました。
&aname(additional_work);
*** Debian系でgrub2のgrub-pcパッケージが正しく更新される為に確認しておくべきこと [#x3f37a52]
Ubuntuだと9.10以降に採用されたgrub2は、一般的になった頃には既に開発停止になっていたgrub-legacyとは異なり、今後もどんどん開発が進み、各ディストリから次々とアップデート・パッケージがリリースされることが想定されます。grub2パッケージのアップデ
''ダウンロード'' &ref(update_debconf_grub-pc_install_devices.sh,nolink); ''Ubuntu 9.10以降専用''(2010-5-31更新)Debianではまだ確認していないので一応Ubuntu専用としていますが、この辺りの仕様がDebianとUbuntuで異なるということはないと思うので
''grub2を/bootを含むパーティション(/とか/bootのパーティション)のPBRにセットアップしている環境・専用&size(14){(決め打ち)};です。''(私が非常に推奨しない)1段階ブートにしている人は使用しないで下さい。
&size(16){''使い方''};
''1. 現在の設定値を見る''
# /パス/update_debconf_grub-pc_install_devices.sh -v
''2. 普通の環境で普通に設定する(現在起動中のOSの、/bootを含むパーティションのUUIDを設定)''
# /パス/update_debconf_grub-pc_install_devices.sh # 引数なし
更新前にはユーザに確認を求めます。Enterを押すだけでは更新はおこなわれません。
''3. ブートデバイス(/bootや/) がraid1デバイスの場合に設定する''
# /パス/update_debconf_grub-pc_install_devices.sh -d /dev/sda1(例) # 生デバイス名を指定する
''4. chroot環境で設定する''
# ./update_debconf_grub-pc_install_devices.sh -u hoge-fuga # UUIDを直接指定する
長いUUIDを引数で指定するのは難しいので、chroot前に、設定したいUUIDだけを書き込んだファイルを作成しておくといいと思います。そして、
# ./update_debconf_grub-pc_install_devices.sh -u `cat hoge`
みたいな感じで使用すればいいと思います。
※本スクリプト(ツール)を実行する環境のDebconfデータベースしか参照・更新できません。他のOS上からはchrootしないと参照・更新できません。
&color(Blue){grub-pcパッケージがアップデート時に参照する、Debconfデータベース(Windowsでのレジストリみたいなもの)の該当部(grub2インストール先デバイス)に、UUID形式で現在のブートデバイスを書きこみます。標準では該当部にはUbuntu 9.10だと生のデバ
[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}<<EOT
#!/bin/bash -e
. /usr/share/debconf/confmodule
db_go
EOT
if ! ${VIEWMODE}; then
cat>>${tempfile}<<EOT
db_set grub-pc/install_devices "/dev/disk/by-uuid/${target_device_uuid}"
EOT
fi
cat>>${tempfile}<<EOT
db_get grub-pc/install_devices
db_stop
EOT
if ! ${VIEWMODE}; then
cat>>${tempfile}<<EOT
echo "Updated successfully."
EOT
fi
cat>>${tempfile}<<EOT
echo 2>&1 "grub-pc/install_devices: \${RET}"
rm "\${0}"
EOT
exec "${tempfile}"
}
test `id -u` -ne 0 && echo "Run as root." && exit 1
arg_target_device=;arg_uuid=;VIEWMODE=false
while getopts "d:u:vh" opt; do
case $opt in
\?) OPT_ERROR=1; usage;;
d) arg_target_device="$OPTARG";; # Optional argument: -d /dev/??
u) arg_uuid="$OPTARG";; # Optional argument: -u ?????
v) VIEWMODE=true;; # Optional argument: -v(Get current value)
h) usage;;
esac
done
${VIEWMODE} && exec_db
if test -n "${arg_target_device}" && test -n "${arg_uuid}"; then
echo "Warning: uuid has been given. target_device will be ignored."
fi
target_device=
if test -n "${arg_uuid}"; then
testline=$(echo "${arg_uuid}"|tr -d [:alnum:]|tr -d \-)
test -n "${testline}" && echo "Error, Invalid argument." && exit 1
target_device_uuid=${arg_uuid}
else
if test -n "${arg_target_device}"; then
if test ! -e "${arg_target_device}"; then
echo "Error, ${arg_target_device} does not exist." && exit 1
else
target_device=${arg_target_device}
fi
else
target_device=`mount|grep "on /boot "|cut -d" " -f1`
test -z "${target_device}" && target_device=`mount|grep "on / "|cut -d" " -f1`
fi
line=`blkid|grep "${target_device}:"`
line=${line#*UUID\=\"*}
line=${line%%\"*}
testline=$(echo "${line}"|tr -d [:alnum:]|tr -d \-)
test -n "${testline}" && echo "Error, Can't get UUID." && exit 1
target_device_uuid=${line}
fi
echo "target_device: ${target_device}"
echo "target_device_uuid: ${target_device_uuid}"
echo "The debconf database will be updated."
yesno "Proceed? yes or no [n] " 1 && exec_db
&aname(grub2_warning);
** ちょっと問題な、grub2開発者の考え方 [#p5602207]
grub2をPBRにセットアップしようとすると以下の警告文が表示されます。
|grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR. This is a BAD idea.&br;grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UN
このような警告を出すgrub2開発者の考えは、[[%%%''このページ''%%%>multipleboot]]を設けている私の考えとは真っ向から対立します。
grub2開発者は、''grub2をMBRにセットアップして「grub2が(マルチブートの)全OSのブートを司る」''ことを至上と考えているのだと見えます。これは「自分達が開発したソフトウェアが広範囲に使われること」が「ユーザの使い勝手」よりも優先するという本末転倒
#br
grub2開発者の考えと私の考えにはそれぞれ長所・短所がありますが、実際には上の警告文に逆らって[[%%%''このページ''%%%>multipleboot]]の考え方を実践してgrub(grub2,grub-legacy)をPBRにセットアップし、MBRにはもっと欠点の少ないマルチブートマネージャ
#br
少し考えるだけで、「grubが(マルチブートの)全OSのブートを司る」手法の破綻が見えると思います。たとえばLinuxを複数インストールした場合、「メインのLinux」以外のLinuxでカーネルアップデートをおこなってもそれが「メインのLinux」で使用する設定ファイ
#br
grub2,grub-legacyをPBRにセットアップした場合の短所は、PBRはMBR(正確にはMBRとそれに続く領域)に比べて狭く、ファイルシステムドライバを格納することができない為、grubディレクトリ中の特定のファイル(grub2ではcore.img,grub-legacyではstage2)の物理的
しかし[[%%%''このページ''%%%>multipleboot]]で記しているような数々の長所がありますので、grubをPBRにセットアップすることを強くお薦めします。
** (念の為削除せず置いておきます)Ubuntu 10.10インストーラの実態 [#i88606a4]
|Ubuntu 10.10インストーラの(かんたん)調査(&color(Red){途中};)(ubuntu-ja-10.10-desktop-i386.isoで確認)|
|CENTER:「ディスク領域の割り当て」の1番目の画面での選択肢|CENTER:「ディスク領域の割り当て」の2番目の画面|CENTER:ブートローダ・インストール先の''指定''|CENTER:結果(ブート方式に関して)|h
|他のOSと共存させてインストールする|「拡張パーティショニングツール」を利用しない|CENTER:指定できない|CENTER:1段階ブート|
|~|「拡張パーティショニングツール」を利用する&br;(「手動でパーティションを設定する」を選んだ場合と実質的に同じことになる)|CENTER:MBR(デフォルト)|CENTER:1段階ブート|
|~|~|CENTER:PBR|CENTER:&color(Blue){2段階ブート};|
|ディスク全体を削除してから使用する|「拡張パーティショニングツール」を利用しない|CENTER:指定できない|CENTER:1段階ブート|
|~|「拡張パーティショニングツール」を利用する&br;(「手動でパーティションを設定する」を選んだ場合と実質的に同じことになる)|CENTER:MBR(デフォルト)|CENTER:1段階ブート|
|~|~|CENTER:PBR|CENTER:&color(Blue){2段階ブート};|
|手動でパーティションを設定する(高度な知識が必要です)||CENTER:MBR(デフォルト)|CENTER:1段階ブート|
|~|~|CENTER:PBR|CENTER:&color(Blue){2段階ブート};|
エラー発生時等の例外ケースの除けばだいたいこんな感じです。
-既存のNTFS領域を縮小してLinuxをインストールする領域を作り出したい場合は「他のOSと共存させてインストールする」を選択し、且つ「拡張パーティショニングツール」を利用しない手法を選択すればいいと思います。ただしこの場合は必ず1段階ブートになって
-それ以外の場合は「拡張パーティショニングツール」を利用し、且つブートローダをPBRにインストール(grub用語ではセットアップ)することをお勧めします。
&aname(ubuntu-installer-tips);
** (念の為削除せず置いておきます)Ubuntu 9.10, 10.04インストーラの実態 [#f8f6a20e]
&color(Blue){(2010-5-18追記)「それぞれ別のものとしてインストールし、起動時にどれを起動するか選択」をを選択した場合の具体的な問題のひとつは、インストーラが拡張パーティションのIDを5(Extended)と書き込むことです。それ自体は悪くない筈なんですが
#br
&color(Blue){以下は上表に記したバグと比べると該当ケースは少ないと思いますが、一応、気に留めて頂きたいと思います。};
[[&ref(grub2_and_grub1_1_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=grub2_and_grub1_1_b.jpg&refer=grub2_and_grub1]]
&color(Blue){拡張ボタンを押すと表示されるブートローダ(grub2)のインストール先指定画面についてですが、9.04以前と同様にテキストボックスにキーボードで入力して指定することもできます。しかし''ドロップダウンリストから選択して指定することをお薦めし
** データ持ち運び用 USBメモリなんかにLive OSを仕込む場合等に便利な grub2のloopマウント機能 [#abbac6f6]
(2015-7-26追記)
私の推奨する[[2段階ブート>multipleboot]]等に直接は関係ないんですが、常備(携帯)するUSBメモリにLive OS(古い言い方だとOneCD Linux)を仕込んでおくことは、Linuxerだけでなく、Windowsだけでマルチブートする人にとっても、とても役立つ可能性があります
#br
具体例を、手短に記述します。
#br
USBメモリはMBR形式パーティションテーブルを持つものとします(普通そうなってます)。
USBメモリは全域が1パーティションで確保されているものとします(普通そうなってます)。
USBメモリのパーティションはFAT32でフォーマットされているものとします(大概そうなってます)。
#br
上記の状況で、特に変わった使い方をしていないとすると、USBメモリ上のパーティションは(Live OSを含む)Linux上で/dev/sd[x]1と認識されます。
[x]の箇所にはaとかbとかcとかdとかが入ります。# fdisk -l などのコマンドで確認できます。
#br
grub2は以下のような作業でUSBメモリにインストールします。(Live OSを含む)Linux上の作業です。
#br
MBRにインストールする場合はこんな感じです。
# grub-install --root-directory=(/dev/sd[x]1のマウントポイント) /dev/sd[x]
&size(10){この場合最後は必ず数字以外の文字、aとかbとかcとかdとかです。};
#br
参考までにPBRにインストールする場合は
# grub-install --force --root-directory=(/dev/sd[x]1のマウントポイント) /dev/sd[x]1
PBRにインストールした場合はMBRにブートローダが必要です。
Debian,Ubuntu系だとmbrパッケージをインストールして# install-mbr /dev/sd[x] コマンドを実行したり、[[MBM>mbm]]をインストールすることでMBRにブートローダが入ります。私だとまず殆どの場合、MBMをインストールします。複数のディスクやSSDやUSBメモリが
Windows上でもdiskpartでMBRにブートローダをインストールすることができます。その場合及びinstall-mbrを使用した場合は/dev/sd[x]1をアクティブに設定する作業も必要です。
※USBメモリに複数のLive OSじゃないLinuxをインストールすることもあるでしょうからPBRへのセットアップの方法も記述しておきました。
#br
grub.cfg(の原型)はこんな感じで作成します。
# grub-mkconfig -o (/dev/sd[x]1のマウントポイント)/boot/grub/grub.cfg
#br
あとは、Live OSのisoを配置し、適宜grub.cfgを編集します。
grub.cfg(の原型)の適切な場所に、以下のような記述を挿入します。
menuentry "Live OS 1" {
set iso_path='boot/konalinux-3.0-mate_i386.iso'
loopback loop /$iso_path
linux (loop)/live/vmlinuz boot=live fromiso=/dev/disk/by-uuid/4BFB-4F96/$iso_path \
quiet splash noeject locales=ja_JP.UTF-8 timezone=Asia/Tokyo
initrd (loop)/live/initrd.img
boot
}
このような記述はDebian,Ubuntu系Live OSでかなり共通に使えます。ただしこの中の「live/vmlinux」や「live/initrd.img」の箇所はisoによって異なる場合もあります。isoの中のファイルパスを# isoinfo -lR -i hoge.isoで見ることで確認できますが、より確実を
また、set iso_path='boot/konalinux-3.0-mate_i386.iso'の部分をset iso_path='/boot/konalinux-3.0-mate_i386.iso'のように記述してはいけません。先頭にスラッシュを記述すれば絶対パスと等しくなるのでつい記述したくなるんですが、駄目です。ここに記述
あと、fromiso=??の箇所に、替りにfindiso=hoge.isoと記述することも可能は可能なんですが、お勧めしません。findisoを記述すると認識順にハードディスクやUSBメモリのパーティションをマウントしてisoファイルを検索しようとします。時間がかかりますし、i
※ハイバーネートされていたりしてマウントできない場合がある。
&aname(grub1);
* grub-legacy(grub ver. 0.97) [#f9f8df40]
&color(Blue){以下のコンテンツは当サイト内の別のページからコピーあるいは移動したものです。今のところ別のページに一部同一の内容が存在します。};
&aname(grub1_simple_setup);
** grub-legacy(grub ver. 0.97)のセットアップ(grubのPBRへのセットアップ法) [#hda4f096]
もしマルチブート環境を構築するなら、是非[[%%%このページ%%%>multipleboot]]に目を通してみて下さい。
----
|COLOR(BLUE):BGCOLOR(LightYellow):|c
|※他のOS上からgrubを再セットアップする場合は[[%%%&color(Blue){こんな感じの作業};%%%>#grub1_rescue]]が必要になる場合があります。(どんな場合に必要なのかについての説明は長くなるので略します。)|
(2008-1-17ちょっとだけ更新)COLOR(BLUE):usbで接続されているデバイスへのgrubのセットアップは何か特別ではないかとの先入観を持たれている方が多いようです。でも実際には内蔵HDDに対してセットアップする場合と何らと言っていいほど変わりません。usbデバ
私の場合、こんな感じです。
自分の環境に適宜合わせて下さい。
※以下の(hd1,0)とは、作業をおこなったPCにとっての2番目のハードディスクの1番目のパーティションを意味します。リムーバルなUSBハードディスクもしくはUSBメモリが2番目のハードディスクとして認識されているということになります。(hd1,0)との表記につ
&aname(single-stage-type);
[[&size(17){''&color(Blue){1段階ブート};''};>multipleboot]]&size(17){''&color(Blue){の場合、};''};
# grub
GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p
(hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"...
succeeded
Done.
grub>quit
※setup (hd1)は母艦PCにとっての2番目のハードディスクのMBRにgrubのstage1をセットアップする(書き込む)ことを意味します。作業時にUSBハードディスクもしくはUSBメモリが何番目のハードディスクと認識されていようとUSBブートに直接関係はありません。
&aname(dual-stages-type);
&color(Red){↓※以下の作業を始めておこなう方は、それまでに確実に[[&color(Red){%%%2段階ブート%%%};>multipleboot]]が何かを理解し、自分で[[&color(Red){%%%MBM%%%};>mbm]]等のMBR専用のブートローダをインストールする必要があることを理解してから作業
[[&size(17){''&color(Blue){2段階ブート};''};>multipleboot]]&size(17){''&color(Blue){の場合、};''};
2段階ブートの場合、たとえばこのように、
# grub
grub> root (hd1,0) ←rootで指定するのはmenu.lst(grub.conf),stage2等の場所
grub> setup (hd1,0) ←setupで指定するのはgrub(grubのstage1)の書き込み先
setupで指定するデバイスをハードディスク(の先頭)ではなくパーティション(の先頭)とします。
上は母艦上の作業としてのサンプルですが、
普通にLinuxをブートし、そのOS上でブートの方式を1段階ブートから[[%%%2段階ブート%%%>multipleboot]]に変更する場合であれば、たとえば、
# grub
grub> root (hd0,0) ←rootで指定するのはmenu.lst(grub.conf),stage2等の場所
grub> setup (hd0,0) ←setupで指定するのはgrub(grubのstage1)の書き込み先
こんな感じになります。もちろん詳細は適宜自身の環境に合わせて下さい。
マルチブート環境の場合、↑このように、[[grubをPBR(パーティションの先頭セクタ)にセットアップする>multipleboot]]ことを強く推奨します。
&aname(grub1_rescue);
** grub-legacy(grub ver. 0.97)の、レスキュー時等の(ブートした環境とは別の環境への)セットアップ [#x960025d]
マルチブートするなら[[%%%2段階ブートに統一して%%%>multipleboot]]、[[%%%MBM%%%>mbm]]を使用しましょう。[[%%%MBM%%%>mbm]]は、WindowsがインストールするMicrosoft謹製のMBR用ブートローダやgrubのchainloader機能の上位互換となる高機能なブートローダ
----
|COLOR(BLUE):BGCOLOR(LightYellow):|c
|以下のような手順は、リストア時など、他のOSから別のOSのgrubを再設定する場合特有のものです。[[&color(Blue){1段階ブートから2段階ブートに変更する};>multipleboot]]場合など、単純にgrubを再設定するだけなら[[%%%&color(Blue){こんな感じの作業};%%%
#br
|COLOR(Red):BGCOLOR(LightYellow):|c
|(2008-2-27追加)最近はどのLinuxディストリビューションもgrub0.97を採用しているようなので、あまり以下の手順は必要ないようです。[[&color(Red){%%%こんな感じの作業%%%};>#dual-stages-type]]でうまくいかなかった場合のみ、以下の手順を実行した方がい
新しいHDDにシステム全体をレストアしたり(grubのセットアップ先がMBR,PBRの場合共通)、別の領域にOSを引越したり(同MBR,PBRの場合共通)、stage2ファイルを上書きしたり(同PBRの場合)した際にはgrubの再セットアップが必要となります。MBRにセットアップする
+grubの再セットアップ前に、レストアされた側の/boot/grubディレクトリを、レストアされた側のファイルシステム上にバックアップしておきます
+レストアされた側の/boot/grubディレクトリ内のstage1、必要なstage1.5、stage2を、''レストアする側から同名のファイルをコピーして''上書きします
+(勿論レストアする側の)grubコマンドでgrubをセットアップします([[参考>#grub1_simple_setup]])
+レストアされた側のOSを起動後、バックアップしておいたgrubディレクトリからファイルをコピーして、先に上書きしてしまったファイル群を元に戻すか、boot/grubディレクトリ全体をバックアップしておいたものと入れ替えることで、/boot/grubをバックアップ前
+(勿論レストアされた側のOS上で、)grubを再セットアップします([[参考>#grub1_simple_setup]])
COLOR(BLUE):※grubをPBRにセットアップした場合はstage1.5は使われません。
COLOR(BLUE):※[[&color(Blue){ディストリビューションによる設定ファイル名の違い};>multipleboot#grub_conf]]も頭に入れておいたほうが望ましいです。特に、上に書いた手順を自分なりにアレンジしたい場合には不可欠な知識だと思います。
** grub-legacyでのハードディスクの表現 [#m423f92c]
&aname(grub1_express);
SATAのPCでは特殊な設定をしていない限り、以下の表の対応が成立します。
&color(Red){grub2とgrub1ではハードディスクの表現が異なります。};
|CENTER:一般的な表現|CENTER:grub1上での表記|Linux上でのSATA接続の場合のデバイス名|h
|1番目のハードディスク※|CENTER:(hd0)|CENTER:/dev/sda|
|1番目のハードディスク※の第1パーティション|CENTER:(hd0,0)|CENTER:/dev/sda1|
|1番目のハードディスク※の第2パーティション|CENTER:(hd0,1)|CENTER:/dev/sda2|
|1番目のハードディスク※の第3パーティション|CENTER:(hd0,2)|CENTER:/dev/sda3|
|1番目のハードディスク※の第4パーティション|CENTER:(hd0,3)|CENTER:/dev/sda4|
|1番目のハードディスク※の第5パーティション|CENTER:(hd0,4)|CENTER:/dev/sda5|
|1番目のハードディスク※の第6パーティション|CENTER:(hd0,5)|CENTER:/dev/sda6|
|1番目のハードディスク※の第7パーティション|CENTER:(hd0,6)|CENTER:/dev/sda7|
|2番目のハードディスク※|CENTER:(hd1)|CENTER:/dev/sdb|
|2番目のハードディスク※の第1パーティション|CENTER:(hd1,0)|CENTER:/dev/sdb1|
|2番目のハードディスク※の第2パーティション|CENTER:(hd1,1)|CENTER:/dev/sdb2|
|2番目のハードディスク※の第3パーティション|CENTER:(hd1,2)|CENTER:/dev/sdb3|
|2番目のハードディスク※の第4パーティション|CENTER:(hd1,3)|CENTER:/dev/sdb4|
|2番目のハードディスク※の第5パーティション|CENTER:(hd1,4)|CENTER:/dev/sdb5|
※ハードディスクにはUSBメモリやUSB接続のSDカードやUSBアダプタを介したCF等も含みます。内蔵・外付けの区別はありません。
現在は各ハードディスクにパーティションを最高16個作成できます。ただしそのうち1個は拡張領域となるのでファイルシステムとして確保できる数は最大15となります。
#br
* ご要望、ご意見、質問を下のフォームにどうぞ&br;(でもここより、[[掲示板>board]]や[[書き込みフォーム>form]]のページに書いて頂いた方が気づき易いと思います。) [#g278213f]
#areaedit(nofreeze,noauth,btn:[修正(書き間違った場合にご利用下さい)])
- 貴殿に同意 grub2 で痛い目にあった。 -- [[naka]] &new{2012-11-19 (月) 06:08:19};
- ”grub2 の場合はこちら” で --force を使う手 目からうろこ 有難うございました。 -- [[Leo]] &new{2014-05-17 (土) 22:25:12};
- Debian8とArchlinuxをデュアルブートにしたく検索していたところHPにたどり着きましたが -- [[kkuma]] &new{2015-08-25 (火) 11:55:36};
- あら改行出来なかったすいません。それで現状で一段ブートになっているものを2段にしたいにですが例が多すぎてどうすれば良いか良く分かりません。 -- [[kkuma]] &new{2015-08-25 (火) 11:57:59};
- まず現状把握です。HDDもしくはSSDはMSDOS形式の(fdiskコマンドでパーティションの割り具合が参照できる)パーティションテーブルですよね。それが前提です。次に、Debian8、Archlinuxのどちらが“削除したら、もう一方も起動できなくなるOS”ですか? 大概gr
- 詳細な情報にとても助かっています。もしご存知でしたら教えていただきたいのですが・・・。最新のManjaro Linux 15.09ではinitrdを2つ指定するようです。Manjaro Linux自身のupdate-grubは成功しますが、他のパーティションにインストールしてあるディス
- grub-mkconfigのソースは解析していないのですが、Mnjaro以外の(普通の)Linuxのgrub-mkconfigが、「一つのカーネルに対応するinitedが2個」だと気づかない(認識しない)のは当然だと思います。何十年間もカーネル1個に対してラムディスク1個の関係なので、そ
- そうですね、grub2はいずれソースコードの改良が追いついて行かないのではと感じています。先ほど、Manjaro Linuxを再インストールして別パーティションのディストリビューションからupdate-grubしたら、起動できる方のinitrdを一つですが選びました。うー
- この問題の影響範囲はあくまでもgrub-mkconfigが生成するテキストファイルのみにとどまります。いろいろ工夫できるでしょう。また今のところはManjaro Linuxをrescue Linuxにすればそう困ることもないでしょう。 -- [[disklessfun]] &new{2015-11-21 (土) 0
#comment
#areaedit(end)
ページ名: