永久解决“GRUB 先前安装到不再存在的磁盘”

永久解决“GRUB 先前安装到不再存在的磁盘”

我有一个 Ubuntu 16.04 虚拟机(本地,无云),创建为克隆另一台计算机。每次使用 升级 GRUB 包时apt upgrade,我都会收到以下消息:1

GRUB 引导加载程序之前安装在不再存在的磁盘上,或者由于某种原因其唯一标识符已更改。确保安装的 GRUB 核心映像与 GRUB 模块和 grub.cfg 保持同步非常重要。请再次检查以确保 GRUB 已写入适当的引导设备。

然后它要求选择安装设备

我可以成功完成 GRUB 升级,但是在下一次 GRUB 升级期间会再次出现该消息,尽管升级之间磁盘没有改变。

我怎样才能将 GRUB 配置“重置”为当前配置,以便它不再询问?

研究过类似的问题

我不是想安静升级消息作为类似问题(https://serverfault.com/questions/662624/how-to-avoid-grub-errors-after-runing-apt-get-upgrade-ubunut如何在没有 grub 配置提示的情况下执行 apt-get -y dist-upgrade?) 建议。我想解决这个有关 GRUB 升级的特定问题。

来自的命令ServerFault 上类似问题中得票最多的答案在我的情况下无法应用,因为我的机器上没有提到的文件/boot/grub/menu.lstupdate-grub-legacy-ec2

我的配置

我尝试运行命令oldfred 建议

$ sudo debconf-show grub-pc
  grub-pc/install_devices_failed_upgrade: true
  grub-pc/mixed_legacy_and_grub2: true
  grub-pc/install_devices_failed: false
  grub-pc/hidden_timeout: false
  grub2/update_nvram: true
  grub-pc/timeout: 5
  grub-pc/install_devices_empty: false
* grub-pc/install_devices_disks_changed: /dev/disk/by-id/ata-VBOX_HARDDISK_VBd7a628c1-923a4727
  grub2/kfreebsd_cmdline:
* grub2/linux_cmdline: consoleblank=0
  grub2/kfreebsd_cmdline_default: quiet splash
  grub-pc/disk_description:
  grub-pc/postrm_purge_boot_grub: false
  grub-pc/partition_description:
* grub-pc/install_devices: /dev/disk/by-id/ata-VBOX_HARDDISK_VBd7a628c1-923a4727
  grub-pc/chainload_from_menu.lst: true
  grub2/force_efi_extra_removable: false
  grub-pc/kopt_extracted: false
* grub2/linux_cmdline_default:
  grub2/device_map_regenerated:

似乎匹配

$ sudo lshw -C Disk | grep serial
       serial: VBd7a628c1-923a4727

grub-probe -t device /boot/grub返回克隆主设备的根设备的名称。我尝试了建议的命令sudo dpkg-reconfigure grub-pc,但它没有更新的输出sudo grub-probe -t device /boot/grub。如何解决这个问题?


1我收到的是本地化版本的消息,粘贴的英文版本是从https://samrueby.com/2014/09/02/updating-grub-in-ubuntu-amazon-ec2-instance/

答案1

如果我是你,我会完全重新安装 grub,检查磁盘的 UUID。但你应该在 Linux 实例之外执行此操作,即在 USB 密钥上运行实时发行版,然后在实时文件系统上安装分区,然后重新安装 GRUB。

请看这里:https://help.ubuntu.com/community/Grub2/Installing

答案2

我在运行 Ubuntu 20.04.1 的系统上收到了同样的错误消息。在我的情况下,/boot/efi 位于其自己的分区上。以下步骤解决了该问题: apt-get update卸载 /boot/efi。

umount /boot/efi
apt-get upgrade
mount /boot/efi

相关内容