os-prober 和 update-grub 无法查看/找到正在运行的 Windows 安装

os-prober 和 update-grub 无法查看/找到正在运行的 Windows 安装

我在 3 TB 分区硬盘上安装了 Windows 7 和 12.04。如果我在启动过程中使用 F12 查看 BIOS 中的启动选项,Windows 7 和 Ubuntu 可以正常启动,但 Ubuntu GRUB 只提供 Ubuntu 选项。

当我尝试 os-prober 时,我根本没有得到任何结果;update-grub 也没有为我做任何事情。我尝试使用 Grub Customizer 修改 GRUB,但是,呃,真的不明白它的细节。

这是使用磁盘实用程序截取的驱动器屏幕截图。第一个分区是 Windows,第二个分区是共享数据(MP3、文档、照片等)。105 MB FAT 是“EFI 系统分区”,134 MB“未知”被标记为“Microsoft 保留分区”;898 GB 是 Ubuntu,最后 5 GB 是交换分区。

磁盘实用程序快照

答案1

我已经问了好久了,但我刚刚遇到了同样的问题,os-prober 无法检测到 Windows 分区(使用 BitLocker)。就我而言,这是在将数据复制到新的更大硬盘后发生的,这需要我重新创建 EFI 分区。

看来 os-prober 检查硬盘的 EFI 分区(/dev/nvme0n1p1在我的情况下)并检查文件夹bootmgfw.efi中的文件Microsoft

$ sudo os-prober
/dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi

但是,在重新创建 EFI 分区后,这个文件夹和文件显然不可用。所以我需要做的就是将目录Microsoft从旧硬盘复制到新硬盘,然后 os-prober 再次启动以检测 Windows 分区,Grub 就可以正常启动它。主 Windows 分区是否已安装并不重要(如有关此主题的其他帖子中所建议的),主分区是否使用 BitLocker 加密也不重要。

摘要:假设旧磁盘的 EFI 分区为/dev/sda1,新磁盘的 EFI 分区(FAT32)安装为/boot/efi,则只需执行

sudo mount /dev/sda1 /mnt
sudo cp -r /mnt/EFI/Microsoft /boot/efi/EFI/
sudo umount /mnt
sudo os-prober
# This should show the Windows partition as above. If ok, update grub.
sudo update-grub

附注:至少 Ubuntu 22.04(可能还有一些早期版本)出于update-grub安全原因默认禁用运行 os-prober:

$ sudo update-grub
Sourcing file `/etc/default/grub'
...
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

要强制运行,添加

GRUB_DISABLE_OS_PROBER=false

并再次/etc/default/grub运行update-grub

$ sudo update-grub
Sourcing file `/etc/default/grub'
...
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ...
done

答案2

我遇到过同样的问题:
Windows 7 和 Linux(我的情况是带有 Grub2 和 Debian 的 Slax)os-prober当我使用时无法识别 Windows 分区update-grub;Windows 被遗漏了。

我修复了这个问题。首先,我测试手动将 Windows 7 的条目添加到/boot/grub/grub.cfgupdate-grub每次运行时都会覆盖此文件,因此对其所做的更改不是永久性的)。

我重新启动后,Windows 7 出现在菜单中并启动正常,除了出现以下错误:

error: no suck device: xxxxxxxxxxx (disk ID)

当出现此问题时,我按下了Enter,Windows 便正常启动了。

os-prober我调查了识别操作系统过程中涉及的命令和其他脚本的执行情况,并测试了

sudo /etc/grub.d/30_os-prober 2>/dev/null

Windows 未列出。我打开 Dolphin 文件管理器浏览 Windows 分区并搜索分区的 UUID 并将其替换/boot/grub/grub.cfg以解决错误。

我执行了

sudo /etc/grub.d/30_os-prober 2>/dev/null

然后 Windows 就被列出好了

我重新启动了电脑,进入控制台,然后执行

sudo /etc/grub.d/30_os-prober 2>/dev/null

然后 Windows 再次没有被列出。

我打开了 Dolphin,浏览了 Windows 分区,执行了

sudo /etc/grub.d/30_os-prober 2>/dev/null

再次,Windows 被列入其中。

我执行了update-grub并且 GRUB 菜单现在正常了。

我认为os-prober需要先安装分区(在 NTFS 情况下,因为 Debian 分区始终在列表中)才能找到它。我还没弄清楚为什么os-prober会出现这种情况,但解决方案有效。

相关内容