返回

双硬盘双系统启动难题:UUID与分区标识符错位解决指南

Linux

双硬盘双系统启动难题:UUID 与分区标识符错位

在拥有两块硬盘的电脑上安装 Linux 和 Windows 双系统,并将它们分别安装在不同的硬盘上,是许多用户的选择。这样做的好处在于可以更好地隔离两个系统,避免相互干扰。但是,这种方式也可能会带来一些启动问题。一个常见的情况是:电脑主板上安装了一个硬盘 (例如 sda),上面安装了 Linux Mint 系统;通过 USB 接口连接了一个移动硬盘 (例如 sdb),上面安装了 Windows 10 系统。我们希望在开机时,Grub 引导程序能够提供选择启动哪个系统的选项。

然而,即使按照一些教程的步骤操作,也可能出现 Grub 能够识别到 Windows 硬盘,但在选择 Windows 启动时却报错,无法进入 Windows 系统的情况。例如,使用 os-prober 命令可以查看到 Windows 引导信息:

`/dev/sdb1@/efi/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi`

执行 sudo update-grub 命令更新 Grub 配置后,重启电脑并在 Grub 菜单中选择 Windows,却会遇到以下错误信息:

`error: no such device: 149D-BEB9.`

error: disk 'hd1,gpt1' not found.

Press any key to continue...

究其原因,很可能是因为 Linux 系统在识别 Windows 硬盘时,使用了错误的 UUID 或分区标识符。

UUID(通用唯一识别码)是用于标识硬盘分区的一种方式,它在格式化分区时自动生成,并且具有唯一性。Grub 引导程序会根据 UUID 来查找和加载操作系统。但是,当我们通过 USB 接口连接移动硬盘时,Linux 系统可能会为它分配一个临时的 UUID。当我们移除移动硬盘并再次连接时,这个 UUID 可能会发生变化。这就会导致 Grub 配置文件中记录的 UUID 与实际的 UUID 不匹配,从而无法找到 Windows 系统。

除了 UUID 之外,分区标识符也可能导致问题。分区标识符是一个十六进制的数字,用于标识分区类型。例如,Windows 系统的 EFI 分区通常使用 149D-BEB9 作为分区标识符。如果 Grub 配置文件中记录的分区标识符与实际的分区标识符不一致,也会导致启动失败。

那么,如何解决这个问题呢?我们可以通过手动修改 Grub 配置文件,将正确的 UUID 和分区标识符写入其中。

第一步:查找 Windows 分区的 UUID 和分区标识符。

我们可以使用 lsblk -f 命令查看所有硬盘和分区的信息,包括 UUID 和分区标识符。找到 Windows 系统所在的硬盘和分区,并记录下它们的 UUID 和分区标识符。例如,通过 lsblk -f 命令,我们可能看到如下信息:

NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
sda                                                               
├─sda1 ext4     boot        xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /boot
└─sda2 ext4     root        xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /
sdb                                                               
└─sdb1 vfat     EFI         149D-BEB9                             /boot/efi

在这个例子中,Windows 系统的 EFI 分区是 /dev/sdb1,它的 UUID 是 149D-BEB9

第二步:编辑 Grub 配置文件。

使用 sudo nano /etc/grub.d/40_custom 命令打开 Grub 的自定义配置文件。

第三步:添加 Windows 启动项。

在文件中添加以下内容,并将 UUID分区标识符 替换为实际的值:

menuentry "Windows 10" {
    insmod part_gpt
    insmod fat
    set root='(hd1,gpt1)'
    search --no-floppy --fs-uuid --set=root xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 
    chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

其中,(hd1,gpt1) 表示 Windows 系统所在的分区,你需要根据实际情况进行修改。在这个例子中,Windows 系统安装在 /dev/sdb1 上,它是第二个硬盘的第一个分区,所以应该写成 (hd1,gpt1)

第四步:更新 Grub 配置。

保存配置文件并退出编辑器,然后执行 sudo update-grub 命令更新 Grub 配置。

第五步:重启电脑。

重启电脑后,Grub 菜单中应该会显示 Windows 10 的启动选项。选择 Windows 10 启动,应该就可以正常进入 Windows 系统了。

需要注意的是,在进行这些操作之前,建议先备份 Grub 配置文件,以免操作失误导致系统无法启动。

常见问题解答

1. 为什么我的 Linux 系统无法识别 Windows 硬盘?

这可能是因为 Windows 硬盘没有正确分区或格式化,或者是因为 Linux 系统缺少必要的驱动程序。你可以尝试使用 fdisk -l 命令查看硬盘分区情况,并使用 lsmod 命令查看已加载的驱动程序。

2. 为什么我修改了 Grub 配置文件后,Windows 系统仍然无法启动?

这可能是因为你修改的 Grub 配置文件有错误,或者是因为 Windows 系统本身存在问题。你可以尝试重新检查 Grub 配置文件,并尝试修复 Windows 系统的启动引导。

3. 如何修复 Windows 系统的启动引导?

你可以使用 Windows 安装盘或启动 U 盘进入 Windows 修复环境,然后使用 bootrec /fixmbrbootrec /fixbootbootrec /rebuildbcd 等命令修复启动引导。

4. 如何备份 Grub 配置文件?

你可以使用 sudo cp /etc/grub.d/40_custom /etc/grub.d/40_custom.bak 命令备份 Grub 的自定义配置文件。

5. 如何恢复 Grub 配置文件?

你可以使用 sudo cp /etc/grub.d/40_custom.bak /etc/grub.d/40_custom 命令恢复 Grub 的自定义配置文件,然后执行 sudo update-grub 命令更新 Grub 配置。