所以基本上我有一个相当泛滥的 Grub 引导加载程序,带有较旧的 linux 版本、3 个操作系统和 memtests。我想要的是只离开操作系统。我需要知道如何手动完成,并且我需要有人告诉我在发布新内核时我应该注意什么。提前致谢。
刚刚在 20.04 (Xubuntu) 上运行了最新一批更新,现在我收到了 GRUB 错误:
symbol 'grub_calloc' not found
Run Code Online (Sandbox Code Playgroud)
我进入了“grub 救援”外壳,但不知道在那里做什么可能有用。对我来说,“找不到符号”意味着 grub 包存在某种构建错误,但我真的不知道 grub 是如何工作的。我注意到此更新还包括“固件”,不确定这是否相关。我最好的选择是从 live CD 启动,看看我是否可以以某种方式将更新回滚到 grub?
编辑添加:
好的,感谢很多人!这就是我认为我现在理解的内容。
在“非 UEFI”系统上,grub 安装在两个独立的部分。第一个也是最基本的部分是在启动时启动的部分。但是对于它的大部分功能,它需要第二部分。这些部分必须对齐 - 任何部分都不需要其他部分的任何功能,而实际上并不存在。
当这些部分没有对齐并且没有提供函数 grub_calloc 时,就会出现可见的运行时问题。我不是 100% 清楚 grub_calloc 是属于第二个、更大的部分还是第一个。我会期待第二个,但 grub 构建系统是一件相当艺术的作品,所以我不知道:)。
问题的根本原因是grub更新并没有保证两部分都更新了。理想情况下,如果不这样做会导致 grub 安装失败,并且系统应该恢复到安全状态。这不会发生。
这实际上对我来说仍然有点神秘。默认情况下,更新需要做的就是将每个部分放在当前部分所在的位置,因为显然这有效。如果安装位置/驱动器是配置驱动的,并且无法到达这些位置之一,那么不知何故,配置数据和现实之间就会出现不匹配。只要部件之间没有引入新的依赖关系,这可能不会显示为问题。
所有解决方案都涉及重新安装 grub 以确保两个部分对齐。实际上没有必要返回到以前的版本(尽管这会起作用),因为损坏的并不是 grub 运行时本身。有多种方法可以实现这一点,具体取决于您的环境,但运行引导修复实时磁盘对我有用。
为了避免将来出现这种错位,确保系统上的 grub 安装程序配置为安装到正确的设备可能很有用。
此更新解决了一些重要的错误(请参阅 Ubuntu 安全通知 4432)。如果您已恢复 grub 来解决此问题,请注意您会遇到这些问题。
error: file '/grub/i386-pc/normal.mod' not found.
grub rescue>
Run Code Online (Sandbox Code Playgroud)
我能做什么?我只是坐着盯着它看。
我找到了我大约四年没有使用过的旧上网本 (Dell Inspiron 1010)。我用 Ubuntu 12.10 替换了 Windows XP。我使用了可启动的 USB 驱动器。我安装并重新启动。我收到了normal.mod未找到的消息。
我该怎么办?键入exit, reboot, 或quit? 我应该重新安装吗?
我的启动非常慢,我不知道为什么。
$ systemd-analyze
Startup finished in 10.975s (kernel) + 49.732s (userspace) = 1min 708ms
$ systemd-analyze blame
34.971s apt-daily.service
20.590s snapd.refresh.service
17.113s grub-common.service
16.033s apport.service
16.027s networking.service
15.894s ondemand.service
15.860s irqbalance.service
15.655s speech-dispatcher.service
11.695s ModemManager.service
9.772s accounts-daemon.service
8.626s NetworkManager-wait-online.service
8.058s systemd-logind.service
8.053s bluetooth.service
7.944s gpu-manager.service
7.896s alsa-restore.service
7.892s pppd-dns.service
7.882s rsyslog.service
7.860s avahi-daemon.service
7.844s dev-sda1.device
7.842s systemd-user-sessions.service
7.648s lightdm.service
7.610s teamviewerd.service
6.445s apparmor.service
Run Code Online (Sandbox Code Playgroud)
此外,在启动过程中,我看到一条消息,内容如下:
device descriptor read/all, error -62
ata1 softreset failed (device not ready) #most of the times
error …Run Code Online (Sandbox Code Playgroud) 我最近从学校得到了一台电脑。它安装了 Windows 8.1。然后,我安装了另一个 Windows 8.1 副本(因此它将使用内置的 Windows Pro 许可证)并将其升级到 Windows 10。然后我将 Ubuntu 与 Windows 8 和 10 一起安装。
请注意,我为 /boot 创建了一个单独的 255MB ext2 分区。
现在,当我启动计算机时,我首先看到一个带有 Windows 8 和 Ubuntu 选项的 GRUB 提示(我已经取消隐藏 grub 提示,因为我喜欢那样)。但是,没有 Windows 10 选项。如果我选择 Ubuntu,计算机将启动到 Ubuntu。但是,如果我选择 Windows 8 选项,然后我会被发送到 Windows 引导加载程序,然后它会为我提供引导 Windows 8 或 Windows 10 的选项。(但是,此时,计算机已经加载了内核和所有. 显然,微软误解了引导加载程序的概念,并认为这意味着“在实际显示引导加载程序之前几乎启动整个系统”。典型的微软。)
如何禁用 Windows 引导加载程序并向 GRUB 添加 Windows 10 选项?
编辑:有人回答告诉我禁用 Windows 引导加载程序。但是,我仍然不知道如何将 Windows 添加到 GRUB OS 列表中。有人能帮忙吗?
编辑 2:使用 EasyBCD 从 Windows 引导加载程序中删除 Windows 10 后,似乎在几次重新启动后,它会不断取消隐藏自己,并且 …
如果使用 UEFI 请参阅这个问题,“如果我使用 UEFI,我可以启动 memtest86+ 吗?”
在我的 Lenovo B570 上安装了 64 位版本的 Ubuntu 12.04 后,我遇到了在使用 Grub 安装 11.10 时遇到的相同问题,但在 uEFI 系统上无法正常运行。我使用与上次相同的技术来解决问题(使用 Super Grub Disc LiveCD 会话修复 Grub)并且我的系统在 Ubuntu 和 Windows 7 之间愉快地双启动
但是现在当我启动 Grub 菜单时只显示
我不再看到以前存在的使用 Memtest86+ 的选项,在 Ubuntu 软件中心检查后,我可以看到该软件包已安装,但是如何使再次运行它的选项出现在 Grub 菜单中?
我试过了:
sudo update-grub
Run Code Online (Sandbox Code Playgroud)
这没有任何区别。
sudo chmod +x /etc/grub.d/20_memtest86+
Run Code Online (Sandbox Code Playgroud)
结果是:
chmod: cannot access /etc/grub.d/20_memtest86+': No such file or directory
并进入
ls …Run Code Online (Sandbox Code Playgroud) 我在我的电脑上安装了 Windows,然后安装了 Ubuntu。但是,现在我无法启动到我的 Windows 安装。
我能做些什么来解决这个问题?
我试图更新 Grub 所以我运行:
sudo update-grub
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Run Code Online (Sandbox Code Playgroud)
这个警告究竟想改变什么?(我之前从 12.04 升级到 14.04)
这是我的/etc/default/grub文件:
GRUB_DEFAULT="0"
GRUB_HIDDEN_TIMEOUT="0"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="10"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
Run Code Online (Sandbox Code Playgroud)