web-dev-qa-db-ja.com

再起動後にサーバーが起動してgrubプロンプトを表示する

Ubuntu Server 10.04.4 LTS
他のオペレーティングシステムはインストールされていません
ハードウェアRAID(3Ware 9650SE)
単一パーティション(/ dev/sda2)とスワップ(/ dev/sda3)
Grubバージョン:GNU GRUB 1.98-1ubuntu13

最近のカーネル更新を適用するため、サーバーは再起動後に常にgrubプロンプトで起動します。
ブートメニューやエラーメッセージはありません。grub >プロンプトだけです。
次のようにしてシステムを起動できます。

set root=(hd0,2)
linux /vmlinuz root=/dev/sda2 ro
initrd /initrd.img
boot

いったん起動したら、update-grubを試しましたが、問題は解決しません。
私もgrub-install --recheck /dev/sdaを試しましたが、助けにもなりません。

何らかの理由で、常にgrubプロンプトから起動します。

私の/boot/grub/grub.cfg:

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  load_env
fi
set default="0"
if [ ${prev_saved_entry} ]; then
  set saved_entry=${prev_saved_entry}
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z ${boot_once} ]; then
    saved_entry=${chosen}
    save_env saved_entry
  fi
}

function recordfail {
  set recordfail=1
  if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi
}
insmod ext2
set root='(hd0,2)'
search --no-floppy --fs-uuid --set 1044722d-a8c7-4983-b6a4-f9faa3d4e79f
if loadfont /usr/share/grub/unicode.pf2 ; then
  set gfxmode=640x480
  insmod gfxterm
  insmod vbe
  if terminal_output gfxterm ; then true ; else
    # For backward compatibility with versions of terminal.mod that don't
    # understand terminal_output
    terminal gfxterm
  fi
fi
insmod ext2
set root='(hd0,2)'
search --no-floppy --fs-uuid --set 1044722d-a8c7-4983-b6a4-f9faa3d4e79f
set locale_dir=($root)/boot/grub/locale
set lang=en
insmod gettext
if [ ${recordfail} = 1 ]; then
  set timeout=-1
else
  set timeout=10
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.32-40-server' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='(hd0,2)'
    search --no-floppy --fs-uuid --set 1044722d-a8c7-4983-b6a4-f9faa3d4e79f
    linux   /boot/vmlinuz-2.6.32-40-server root=UUID=1044722d-a8c7-4983-b6a4-f9faa3d4e79f ro   quiet
    initrd  /boot/initrd.img-2.6.32-40-server
}
menuentry 'Ubuntu, with Linux 2.6.32-40-server (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='(hd0,2)'
    search --no-floppy --fs-uuid --set 1044722d-a8c7-4983-b6a4-f9faa3d4e79f
    echo    'Loading Linux 2.6.32-40-server ...'
    linux   /boot/vmlinuz-2.6.32-40-server root=UUID=1044722d-a8c7-4983-b6a4-f9faa3d4e79f ro single 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-2.6.32-40-server
}
menuentry 'Ubuntu, with Linux 2.6.32-33-server' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='(hd0,2)'
    search --no-floppy --fs-uuid --set 1044722d-a8c7-4983-b6a4-f9faa3d4e79f
    linux   /boot/vmlinuz-2.6.32-33-server root=UUID=1044722d-a8c7-4983-b6a4-f9faa3d4e79f ro   quiet
    initrd  /boot/initrd.img-2.6.32-33-server
}
menuentry 'Ubuntu, with Linux 2.6.32-33-server (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='(hd0,2)'
    search --no-floppy --fs-uuid --set 1044722d-a8c7-4983-b6a4-f9faa3d4e79f
    echo    'Loading Linux 2.6.32-33-server ...'
    linux   /boot/vmlinuz-2.6.32-33-server root=UUID=1044722d-a8c7-4983-b6a4-f9faa3d4e79f ro single 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-2.6.32-33-server
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
    insmod ext2
    set root='(hd0,2)'
    search --no-floppy --fs-uuid --set 1044722d-a8c7-4983-b6a4-f9faa3d4e79f
    linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
    insmod ext2
    set root='(hd0,2)'
    search --no-floppy --fs-uuid --set 1044722d-a8c7-4983-b6a4-f9faa3d4e79f
    linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
if [ ${timeout} != -1 ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep --interruptible 3 ; then
      set timeout=0
    fi
  fi
fi
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

/etc/grub.dまたは/ etc/default/grubのファイルを故意に編集したことはありません。

ここ数日、多くのgrub関連の投稿を読みましたが、ほとんどがupdate-grubを実行すると問題が解決すると主張しているようですが、それはうまくいきませんでした。

また、可能であれば次のカーネル更新が行われないようにしたいと思います。

最後に;サーバーはリモートデータセンターに存在します。リモートKVMアクセスがありますが、ライブCDからブートするのは難しいため、それを含まないソリューションが優先されます。 :-)

4
Darren Greaves

私は今これを見つけました。

ここの解決策は私のためにそれをしました: https://serverfault.com/questions/243343/headless-ubuntu-server-machine-sometimes-stuck-at-grub-men

/etc/grub.d/00_headerを変更し、recordfailセクションを次のように編集しました:

 if [\ $ {recordfail} = 1]; then 
 set timeout = $ {GRUB_TIMEOUT} 
 else 
 set timeout = $ {GRUB_TIMEOUT} 
 fi 
 EOF 

Sudo update-grubを実行して再起動し、Ubuntuを直接起動しました。ヤッピー!

5
Darren Greaves

https://serverfault.com/a/482020/158759 から:

Ubuntu 12.04 LTSには、/etc/default/grubで設定できる特定のオプションがあります。

たとえば、2秒のタイムアウト(無人の再起動によるハングを回避する)が必要な場合は、/etc/default/grubに次の行を追加するだけです。

GRUB_RECORDFAIL_TIMEOUT=2

その後update-grubを実行することを忘れないでください...

1
Alastair Irvine

サーバーをUbuntu 10.04から12.04にアップグレードしたところ、ソリューション(およびインターネットに散在する他のいくつかのソリューション)がまったく機能しませんでした。再起動時に常にgrub>メニューに戻りました。

最後に、しかし、私は物事が機能するようになった。私は2つのことをしなければなりませんでした:

Sudo apt-get install grub2 
Sudo grub-install /dev/sda

dpkg -l | grep grubにはgrub2-common以外は何も表示されなかったため、grub2をインストールしました-apt-cache search grubが返したgrub2コンポーネントが欠落していました。これはオプションかもしれませんが、バグレポートと回避策に基づいて、更新された12.04システムリポジトリからgrub2パッケージをインストールしました。

grub-installには、ロード元のディスクを選択しました(これは、たとえばfdisk -lまたはdfで見つけることができます)。パーティション番号は必要ありませんでした(つまり、disk + partition sda1の代わりにdisk sdaを選択しました)。

grub-updateを実行しませんでした。これは再起動時にすぐに機能しました。

コマンドを実行するために、OPの例とわずかに異なるだけで、システムを起動する必要がありました。

/ dev/sda1をターゲットとして想定:

grub>
root (hd0,1)  # "1" matches the partition number
linux /vmlinuz root=/dev/sda1 ro  #again, modify for the drive/partition 
initrd /initrd.img
boot

Grubメニューのオートコンプリートは、これらのオプションに役立ちました。たとえば、rootディレクティブで存在しないパーティションを指定できるとは思わない。

0
belacqua