Windows 更新的链式反应

  • ~3.19K 字
  1. 1. Windows 更新干掉了自己
  2. 2. Windows 更新干掉了 Arch 和自己
  3. 3. 毁灭与新生
  4. 4. 新建博客

Windows 更新干掉了自己

2024年11月22日,就在我开心使用 Arch+Win11 双系统的时候,一次 Windows 重启更新后,又抽搐般的反复重启了几次。当在 grub 界面选择 Windows 作为启动项时,屏幕上赫然显现下面2行字:

1
2
错误:文件"/efi/Microsoft/Boot/boogmgfw.efi" 未找到
按任意键继续...

然后就再也进去不 Windows 了。

我执行了grub-mkconfig -o /boot/grub/grub.cfg后,Windows 连在 grub 界面都不显示了。
后来找人帮忙,暂时解决了问题。然后,第二天,Windows 又更新了。不是,这才修好没多久啊

我于是循着前辈的足迹,又暂时解决了问题。

首先说明一下我整个的电脑环境:华为电脑,单盘(1T,无法加装硬盘,磁盘分区按先后顺序为 efi1+C+D+E+boot+efi2+/+recovery1+recovery2+recovery3 ),双系统(Win11 + Arch)注意这里的2个 efi 分区,第一个是 Windows 的,第二个是 Arch 的,grub 装在了 efi2 里,后面3个 recovery 是 Windows 的恢复分区,一般来说新电脑会有1个,其他的是 Windows 自己系统升级的产物,真正在工作的只有1个。较新的分区一般会位于磁盘的后部(更高的扇区),原厂或系统安装的分区通常在磁盘的前部(可以通过在 powershell 中使用reagentc /info查看当前使用的是哪个恢复分区)。

通过efibootmgr查看 efi 的启动顺序,会发现没有 Windows 的引导,所以可以自己手动创建一条 Windows 的引导,然后通过efibootmgr -o可以自定义启动顺序。
sudo efibootmgr --disk /dev/nvme0n1 --part 1 --create --label "Windows(Custom)" --loader "\\EFI\\Microsoft\\Boot\\bootmgr.efi"手动创建 Windows 的引导项。
sudo efibootmgr --bootnext 0002设置下次启动编号为 0002 的启动项,也就是刚才手动创建的 Windows 引导项。

接下来systemctl reboot就可以进入 Windows 了。

附赠命令:

  • sudo efibootmgr -b 0001 -B 删除第一条记录
  • mount /dev/nvme0n1p1 /mnt 挂载查看分区内容
  • efi 文件在 Arch 中的参考路径:/boot/EFI/ARCH/grubx64.efi

Windows 更新干掉了 Arch 和自己

对于 Arch 的存在,Windows 是不能够容忍的。在第一阶段,他自己更新把自己干掉了,在第二阶段,他更新的攻击目标转向了 Arch。他将 Arch 的引导从 grub 里删除了,无论怎么启动都会是 Windows。刚开始,我通过 UEFI 界面的调节还能暂时解决问题。

到后来,我在 UEFI 中设置 Windows 先,会直接进入 grub 的修复环境,桌面显示如下文字:

1
2
3
error: unknown filesystem
Entering rescue mode...
grub rescue>

解决方法:

1
2
3
4
5
6
7
8
error: unknown filesystem
Entering rescue mode...
grub rescue> ls // 查看所有磁盘分区
grub rescue> ls (hd0,gpt7) // 查看gpt7分区的类型,我们应该找到 efi 分区所在地,其他的磁盘分区大多会显示为 unknown filesystem
grub rescue> set root=(hd0,gpt7)
grub rescue> set prefix=(hd0,gpt7)/grub
grub rescue> indmod normal
grub rescue> normal // 然后就可以进入正常的 grub 引导界面啦

但是,在 grub 界面,如果选择 Windows,又会显示找不到 efi,选择 Arch 则可以正常进入起码有一个能用

如果我在 UEFI 中设置 Arch 先,那么会直接进入 Windows。

也就是说,Arch 在用原本应该是 Windows 的 efi,Windows 在用原本是 Arch 的 efi!

那么为什么 Arch 能用 Windows 的 efi,答案就是不能用,所以会显示unknown filesystem,要通过在 grub 的修复环境中选择 Arch 的 efi 才能进去。

毁灭与新生

于是,重装系统!

刚开始还是想挑战高难度一点的 Gentoo 的,但是由于挂载的问题,第一次安装失败 安装了一整天啊 。万念俱灰之下,又迫切需要一台能用的电脑,于是选择了单系统 Arch。还是 Arch 最平衡,不像 Gentoo 那样安装时间要特别长,又不像 deepin 和 Ubuntu 那样安装特别简单。

重装系统能解决许多历史遗留问题,但由于没有做好备份工作(主要是某些文件在项目中需要加入 .gitignore,在使用 Github 进行备份时就没有包含进去,包括项目中的 csv 原始数据,博客的 themes/butterfly 下的配置文件,按道理说这个目录下的配置文件应该放在博客根目录下,但是为什么我没有呢?也是历史遗留问题!),我丢失了很多东西。因为丢失了博客的配置文件,而我又不想再花大把时间进行博客的配置,于是新开了这个博客,并选择了一套开箱即用的主题,并调整了一下自己写作博客的思路。我想主要以文字为主(图片的路径问题在 butterfly 下也已经恼到我了,而且图片多了的话博客加载速度也慢),人类原创(有感于 notbyai ),融入英文写作。

但是我还是需要 Windows 的,正值数学实验和金工实习期间,需要 Matlab 和 3D打印的一些建模和打印软件(SolidWorks 和 Wiiboox,这俩玩意也是异常的难安装),这些在 Arch 下都没有什么特别好的替代品,只能选择在 Oracle VirtualBox 中创建一个 Win11 的虚拟机(Matlab用网页版)。中间还出了一个小问题,因为在选择新建电脑时选择了自动安装,导致没有超级管理员,后面无论是从浏览器还是从应用商店里下载的QQ或者微信都无法安装,当然,终端管理员也无法打开。解决方法就是重装,新建电脑时不要选择自动安装。

新建博客

在看了各种博客框架后,我依然选择了 Hexo,并解决了包括 npm 全局安装导致的 root 权限等一系列历史遗留问题。

首先是在放应用的地方局部安装一个 hexo:npm install hexo

然后将这个 hexo 添加到环境变量中(写在~/.zshrc中):export PATH="$PATH:$HOME/app/hexo/node_modules/.bin
这样就不用npx hexo啦。

接着设置别名
alias hexo_="cd blog && hexo clean && hexo generate && hexo server &"

之后预览博客的时候一条命令 hexo_ 就可以了。