电脑安装Linux与Windows双系统的关键配置

问题描述

2024年10月20日, 获取了微软的最新版 Windows 11 LTSC版本, 于是将台式机上的Windows 10 LTSC 升级为Windows 11 LTSC. 在之前的双系统配置中,我们使用相同的UEFI分区,这样即可以减少对固态硬盘的分区,设置起来也方便。但是,在安装完成Windows 11后, 发现每次启动到Windows 11 后再重启,则UEFI分区将会被重写,这导致了GRUB被覆盖掉了,于是无法进行Linux的引导!此问题虽然可以挂载ArchLinux安装盘后重新挂载分区修复,但是再次使用Windows 11后,问题再次出现。相较而言,我的笔记本上仍然是Win10 + ArchLinux的配置,它却没有出现此问题。根据上述情况可以得出结论,微软想独占硬盘,进而阻止Linux启动,这无形中增加了Linux用户的使用门槛,导致一此人不敢轻易换到Linux系统下工作。

通过上述分析,Win11的流氓行为恰恰反映了微软感受到了Linux的压力,这可以证明Linux越来越受到重视。为了实现同一电脑上自由的切换操作系统,且用上最新的Windows,本文在实践的前提下,记录下此可行方案。

解决方案

设置 Windows 11独占一块硬盘

由于我的台式机有多块硬盘,所以单独拿出一块256GSSD安装Windows 11 LTSC, 同时在安装过程中要删除已经存在于另一块512GNvme固态硬盘上的UEFI分区和16MWindows预留分区。这样操作下来,在新的256硬盘上安装Windows时,它就会自动创建EFI分区在256硬盘上,也就相当于Windows独占了这块256固态硬盘。当使用完Windows后,再重启时它虽然会检查并重写EFI分区,但是也只是写这个256G硬盘,所以也就不会影响512G硬盘上的GRUB了。

恢复 GRUB 分区

在安装Windows 11的过程中删除了512G硬盘上的UEFI分区,这是为了防止Windows自动将其设置为自己的UEFI。此时,Linux是无法引导的,因为它的UEFI分区已经被删除了。所以,我们现在要重建这个分区。由于使用了ManjaroLive镜像启动后,再用Gparted软件同时删除了之前的UEFI16M预留分区,所以硬盘分区表就发生了变化,所以重新安装GRUB后,要修改/etc/fstab文件,确保原来硬盘的//home/boot/efi分区正确挂载。插入Ventoy启动U盘, 选择ArchLinux,成功启动后依次执行下述命令。

重建 GRUB

在重建GRUB前使用lsblk查看硬盘分区,记住512G硬盘的新分区,对应挂载到相应的挂载点。

1
2
3
4
5
6
7
mount /dev/nvme0n1p1  /mnt/
mount /dev/nvme0n1p3 /mnt/home
mount /dev/nvme0n1p4 /mnt/boot/efi
arch-chroot /mnt
pacman -S os-prober
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ArchLinux
grub-mkconfig -o /boot/grub/grub.cfg

重建GRUB配置时,命令grub-mkconfig会自动搜索电脑所有的硬盘,并将找到的操作系统启动项加载到GRUB菜单中,在启动时可以随时选择。接下来的重点工作是修改Linux的分区表, 下面仅列出需要修改的部分。

vimlink
1
2
3
4
5
6
7
8
# /dev/nvme0n1p1
UUID=b4f5ab83-c06d-4f09-86b9-af00fa6acfeb / ext4 rw,relatime 0 1

# /dev/nvme0n1p4
UUID=8641-51F6 /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2

# /dev/nvme0n1p3
UUID=99c16664-0d77-4911-bfe1-d08a14d5db9e /home ext4 rw,relatime 0 2

重新启动系统

1
2
exit
reboot -h now

设置双系统的时间同步

为了避免主力系统ArchLinux出现问题,切换到Windows11后,右键开始菜单,选择以管理员身份打开 「PowerShell」,输入以下命令:

1
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

解释

支持UEFI的主板,对于每一个UEFI分区,在启动时BIOS菜单中就会有一个启动项。Window 11流氓的地方就是安装时它自动探测所有硬盘中的UEFI分区,并占据第一个默认启动的UEFI分区,而切换到Windows11后它就会重写这个分区,覆盖其他的操作系统引导。所以在双系统的配置中,应当先确保无其他UEFI分区的前提下,单独安装Windows 11, 然后在Linux的安装盘上单独划分一个UEFI分区,再安装Linux或恢复GRUB. 安装Linux或恢复GRUB后,启动Linux, 再执行一遍grub-mkconfig以搜索添加Windows 11的启动项. 虽然BIOS中存在了两个启动项,但是每次切换系统都按F8或其他按键来切换系统不是太方便,于是才有在GRUB中添加Windows11的操作,这样想的切换操作系统时一个上下移动菜单就方便解决了。

对于只有一块硬盘的电脑,要么建立两个UEFI分区然后再安装Windows11Linux. 要么直接使用一个UEFI分区,然后安装Windows 10Linux, 既然Windows是作为一个备用系统处理那些不得不在Windows处理的文件,所以也没必要追求最新,因此我的笔记本上仍然使用Windows10+ArchLinux方案。