内核更新后 Grub 不再启动(第二次了)

内核更新后 Grub 不再启动(第二次了)

几周前,我配置了一台双启动笔记本电脑,在磁盘的第三个分区上运行 Xubuntu 10.4(即我必须手动设置安装位置)。一切都很顺利,直到我安装了一堆自动更新(包括一个新的内核),这些更新是在 Wifi 终于正常工作后发现的。重启后,Grub 不再启动 Xubuntu(之前可以启动几次),而只是显示一个提示。我设法使用实时 CD 和一小时的互联网阅读修复了系统。

几周以来一切都很好,包括自动更新。昨天我通过自动更新获得了一个新内核。你猜怎么着?笔记本电脑后来拒绝启动。

在我看来,每次内核更新都会让我的系统无法启动。除了显而易见的“不要安装更新”之外,我还能如何防止这种情况发生?我还应该检查或监控该系统上的其他内容吗?或者我对内核更新的结论完全错误,我应该寻找导致这些症状的其他原因?

编辑:评论中要求的更多细节:我在更新和崩溃之间没有启动 Windows,所以对我来说,这似乎只与 Xubuntu 有关。Grub 是 Grub2(版本 1.98 左右)。/boot/grub/grub.cfg 如下所示:

#
# 请勿编辑此文件
#
# 它由 /usr/sbin/grub-mkconfig 使用模板自动生成
# 来自 /etc/grub.d 和 /etc/default/grub 中的设置
#

### 开始 /etc/grub.d/00_header ###
如果 [ -s $prefix/grubenv ]; 那么
  加载环境
设置默认值=“0”
如果 [ ${prev_saved_entry} ]; 那么
  设置 saved_entry=${prev_saved_entry}
  保存环境已保存条目
  设置上一个保存的条目=
  save_env 上一个_保存的条目
  设置 boot_once=true

函数保存默认值 {
  如果 [ -z ${boot_once} ]; 那么
    saved_entry=${选择}
    save_env saved_entry
}

函数记录失败 {
  设置记录失败=1
  如果 [ -n ${have_grubenv} ]; 那么如果 [ -z ${boot_once} ]; 那么 save_env recordfail; fi; fi
}
修改 ext2
设置根='(hd0,5)'
搜索--no-floppy--fs-uuid--set c1550ae8-66af-414c-874d-15cb43176ba5
如果 loadfont /usr/share/grub/unicode.pf2 ; 那么
  设置 gfxmode=640x480
  修改 gfxterm
  修改vbe
  如果终端输出 gfxterm ; 则为真 ; 否则
    # 为了向后兼容不具备以下功能的 terminal.mod 版本
    # 理解 terminal_output
    终端 gfxterm
修改 ext2
设置根='(hd0,5)'
搜索--no-floppy--fs-uuid--set c1550ae8-66af-414c-874d-15cb43176ba5
设置 locale_dir=($root)/boot/grub/locale
设置语言=de
修改 gettext
如果 [ ${recordfail} = 1 ]; 那么
  设置超时=-1
别的
  设置超时=10
### 结束 /etc/grub.d/00_header ###

### 开始 /etc/grub.d/05_debian_theme ###
设置菜单颜色正常=白色/黑色
设置 menu_color_highlight=black/light-gray
### 结束 /etc/grub.d/05_debian_theme ###

### 开始 /etc/grub.d/10_linux ###
菜单项'Ubuntu,mit Linux 2.6.32-24-generic'--class ubuntu --class gnu-linux --class gnu --class os {
    記錄失敗
    修改 ext2
    设置根='(hd0,5)'
    搜索--no-floppy--fs-uuid--set c1550ae8-66af-414c-874d-15cb43176ba5
    linux /boot/vmlinuz-2.6.32-24-generic root=UUID=c1550ae8-66af-414c-874d-15cb43176ba5 ro 安静飞溅
    initrd /boot/initrd.img-2.6.32-24-generic
}
菜单项“Ubuntu,使用 Linux 2.6.32-24-generic(扩展模式)”--class ubuntu --class gnu-linux --class gnu --class os {
    記錄失敗
    修改 ext2
    设置根='(hd0,5)'
    搜索--no-floppy--fs-uuid--set c1550ae8-66af-414c-874d-15cb43176ba5
    echo ‘Linux 2.6.32-24-generic 已下载 …’
    linux /boot/vmlinuz-2.6.32-24-generic root=UUID=c1550ae8-66af-414c-874d-15cb43176ba5 ro单个
    echo ‘将加载初始 Ramdisk …’
    initrd /boot/initrd.img-2.6.32-24-generic
}
菜单项'Ubuntu,mit Linux 2.6.32-21-generic'--class ubuntu --class gnu-linux --class gnu --class os {
    記錄失敗
    修改 ext2
    设置根='(hd0,5)'
    搜索--no-floppy--fs-uuid--set c1550ae8-66af-414c-874d-15cb43176ba5
    linux /boot/vmlinuz-2.6.32-21-generic root=UUID=c1550ae8-66af-414c-874d-15cb43176ba5 ro 安静飞溅
    initrd /boot/initrd.img-2.6.32-21-generic
}
菜单项“Ubuntu,使用 Linux 2.6.32-21-generic(扩展模式)”--class ubuntu --class gnu-linux --class gnu --class os {
    記錄失敗
    修改 ext2
    设置根='(hd0,5)'
    搜索--no-floppy--fs-uuid--set c1550ae8-66af-414c-874d-15cb43176ba5
    echo ‘Linux 2.6.32-21-generic 已下载…’
    linux /boot/vmlinuz-2.6.32-21-generic root=UUID=c1550ae8-66af-414c-874d-15cb43176ba5 ro单个
    echo ‘将加载初始 Ramdisk …’
    initrd /boot/initrd.img-2.6.32-21-generic
}
### 结束 /etc/grub.d/10_linux ###

### 开始 /etc/grub.d/20_memtest86+ ###
菜单项“内存测试 (memtest86+)”{
    修改 ext2
    设置根='(hd0,5)'
    搜索--no-floppy--fs-uuid--set c1550ae8-66af-414c-874d-15cb43176ba5
    linux16 /boot/memtest86+.bin
}
menuentry“内存测试(memtest86+,串行控制台115200)”{
    修改 ext2
    设置根='(hd0,5)'
    搜索--no-floppy--fs-uuid--set c1550ae8-66af-414c-874d-15cb43176ba5
    linux16 /boot/memtest86+.bin 控制台=ttyS0,115200n8
}
### 结束 /etc/grub.d/20_memtest86+ ###

### 开始 /etc/grub.d/30_os-prober ###
菜单项“Microsoft Windows XP Professional (在 /dev/sda1 上)”{
    修改ntfs
    设置根='(hd0,1)'
    搜索--no-floppy--fs-uuid--设置 883cb1b73cb1a09c
    驱动器映射 -s (hd0) ${root}
    链式装载机 +1
}
### 结束 /etc/grub.d/30_os-prober ###

### 开始 /etc/grub.d/40_custom ###
# 此文件提供了一种添加自定义菜单项的简单方法。只需输入
# 个要在此注释后添加的菜单项。请注意不要更改
# 上面的‘exec tail’行。
### 结束 /etc/grub.d/40_custom ###

答案1

我在笔记本电脑上安装新的 Ubuntu 12.10(桌面版)时遇到过这种情况。初始安装后,系统启动正常,然后在获取内核更新(来自初始更新集)后,它会通过 GRUB 菜单,启动内核,然后出现黑屏,没有密码提示。

问题似乎与视频有关。我发现一个可以不断修复此问题但不太好的方法,即编辑 /etc/default/grub,从 中删除quietsplash选项GRUB_CMDLINE_LINUX_DEFAULT,然后运行update-grub​​。如果您已经无法启动,则当 GRUB 菜单出现时,按 E 编辑 GRUB 命令行并删除这些选项,然后按 ctrl-X 启动。

这个错误建议尝试将plymouth:force-drm其作为 GRUB 启动选项,这样它就不会使用内核帧缓冲驱动程序。这似乎也有效,只是它仍然不使用启动画面,而是以文本模式启动。

值得一提的是,我的笔记本电脑有两个图形芯片组:Intel(使用 i915 内核驱动程序)和 Nvidia GTX680M(仍在努力加速这项工作)。可能是两个不同的图形设备的存在导致启动不确定。

答案2

如果 grub 无法启动,则意味着它的配置已损坏,或者其代码已被覆盖。

可能的原因如下:

  • 某些 Windows 软件会覆盖硬盘上的隐藏(随机)空间。他们这样做是出于 DRM 原因。不过,我认为升级内核并重新启动后会立即出现此问题,因此可能不是这个问题。

  • 您的 ubuntu 分区(或至少是存放 grub 的分区)上没有剩余可用空间。请确保您有剩余空间。目前,我押注于此。

  • 每次安装新内核时,grub 都会自动重新配置。尝试手动重新配置它,看看是否有任何错误输出。在终端中运行“sudo update-grub”即可执行此操作。您必须输入密码,然后它会输出一些内容。

  • 你说这是你磁盘的第三个分区;它是可移动磁盘吗?比如外部硬盘或内部硬盘?因为在这种情况下,设备编号可能与安装时不同。

答案3

每次在软件更新中添加新内核时,grub 配置都会更新。因此,Javier Rivera 要求的信息非常重要。相关配置文件是/boot/grub/grub.cfg- 如果您找不到它,请查找/boot/grub/menu.lst

另外,您可以运行update-grub并检查是否出现任何错误 - 请发布结果。但是,如果 update-grub 成功,则解决方法是每次更新包含新内核时手动运行它。

相关内容