执行系统更新时(以 GUI 方式启动),我在更新 grub-pc 时陷入了无限循环。请参阅下面的详细信息。
出现问题的系统及其设置方式
我的电脑是双启动的 Windows 10 / Xubuntu 18.04。它在 DOS 分区的 SSD 上有 7 个分区,并且在启动期间使用 EFI 机制:
名称标签 FSTYPE 挂载点
sda
═─sda1 系统保留 ntfs
═─sda2 SSD-Windows-Sys ntfs
═─sda3 SSD-EFI vfat /boot/efi
═─sda4
═─sda5 SSD-Linux-Home ext4 /home
═─sda6 SSD-Windows-Home ntfs
└─sda7 SSD-Linux-Sys ext4 /
几年前我买了这台电脑时,它只有 Windows 10 和系统保留分区,现在已变为 /dev/sda1。在调整分区大小并为 Windows home 创建单独的分区后,我安装了 Xubuntu 16.04,在此过程中,我创建了一个 Linux 系统分区、一个交换分区和一个 Linux-Home 分区。当我将所有内容克隆到 SSD 以替换我之前的 HDD 时,我丢弃了 Linux 交换分区(在执行中间步骤以修复无法正常工作的启动设置之后)。
在将系统升级到 Xubuntu 18.04 时,我遇到了很多麻烦:我没有选择将它与 Windows 一起安装。我不得不在安装过程中使用“其他”方式。
结果是计算机根本无法启动,或者只能启动到 Windows 或只能启动到 Linux。但 /dev/sda7 在我看来像是一个系统分区。
可能在 Xubuntu 16.04 中,系统保留分区也用作 ESP,尽管它的格式为 ntfs。其当前内容(可能包括之前使用 Xubuntu 16.04 的双启动安装的剩余内容)如下:
$ tree -L 3 /media/verwalter/System-reserviert/
/media/v/System-reserviert/
├── Boot
│ ├── BCD
│ ├── BCD.LOG
│ ├── BCD.LOG1
│ ├── BCD.LOG2
│ ├── bg-BG
│ │ └── bootmgr.exe.mui
│ ├── BOOTSTAT.DAT
│ ├── bootuwf.dll
│ ├── bootvhd.dll
│ ├── cs-CZ
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── da-DK
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── de-DE
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── el-GR
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── en-GB
│ │ └── bootmgr.exe.mui
│ ├── en-US
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── es-ES
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── es-MX
│ │ └── bootmgr.exe.mui
│ ├── et-EE
│ │ └── bootmgr.exe.mui
│ ├── fi-FI
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── Fonts
│ │ ├── chs_boot.ttf
│ │ ├── cht_boot.ttf
│ │ ├── jpn_boot.ttf
│ │ ├── kor_boot.ttf
│ │ ├── malgun_boot.ttf
│ │ ├── malgunn_boot.ttf
│ │ ├── meiryo_boot.ttf
│ │ ├── meiryon_boot.ttf
│ │ ├── msjh_boot.ttf
│ │ ├── msjhn_boot.ttf
│ │ ├── msyh_boot.ttf
│ │ ├── msyhn_boot.ttf
│ │ ├── segmono_boot.ttf
│ │ ├── segoen_slboot.ttf
│ │ ├── segoe_slboot.ttf
│ │ └── wgl4_boot.ttf
│ ├── fr-CA
│ │ └── bootmgr.exe.mui
│ ├── fr-FR
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── hr-HR
│ │ └── bootmgr.exe.mui
│ ├── hu-HU
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── it-IT
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── ja-JP
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── ko-KR
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── lt-LT
│ │ └── bootmgr.exe.mui
│ ├── lv-LV
│ │ └── bootmgr.exe.mui
│ ├── memtest.exe
│ ├── nb-NO
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── nl-NL
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── pl-PL
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── pt-BR
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── pt-PT
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── qps-ploc
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── qps-plocm
│ │ └── bootmgr.exe.mui
│ ├── Resources
│ │ ├── bootres.dll
│ │ └── de-DE
│ ├── ro-RO
│ │ └── bootmgr.exe.mui
│ ├── ru-RU
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── sk-SK
│ │ └── bootmgr.exe.mui
│ ├── sl-SI
│ │ └── bootmgr.exe.mui
│ ├── sr-Latn-CS
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── sr-Latn-RS
│ │ └── bootmgr.exe.mui
│ ├── sv-SE
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── tr-TR
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── uk-UA
│ │ └── bootmgr.exe.mui
│ ├── zh-CN
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ ├── zh-HK
│ │ ├── bootmgr.exe.mui
│ │ └── memtest.exe.mui
│ └── zh-TW
│ ├── bootmgr.exe.mui
│ └── memtest.exe.mui
├── bootmgr
├── BOOTNXT
├── BOOTSECT.BAK
├── EFI
│ ├── Boot
│ │ ├── bkpbootx64.efi
│ │ └── bootx64.efi
│ ├── Microsoft
│ │ ├── Boot
│ │ └── Recovery
│ └── ubuntu
│ └── shimx64.efi
├── Recovery
│ └── Logs
├── $RECYCLE.BIN
│ ├── S-1-5-21-1255711166-3792583174-1275079413-1008
│ │ └── desktop.ini
│ └── S-1-5-21-1255711166-3792583174-1275079413-1009
│ └── desktop.ini
├── System Volume Information
│ ├── Chkdsk
│ │ ├── Chkdsk20190923203942.log
│ │ └── Chkdsk20190923204533.log
│ ├── IndexerVolumeGuid
│ ├── tracking.log
│ └── WPSettings.dat
├── $WINRE_BACKUP_PARTITION.MARKER
└── WinSich
└── W530
58 directories, 103 files
最有可能的是,安装过程(无处不在)没有将其识别为 EFI 系统分区(ESP),因此创建了不正确的启动安装。
最后,我手动创建了一个 ESP,格式为 VFAT。在上次安装过程中,我在 GpartEd 类似部分中手动将此分区 /dev/sda3/ 标记为“用作 EFI 系统分区”。这给了它 esp 标志。启动标志是 /dev/sda1(上面已经显示了它上面的内容)。
但尽管进行了这些设置,系统仍无法正常启动,让我在 Grub 菜单中自行选择要启动的系统。EFI 分区中缺少 Grub 引导加载程序。
我最终通过使用 ISO 映像安装棒解决了这个问题,我曾将 Xubuntu 18.04 安装到 /dev/sda7 上。我这样做了(按照提示如何将 GRUB 重新安装到 EFI 分区?):
sudo mount /dev/sda7 /mnt
sudo mount /dev/sda3 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i;
mount
sudo chroot /mnt
grub-install /dev/sda
update-grub
exit
最后我得到了一个系统,它首先显示一个 Grub 菜单并让我选择要启动的操作系统。
系统更新期间无限循环
我使用 GUI 方式进行了常规系统更新。其中包括 Linux-firmware、grub-efi-amd64.bin、grub-pc.bin。出现了这个菜单。
当我将鼠标放在带有两个复选框的右侧子窗口上时,出现了一个说明,说明已对 grub-pc 进行了升级。我应该选择要为哪些设备自动执行 grub-install。在大多数情况下,让它自动运行是合理的,这样可以避免安装的 GRUB 映像不适合 Grub 模块或 grub.cfg。如果我不确定 BIOS 使用哪个设备进行启动,最好在所有设备中安装 GRUB。还有一个提示,关于可以将 GRUB 安装到分区的启动块中。这里提供了一些合适的分区。然而,这会迫使 GRUB 使用不太可靠的阻止列表机制,因此不推荐使用。
由于我的安装过程(见上文),我首先选中了两个复选标记。但随后我收到了以下错误消息:
i-386-pc 将在您的平台上安装 grub-install:错误:对于 /,没有 GRUB 安装程序。对您的设备地图进行检查。
伴随此对话框告诉我无法将 Grub 写入启动设备并询问我是否继续。它伴随一个复选框。
帮助功能解释说,GRUB 无法安装在 / 中。如果我继续,计算机可能无法正常启动。因此我没有选中问题前面的复选框。
这使我返回到第一个询问 GRUB 安装设备的对话框。
上次勾选了两个框后,我首先取消了第一个框的勾选。这又让我进入了后续对话(见上文)。我没有像以前一样勾选问题前面的勾选,这让我回到了之前一直停留的地方。
这次,我的选择恰恰相反,这又让我陷入了同样的第二次对话(见上文)。因此,除非我采取可能有害的解决方法,否则我将陷入无限循环选择提供的两个分区中的任何一个,并选中“配置 grub-pc”中的复选框。
那么我该怎么办呢?我不想让我的系统完全无法启动或者不让我选择启动哪个系统。
答案1
我让电脑连续运行了四天,没有关机。最后我还是不得不关机。
下次重启时,我进入 GRUB 菜单并可以选择启动 Xubuntu 还是 Windows 10。所以在这种情况下,计算机可能无法正常启动的威胁是错误的。我很高兴!
我查看了已安装的 Xubuntu 的 GRUB 版本:它是 2.02-2ubuntu8.14。在 USB 上,我之前从同一个 ISO 映像安装了 Xubuntu 18.04,我的是 grub-common 2.02-2ubuntu8.13。显然,这在我的 SSD 上已经发生了变化。
我还查看了 ntfs 格式的分区 /dev/sda1 上标有“System-reserviert”的文件和目录的文件日期:/media/username/System-reserviert/Boot/bg-BG 和其他特定于语言的文件都有我关闭系统当天的时间戳。但仔细查看它们和 /var/log/kern*.log 以查看我最终关闭计算机的时间后,我发现在这些时间戳生成之前至少发生了两次 Xubuntu 启动事件。我确信在生成这些时间戳之前,我也将计算机启动到 Windows 中。
查看 /boot/efi/EFI/ubuntu/(即已安装的 ESP 分区 /dev/sda3),我发现最近的时间戳来自我关闭系统的那天(但在此事件之前)。/boot/efi/EFI/ubuntu/grub.cfg 也带有此时间戳(关闭系统之前的时间戳)。/boot/EFI/ubuntu 中的所有文件实际上都有升级后关闭之前的时间戳,这导致了这个问题。
还有一件奇怪的事情:有一个空目录 /boot/efi/EFI/microsoft/boot。此目录的文件日期为 2019-11-11,因此在本次更新之前它就在那里。这个目录有什么用?里面是不是少了什么?
一方面,我很幸运没有遇到启动问题。另一方面,GRUB 的设置中肯定存在错误,至少在安装过程普遍性方面存在错误,它没有为我提供与现有 Windows 10 一起安装 Xubuntu 的选项。此外,值得一看的是,为什么我需要一个特殊的 VFAT 格式的 Efi 系统分区 (esp),以及为什么 ntfs 格式的 ntfs 分区“系统保留”在 Xubuntu 18.04 下不再能用于此目的。显然,这在 Xubuntu 16.04 中是可能的。