背景:
我有一台具有以下驱动器配置的台式机:
- 单 SSD 上的 Ubuntu 20.04
- 在英特尔 RST Raid 上跨 2 个 SSD 运行 Windows 10
操作系统以 UEFI 模式安装
问题:
尽管能够使用 EFI 文件安装分区,但 OS 探测器无法在 Intel RST Raid 上找到 Windows 安装。它找到了 Ubuntu EFI 文件。在进一步调查原因后,我偶然发现/usr/lib/os-probes/mounted/05efi
日志中出现了第 31-35 行和那里的调试行。在条件语句中运行 udevadm 命令后,它吐出了。
/devices/virtual/block/md126/md126p1
这意味着它不会在这个分区上寻找 EFI 文件,因为它是一个虚拟磁盘。
解决方法
在 vim 中打开/usr/lib/os-probes/mounted/05efi
并注释掉第 34 行。这使得 os-prober 能够正确找到 Windows EFI 文件并正确填充 grub 中的菜单,机器现在可以成功地从 grub 启动 Windows 和 ubuntu。
问题
我知道所有代码都是有原因的,这段代码就是在某个时候放在这里的。我很好奇:
- 我不应该把它注释掉(或者通过使用 grep 检查路径中的“md”使它变得更智能)有什么原因吗?
- 是不是因为我在 mdadm 中设置了错误,所以它才会显示为虚拟设备?我的 mdadm 配置如下:
# mdadm.conf
#
# !NB! Run update-initramfs -u after updating this file.
# !NB! This will ensure that initramfs has an uptodate copy.
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers
# automatically tag new arrays as belonging to the local system
HOMEHOST <system>
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
ARRAY metadata=imsm UUID=ef7f02c0:f0d35b35:760ba725:f4c93763
ARRAY /dev/md/SSDRaid container=ef7f02c0:f0d35b35:760ba725:f4c93763 member=0 UUID=d3be1bc0:8dd0f96d:f53e5af5:4974fe26
# This configuration was auto-generated on Sat, 01 May 2021 20:33:32 -0500 by mkconf
答案1
我的笔记本电脑也遇到了这个问题。我有一台 MSI GT60,出厂时配备 1 个 SSD 和 1 个 HDD,但它有 3 个 MSATA 端口,设计为在 RAID1/0 中接受最多 3 个 MSATA 设备(市场宣称磁盘性能高达 1500MB/s)。
这使用了常见的英特尔软/芯片组 RAID 和 C220 芯片组(我相信这被称为 RST)。
Linux 下的 mdraid 驱动程序支持 Intel RST。这是我发现的唯一一个 Windows 和 Linux 能够就 RAID 达成一致的解决方案。
当我在这台机器上安装 F32 时,我确实按照上面的建议破解了 os-prober 脚本,但是在处理 F34 升级后,我想出了一个更好的解决方案。
由于我有 1 个用于 Linux 的 HDD,我只需将 Microsoft 和 MSI 目录从 RAID EFI 文件系统复制到 HDD 上的 EFI 文件系统,os-prober 就可以正常找到这些 EFI 引导加载程序,并且 Windows 启动没有任何问题。
如果您可以选择将 EFI 引导加载程序文件存储在传统设备上,那么这是首选解决方案,直到可以为 Intel RST 的 os-prober 添加解决方案。