我在 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.cfg
(update-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
会出现这种情况,但解决方案有效。