お知らせ

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

#1 2010-01-29 08:00:18

mako999
メンバ
登録日: 2009-08-12

GRUB2 OS検出の法則に関して

 質問は初めてとなります。宜しくお願いいたします。投稿が慣れていないことから、コード等不慣れな点がありお許しください:)

導入そのものは完了しており、お伺いしたい内容は、件名の GRUB2 OS検出の法則もしくはルールになります。

HDD構成は以下です。

モデル: ATA Hitachi HDT72503 (scsi)
ディスク /dev/sda: 320GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 32.3kB 57.9GB 57.9GB primary ntfs
2 57.9GB 320GB 262GB extended
5 57.9GB 66.3GB 8390MB logical linux-swap(v1) swap
6 66.3GB 66.8GB 518MB logical ext4
7 66.8GB 99.9GB 33.0GB logical ext4
8 99.9GB 131GB 31.5GB logical ext4 boot
9 131GB 163GB 31.5GB logical ext4
10 163GB 242GB 79.7GB logical ntfs
11 242GB 320GB 77.6GB logical ntfs

基本区画 sda1 Windows/XP
拡張領域 sda2
論理区画 sda5 swap
sda6 Ubuntu 9.10 64bit /boot
sda7 Ubuntu 9.10 64bit /
sda8 Fedora FC12 32bit /
sda9 Fedora FC12 64bit /
sda10 NTFS D
sda11 NTFS E

ブートローダーはUbuntu 9.10 GRUB2になります。上記の状態にて、Fedora FC12 32bitはそのままUbuntu 9.10を導入することによりGRUB2にマッピングされたのですが、Fedora FC12 64bitは $ sudo grub-mkdevicemap を実施し、さらに $ sudo update-grub を行っても認識されませんでした。

ここで、Fedora FC12 64bitに関しては

コード:

$ sudo gedit /etc/grub.d/40_custom

を実行し

コード:

menuentry "Fedora (Constantine 64bit) (on /dev/sda9)" {
insmod ext2
set root=(hd0,9)
chainloader +1
}

を追加することで、二段階ブートは可能です。

 そこでなのですが、GRUB2のルールとして Ubuntu,Win,Other1まではマッピングし、それ以上は上記のように加えていくことがルールなのでしょうか?

オフライン

 

#2 2010-01-29 11:21:20

jackalope
メンバ
登録日: 2009-01-01

Re: GRUB2 OS検出の法則に関して

make999さん による投稿:

お伺いしたい内容は、件名の GRUB2 OS検出の法則もしくはルールになります。

/etc/grub.d/30_osproberです。

オフライン

 

#3 2010-01-29 12:14:30

mako999
メンバ
登録日: 2009-08-12

Re: GRUB2 OS検出の法則に関して

 jackalopeさんへ ご返信有難うございます。

jackalope による投稿:

/etc/grub.d/30_osproberです。

という内容でしたので、中身を拝見したのですが、

echo "Found ${LONGNAME} on ${DEVICE}" >&2
found_other_os=1



echo "Found ${LONGNAME} on ${DEVICE}" >&2
found_other_os=2

にし、sudo update-grubを実施しました。しかし、Fedora FC12 64bitは検出されないようです(/etc/grub.d/40_customは一度消しています)。わたしが修正した場所は見当違いであり、違う場所を変更すべきでしょうか?

オフライン

 

#4 2010-01-29 12:31:35

weyk
メンバ
登録日: 2009-04-03

Re: GRUB2 OS検出の法則に関して

 何を意図して修正したのかわかりませんが、通常、内部変数を適当に変更しても、悪くなることは合っても、動作が改善する可能性は無いです。
# 特に、grub関連で動作が悪くなった場合、致命的(=起動できない)な可能性があります。

 grub2では、全デバイス(ドライブ)の、全パーティションの中を参照して、(特に、20_osproberのLinux担当分部では)Linuxのroot(かboot)と判断されると自動的にメニューに載る という仕組みです。
 、「載らないものを載せる」には、なぜ載らないのかを調べて、載るようにロジックそのものを修正する ということが必要になる可能性が高いです。
# なぜ載らないのかは、私にもわかりません(汎用的に検出する為、結構複雑です)。実際に探し回ったりする役割は、os-proberというパッケージが担っています。

そうでは無い場合(そこまでするつもりは無い)、40_cutstomに決めうちで書き込む というのが次善の策と言うことになるかとおもいます。
# あとは、将来のアップデートでは良くなると良いな と祈るぐらいしかないです。

オフライン

 

#5 2010-01-29 13:07:42

mako999
メンバ
登録日: 2009-08-12

Re: GRUB2 OS検出の法則に関して

 weykさんへ ご返信有難うございます。

weyk による投稿:

 何を意図して修正したのかわかりませんが、通常、内部変数を適当に変更しても、悪くなることは合っても、動作が改善する可能性は無いです。

意味合いはわかります。

#2 の

jackalope による投稿:

/etc/grub.d/30_osproberです。

と書かれていることから、何かしらのヒントがあるのでは?と考えました。

weyk による投稿:

なぜ載らないのかは、私にもわかりません(汎用的に検出する為、結構複雑です)。実際に探し回ったりする役割は、os-proberというパッケージが担っています。

同じく、それをわからないため出来れば知りたいのです。よって質問した次第です。

#1に40_cutstomも書いておりますが、決めうちとは考えておりません。

情報をお知りの方がいれば幸いだと思っております。

オフライン

 

#6 2010-01-29 13:08:49

mako999
メンバ
登録日: 2009-08-12

Re: GRUB2 OS検出の法則に関して

それをわからないため ではなく それがわからない の 間違いです。申し訳ありません。

オフライン

 

#7 2010-01-29 13:52:47

weyk
メンバ
登録日: 2009-04-03

Re: GRUB2 OS検出の法則に関して

 こんにちは。

mako999 による投稿:

#2 の

jackalope による投稿:

/etc/grub.d/30_osproberです。

と書かれていることから、何かしらのヒントがあるのでは?と考えました。

この中とそこから呼び出されるプログラムで判断している と言う点では、関連があります。
これは、jackalopeさんが引用している通り、

mako999 による投稿:

お伺いしたい内容は、件名の GRUB2 OS検出の法則もしくはルールになります。

への回答ということになるかとおもいます。ここに書かれているロジック(とここから呼び出されるロジック)が、検出する法則でありルールです。ただし、ルールを簡単に変更する方法は無いようです。後者のようなもの(ロジック本体ではなく、設定ファイルの分部)のようなもので、法則やルールを変更できるオプションが存在するものを期待していたのかな と推測しました。
# いくつか、オプションは設定ファイル(/etc/default/grub でしたっけ?)で変更できるものもありますが、検出可能なものを、大雑把な範囲で載せないようにする言う機能です。

#1に40_cutstomも書いておりますが、決めうちとは考えておりません。

#1の、40_customに記載している方法について、他の動的に生成されるメニューの部分と異なり、そのパーティション(root=に固定で記載)にそのOS(メニューの選択名に固定で記載)が存在し、かつchain loadで起動可能である ということを前提としている点を「決め打ち」と表現いたしました。

mako999 による投稿:

weyk による投稿:

なぜ載らないのかは、私にもわかりません(汎用的に検出する為、結構複雑です)。実際に探し回ったりする役割は、os-proberというパッケージが担っています。

同じく、それをわからないため出来れば知りたいのです。よって質問した次第です。

もし、一律FC12の64bitsが載らない(検出できない)とすると、障害としてなにかあるかとおもったんですが、情報を見つけることは出来ませんでした。あとは、パーティション数が多い(拡張の4番目がOKで5番目がNG)ので、なにか制限でもあるのかという点も気になりますが、そういった制限は見た記憶がありません。・・・他にUbuntu9.10とfc12(64bits)のDualブートでgrub2から認識されている人がいれば一報欲しい感じです。
# 私も原因が知りたいです。dual bootを試すところまではなんとか環境が作れますが(早くても明日ごろ)、それで動いてしまうと、調査が手詰まりっぽいのが難点です・・・

あと、先ほどあまり気にしてなっかたのですが、1点、確認させてください。
 FC12(64bits)を40_customに記載している部分ではchain loaderによる起動になっているようですが、grub2から動的に生成されるFC12(32bits)のエントリの方はどのように(kernelかchain loaderか)認識されているのでしょうか?また、FC12(64bits)のパーティションについて、grub2のkernelコマンドによる起動は可能かどうか確認済みでしたら、それも知りたいです。

オフライン

 

#8 2010-01-29 14:25:51

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: GRUB2 OS検出の法則に関して

此方では Karmic(32bit)とFedora12(64bit)の dual boot ですが,
update-grub によって,Karmic の grub.cfg に Fedora12 のエントリは追加されています.

コード:

egrep -A 7 "BEGIN .*30_os-prober" /boot/grub/grub.cfg
### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Fedora (2.6.31.12-174.2.3.fc12.x86_64) (on /dev/mapper/hoge-root)" {
    insmod ext2
    set root=(hd0,1)
    search --no-floppy --fs-uuid --set f516bc38-a9d4-428e-bd6c-0d489586ff0d
    linux /vmlinuz-2.6.31.12-174.2.3.fc12.x86_64 root=UUID=9f668dea-de73-48b8-9e7e-c789988e6e29 ro quiet rhgb LANG=ja_JP.UTF-8 KEYTABLE=jp106
    initrd /initramfs-2.6.31.12-174.2.3.fc12.x86_64.img
}

/etc/grub.d/grub_os-prober によると,まず os-prober コマンドの結果を元に linux-boot-prober が実行されます.

コード:

$ sudo os-prober 
/dev/mapper/hoge-root:Fedora release 12 (Constantine):Fedora:linux
$ sudo linux-boot-prober /dev/mapper/hoge-root 
/dev/mapper/hoge-root:/dev/sda1:Fedora (2.6.31.12-174.2.3.fc12.x86_64):/boot/vmlinuz-2.6.31.12-174.2.3.fc12.x86_64:/boot/initramfs-2.6.31.12-174.2.3.fc12.x86_64.img:root=UUID=9f668dea-de73-48b8-9e7e-c789988e6e29 ro quiet rhgb LANG=ja_JP.UTF-8 KEYTABLE=jp106
... 以下略 ...

これら2つのコマンドはシェルスクリプトです.斜めよみしたところでは,linux-boot-prober は grub の menu.lst や grub2 の grub.cfg を捜索し,そのエントリを Ubuntu 向けに変換しています.

!!老婆心ながら注意!!
Fedora12 の grub2 では /etc/grub.d/10_linux に該当するスクリプトには(多分現在も)問題が有り,
update-grub で生成されたエントリに initrd の項目が追加されないことを此方では確認しています.
Fedora12 に grub2 をインストールする場合は注意が必要です.

オフライン

 

#9 2010-01-29 14:50:20

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: GRUB2 OS検出の法則に関して

突然の電話で慌てて投稿してしまいました.訂正します.

einundzwanzighundertsechs による投稿:

/etc/grub.d/grub_os-prober によると,まず os-prober コマンドの結果を元に linux-boot-prober が実行されます.

etc/grub.d/30_os-prober によると,os-prober コマンドの結果を元に linux-boot-prober コマンドが実行されます.

einundzwanzighundertsechs による投稿:

これら2つのコマンドはシェルスクリプトです.斜めよみしたところでは,linux-boot-prober は grub の menu.lst や grub2 の grub.cfg を捜索し,そのエントリを Ubuntu 向けに変換しています.

linux-boot-prober は grub の menu.lst や grub2 の grub.cfg を捜索して,そのエントリの項目をコマンド例にあるように : で繋いで出力します.
それを Ubuntu の grub.cfg 向けに変換するのは /etc/grub.d/30_os-prober の担当です.

オフライン

 

#10 2010-01-29 15:01:40

mako999
メンバ
登録日: 2009-08-12

Re: GRUB2 OS検出の法則に関して

 weykさん、einundzwanzighundertsechsさん
こんにちは。情報有難うございます。

あまりにがっかりする展開なので、とても報告しにくいのですが私のチョンボが判明しました。

weykさんのアドバイス通り、 GRUBコマンドで立ち上げようとしました。すると、ext3マウント・・・・・・ ????
確かにパーチションを細かく細分化した際、ext3でフォーマットしたと記憶しています。その後インストール時にext4にフォーマットしたつもりなのですが。

 さらに64bit上のFEDORAを立ち上げて再度確認すると、ext4。 よって、どこかでGRUB2側ではext3としてしまい、その後インストールした64bitは一応ext4なのですが、不可解なことにGRUB側はext3認識だったようです。よってこれはわたしのチョンボだと思います。確認不足でお恥ずかしいです。導入してから日も経過していないことから、全部入れ直すかもしれません。

 weykさん デバッグ手段有難うございます。恐らくこれが起因だと思われます。

今日、64bit を入れ直しますが、恐らく明日以降ご報告出来ると思います。すみません。時間帯が恐らく逆です。

本当にがっかりする悪いお話で申し訳ありません。ご協力及び、お時間をとっていただき有難うございました。

オフライン

 

#11 2010-01-30 01:08:54

mako999
メンバ
登録日: 2009-08-12

Re: GRUB2 OS検出の法則に関して

weykさん、einundzwanzighundertsechsさん こんばんは

すみません。#10では、GRUB boot画面でext2を勝手に見間違え、勘違いから、すべてクリーンインストールを実施してしまいました。ただこれはわたしの勘違いから始まり、テストに苦痛は感じておりません。よって、失礼ながら少しお話を戻します。

weyk による投稿:

 あと、先ほどあまり気にしてなっかたのですが、1点、確認させてください。
 FC12(64bits)を40_customに記載している部分ではchain loaderによる起動になっているようですが、grub2から動的に生成されるFC12(32bits)のエントリの方はどのように(kernelかchain loaderか)認識されているのでしょうか?

コード:

menuentry "Fedora (2.6.31.5-127.fc12.i686.PAE) (on /dev/sda9)" {
    insmod ext2
    set root=(hd0,9)
    search --no-floppy --fs-uuid --set 6d130b38-245b-4963-896c-eeb9c60e7644
    linux /boot/vmlinuz-2.6.31.5-127.fc12.i686.PAE ro root=UUID=6d130b38-245b-4963-896c-eeb9c60e7644 nomodeset LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 rhgb quiet
    initrd /boot/initramfs-2.6.31.5-127.fc12.i686.PAE.img
}
### END /etc/grub.d/30_os-prober ###

初期段階となります(カーネルアップをしていません)。

weyk による投稿:

また、FC12(64bits)のパーティションについて、grub2のkernelコマンドによる起動は可能かどうか確認済みでしたら、それも知りたいです。

まず定義を記載する際、間違えました。

コード:

/etc/grub.d/40_custom
menuentry "Fedora (Constantine 64bit) (on /dev/sda8)" {
insmod ext2
set root=(hd0,8)
chainloader +1
}

の間違いです。申し訳ありません。grub.d/40_customを外した状態、及びつけたままの状態、さらに32bit PAEで root コマンドから起動を試みましたが、全て起動途中で止まる状態でした。これは私のコマンドミスが考えられます。ただし、GRUB2から直で起動しようとしていることは確認出来ます。

einundzwanzighundertsechs による投稿:

Fedora12 に grub2 をインストールする場合は注意が必要です.

了解しました。

ここからは自分でのテストです (尚 テストしている際、区画構成は変わりませんが、OSが32bitになったりします)

PBR sda8 Fedora FC12 32bit /,PBR sda9 Fedora FC12 64bit / をまず導入しました。

1.Japan teamの32bit Ubuntu 9.10 をsda6 sda7に導入(MBR)。同じ結果となりました。よって媒体の線は薄いと感じられます。

2. 27日に一度、9.10をPBRとし、MBRの動作確認を行いました。その際は不思議なことにすべてブート可能でした。

3. 問題のsda8にJapan teamのUbuntu 9.10 32bit をPBRで入れてみました。$ sudo update-grubを実行すると、正しくマッピングされます。すなわち4OSがUbuntu 9.10 GRUB (MBR) から正しくチェーンされていることがわかります。

・今回の反省点

weykさんがご指摘された通り、かなり細分化した構成にしております。最初にGRUB2実装OSで試すべきでした。

わたしなりの解釈

これはわたしの環境、そして確実な展開とは思えませんが、こう考えています。GRUB1を実装しているFedora FC12の場合、不思議なことにひとつだけであればチェーンされます。しかし二つ入れた場合、/etc/grub.d/40_customを使って逃げる手段が比較的妥当では と考えています。

weykさん、本当に申し訳ありませんでした。ネット検索はわたしも行っていたのですが、なかなか該当する事例 (いないですよね) がみつからず、恐らく似た検索作業をさせてしまい申し訳ありません。

質問から相談という形になってしまいましたが、お付き合いしていただき有難うございました。

なお、件名とは若干違う気もしますが、本人の中ではある程度納得出来たことから、解決済み と扱っていただいて宜しいでしょうか?

さらに今後も懲りずに?宜しくお願いいたします。

オフライン

 

#12 2010-01-30 07:37:04

mako999
メンバ
登録日: 2009-08-12

Re: GRUB2 OS検出の法則に関して

mako999 による投稿:

2. 27日に一度、9.10をPBRとし、MBRの動作確認を行いました。その際は不思議なことにすべてブート可能でした。

と書いてしまいましたが、 MBMの動作確認を行いました の間違いです。申し訳ありません。 

オフライン

 

Board footer

Powered by FluxBB