
Ubuntu日本語フォーラム

ログインしていません。
マシンを新調して Win7 専用にしたので,古いマシンを PC-UNIX 専用にすることにしました.Ubuntu 9.10 (x86) を以下のようなパーティション構成でインストールしました.
/dev/sda1 /boot
/dev/sda5 /
/dev/sda6 /home
/dev/sda7 /var
/dev/sda8 swap
ここで,GRUB2 を /boot にインストールしたのですが,起動時にメニューが出てきません.Windows などの他の OS が入っていないので当然か?とも思ったのですが,カーネルをアップデートして,/boot に複数のカーネルファイルがある状態で update-grub を実行した後でもメニューが出てきません.
どの設定ファイルを修正すれば良いのでしょう?memtest も実行させたいので,ちょっと不便.
オフライン
この辺を参照下さい。
https://forums.ubuntulinux.jp/viewtopic.php?id=6092
私は、/etc/default/grubの最初の部分を以下のように書き換えました。
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAULT=0 #GRUB_HIDDEN_TIMEOUT="3" #GRUB_HIDDEN_TIMEOUT_QUIET=false GRUB_TIMEOUT="3"
これでメニューはでています。
適切な設定かどうかはさておき。。
オフライン
hmatsue さん
ご回答ありがとうございます./etc/dafaults/grub を書き換えるのですね.やってみます.
GRUB2 では,このあたりの設定や,他の OS が見つからない場合の挙動が GRUB のころとだいぶ変わってしまったので,戸惑っています.フロッピーにもインストールできなくなったし.
オフライン
hmatsue さん
おかげさまでメニューが出るようになりました.複数のカーネルファイルも選択できるようになりました.
しかし,memtest86+ はメニューに出てくるし /boot に memtest86+.bin というファイルがあるにもかかわらず,メニューで選択してもそういうファイルは見つからないといって起動できません.なぜでしょう?
オフライン
おかしいですね。試しに自分の環境でmemtest86+を実行してみましたが、こちらでは問題無く実行できました。
/boot/grub/grub.cfgの中に下記の記述があります。
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
linux16 /boot/memtest86+.bin
}同様の記述がありますでしょうか。ある場合は、端末で、
$ file /boot/memtest86+.bin
などとして、
/boot/memtest86+.bin: Linux x86 kernel
のような出力がでるか確認してみて下さい。
記述が無い場合は、なんでしょう。すんません。今のところアイデアがないです。。
オフライン
hmatsueさん,いろいろご教示いただき,ありがとうございます.
試してみました.まず /boot において sudo update-grub を実行した時に出てくるメッセージがおかしい.
Found memtest86+ image: /memtest86+.bin
とでてきますが,これは正しくは
Found memtest86+ image: /boot/memtest86+.bin
であるべきでしょう.それでは?と思い,次に /etc/grub.d/20_memtest86+ を疑いました.
if test -e /boot/memtest86+.bin ; then
MEMTESTPATH=$( make_system_path_relative_to_its_root "/boot/memtest86+.bin" )
echo "Found memtest86+ image: $MEMTESTPATH" >&2
cat << EOF
menuentry "Memory test (memtest86+)" {
linux16 $MEMTESTPATH
}
menuentry "Memory test (memtest86+, serial console 115200)" {
linux16 $MEMTESTPATH console=ttyS0,115200n8
}
EOF
fiとなっているうち,make_system_path_relative_to_its_root が正しく働いていないように見えます.これを無理やり変更して,
MEMTESTPATH="/boot/memtest86+.bin"
と決め打ちして,update-grub を実行すると,
Found memtest86+ image: /boot/memtest86+.bin
と正しくメッセージが出ます./boot/grub/grub.cfg を見ると,
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###と正しく出ているので,目出度し目出度しと思ってリブートしますが,メニューで memtest86+ を選んでも,ファイルが無いというエラーが出ます./boot/memtest86+.bin は存在し,file コマンドで調べると,Linux x86 kernel と出てきますので,間違ってはいないと思うのですが・・・
オフライン
/dev/sda1 /boot
/dev/sda5 /
/dev/sda6 /home
/dev/sda7 /var
/dev/sda8 swap
この辺のパーティションの切り方の問題でうまく動かないのでしょうか。
試してみました.まず /boot において sudo update-grub を実行した時に出てくるメッセージがおかしい.
コード:
Found memtest86+ image: /memtest86+.bin
Ubuntuが起動する前は、/dev/sda1がどこにマウントされるか判らないので、grubからは/dev/sda1の「/」がgrub領域になっているように見えます。そのためわざわざ/memtest86+.binとして出力されているのではないかと思います。
が、元々の状態で/memtest86+.binになっていて、それでも起動しないのでしたっけ。
オフライン
パーティション決め打ちでよければ /etc/grub.d/20_memtest86+ で
menuentry "Memory test (memtest86+)" {
set root=(hd0,1) # 各自の環境に合わせて
linux16 $MEMTESTPATH
}
でどうでしょう
オフライン
しかし,memtest86+ はメニューに出てくるし /boot に memtest86+.bin というファイルがあるにもかかわらず,メニューで選択してもそういうファイルは見つからないといって起動できません.なぜでしょう?
bootを分けているので/dev/sda5にあるbootディレクトリはマウント用で中身は空です。
menuentry "Memory test (memtest86+)" {
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set ****-****-****
linux /boot/memtest86+.bin
****-****-****は/dev/sda1のUUID
オフライン
皆様,
皆様のおかげでだいぶ分かってきました.最後の hir0 さんのコメントがどうやら核心をついているような気がします.やはり UUID を指定しなければならないのでしょうか?このあたりは GRUB2 の改善項目であるような気がします.
今日は,事情があって確認することができませんが,明日以降,試してみてご報告したいと思います.
どうもありがとうございました.
オフライン
/boot が別のパーティションなので,memtest86+.bin をロードする時のパスは/boot無しの
linux16 /memtest86+.bin
が正しいのです.ですから私は「grub 変数 root の設定がおかしい」のではと疑いました.
私の grub.cfg では
menuentry "Ubuntu, Linux 2.6.31-19-generic" {
recordfail=1
if [ -n ${have_grubenv} ]; then save_env recordfail; fi
set quiet=1
insmod ext2
set root=(hd1,1)
search --no-floppy --fs-uuid --set …
linux /boot/vmlinuz-2.6.31-19-generic root=UUID=… ro quiet splash
initrd /boot/initrd.img-2.6.31-19-generic
}
...中略...
menuentry "Memory test (memtest86+)" {
linux16 /boot/memtest86+.bin
}となっています.Memory test のエントリにはカーネルのエントリに有る set root=… とかが有りません.
ですから,逆に何故私の環境では memtest86+ が起動可能なのかを考えました.
grub.cfg のずっと前の部分に
insmod ext2 set root=(hd1,1) search --no-floppy --fs-uuid --set … if loadfont /usr/share/grub/unicode.pf2 ; then
とがありここで 変数 root が設定されています.これらの行の由来は /etc/grub.d/00_header の
case x${GRUB_TERMINAL_OUTPUT} in
xgfxterm)
# Make the font accessible
prepare_grub_to_access_device `${grub_probe} --target=device ${GRUB_FONT_PATH}`
cat << EOF
if loadfont `make_system_path_relative_to_its_root ${GRUB_FONT_PATH}` ; thenの部分です.つまりここでの insmod …,set root=… と search は loadfont コマンドがフォントを見つけるようにするために挿入されていて,決してデフォルト値の設定などでは無いと解りました.
私の環境の様に /boot と / が同じパーティションであれば memtest86+.bin の存在するパーティションが 変数 root のデフォルト値であるかの様に設定され,問題に気づきません.
goldengriffin さんの場合 /boot → (hd0,1) と / → (hd0,5) ですから,/usr/share/ 以下のフォントファイルをロードするためには loadfont の前には,
set root=(hd0,5) search --no-floppy --fs-uuid --set …
とあるはずです.
私の結論では,update-grub は /boot が別パーティションであることを考慮して,Memory test のエントリについても
menuentry "Memory test (memtest86+)" {
insmod ext2
set root=…
search --no-floppy --fs-uuid --set …
linux16 /boot/memtest86+.bin
}の様なコードを生成するべきだと思います.これは /etc/grub.d/20_memtest86+ のバグだと思います.
オフライン
einundzwanzighundertsechs さま,他の皆様
おかげさまで,とりあえず動くようになりました.決め手となったのは,やはり einundzwanzighundertsechs さんが最後に示唆していただいた部分です.これを生成するように,/etc/grub.d/20_memtest86+ を以下のように書き直しました.
if test -e /boot/memtest86+.bin ; then
MEMTESTPATH=$( make_system_path_relative_to_its_root "/boot/memtest86+.bin" )
echo "Found memtest86+ image: $MEMTESTPATH" >&2
cat << EOF
menuentry "Memory test (memtest86+)" {
# -- insertion start --
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set ...
# -- insertion end --
linux16 $MEMTESTPATH
}本当は,UUID を自動生成するようなコードを書かなければならないのでしょうが,10_linux を読んでもよく理解できなかったので,/boot/grub/grub.cfg からコピーして決め打ちしてあります.
これはやはり 20_memtest86+ のバグと思ってよいのでしょうね.いずれにせよ,大変ありがとうございました.勉強になりました.
オフライン