Omarchy + Windows 11 双系统安装指南
目标:在不重装 Omarchy 的前提下,从现有加密分区中缩出约 200GB 安装 Windows 11,用于玩 LoL 等 Linux 下无法运行的游戏。
预计耗时:约 2 小时。全程插着电源。
状态(2026-09-30):真机已按本文完成双系统。 下文保留完整步骤;第 4 步按实机结果写了正确命令(
FIND_BOOTLOADERS不会自动加 Windows)。引导原理(引导程序、EFI 分区、启动项)详见 双系统引导原理说明。
一、当前机器情况
Section titled “一、当前机器情况”| 项目 | 情况 |
|---|---|
| 机型 | Lenovo ThinkPad E14 Gen 6(21M7A001CD) |
| CPU / 内存 | Intel Core Ultra 7 155H / 32GB |
| 硬盘 | 1TB NVMe(/dev/nvme0n1) |
| 固件 | UEFI,安全启动(Secure Boot)关闭,TPM 2.0 已开启 |
| 引导程序 | Limine 12.9(/boot/EFI/limine/limine_x64.efi) |
| 出厂授权 | 主板内置 Windows 11 家庭中文版 授权(存在 ACPI MSDM 表),装同版本可自动激活 |
| 启动 U 盘 | /dev/sda,已经是 Ventoy 盘,卷标 neo@gmail |
装双系统之前的分区:
nvme0n1 953.9G├─nvme0n1p1 2G vfat /boot(EFI 系统分区,Limine 在这里)└─nvme0n1p2 951.9G crypto_LUKS2 └─root 951.9G btrfs / /home /var/log /var/cache/pacman/pkg装完后的分区(与三、目标分区布局一致):
nvme0n1 953.9G UMIS RPJYJ1T24MML1AWQ├─nvme0n1p1 2G vfat /boot(ESP:Limine + Windows Boot Manager 共用)├─nvme0n1p2 751.9G crypto_LUKS → btrfs(Omarchy,已用约 204G)├─nvme0n1p3 16M MSR Microsoft reserved├─nvme0n1p4 199.1G ntfs Windows C 盘└─nvme0n1p5 954M ntfs Windows 恢复分区btrfs 子卷:@(/)、@home、@pkg、@log,另有 zram + /swap/swapfile。
二、为什么这台机器装双系统相对简单
Section titled “二、为什么这台机器装双系统相对简单”- LoL 只要求 TPM 2.0,不要求安全启动。 本机 TPM 2.0 已开启,安全启动保持关闭即可,Limine 不需要做任何签名配置。
- 注意:无畏契约(Valorant)要求安全启动,如果以后要玩它,需要额外配置,本文不涉及。
- 现有 2GB EFI 分区足够 Windows 共用,Windows 安装程序会自动使用它,不需要新建。
- 主板内置出厂授权,Windows 装完联网会自动激活。
唯一的难点:整块硬盘都给了加密的 Linux 分区,需要先从里面缩出空间。
易错点(已踩坑): Omarchy 虽然开了
FIND_BOOTLOADERS=yes,但它不会自动把 Windows 加进 Limine 菜单。limine-install只会探测:
EFI/systemd/systemd-bootx64.efi(systemd-boot)EFI/refind/refind_x64.efi(rEFInd)EFI/BOOT/BOOTX64.EFI(通用 EFI fallback)不包含
EFI/Microsoft/Boot/bootmgfw.efi。而且本机ENABLE_LIMINE_FALLBACK=yes,BOOTX64.EFI其实是 Limine 自己,菜单里的「EFI fallback」再点一次还是 Limine,不是 Windows。必须用limine-entry-tool --add-efi手动加,见 4.3。
三、目标分区布局
Section titled “三、目标分区布局”nvme0n1├─nvme0n1p1 2G EFI 系统分区(Limine + Windows Boot Manager 共用)├─nvme0n1p2 ~751G LUKS2 + btrfs(Omarchy,缩小后)├─nvme0n1p3 16M MSR(Windows 自动创建)├─nvme0n1p4 ~199G NTFS(Windows C 盘,自动创建)└─nvme0n1p5 ~1G Windows 恢复分区(自动创建)第 0 步:准备工作(在 Omarchy 里做)
Section titled “第 0 步:准备工作(在 Omarchy 里做)”0.1 备份重要数据
Section titled “0.1 备份重要数据”缩小加密分区有一定风险。至少把 ~ 下的重要文件复制到移动硬盘或网盘。
0.2 备份 LUKS 加密头
Section titled “0.2 备份 LUKS 加密头”LUKS 头保存了解锁分区所需的密钥信息。它一旦损坏,就算密码正确,整个 Linux 分区也打不开。
sudo cryptsetup luksHeaderBackup /dev/nvme0n1p2 --header-backup-file ~/luks-header-backup.img必须把这个文件复制到电脑之外,比如 U 盘:
sudo cp ~/luks-header-backup.img "/run/media/chenyibw2026/neo@gmail/"这个文件本身不含密码,但配合密码就能解锁分区,请妥善保管。
需要恢复时(从 Live U 盘里执行):
cryptsetup luksHeaderRestore /dev/nvme0n1p2 --header-backup-file luks-header-backup.img0.3 清理失效的 UEFI 启动项
Section titled “0.3 清理失效的 UEFI 启动项”固件里残留着以前系统的启动项,它们指向的分区已经不存在了:
| 编号 | 名称 | 状态 |
|---|---|---|
| Boot0000 | Pop!_OS 22.04 LTS | 失效,指向不存在的分区 |
| Boot0001 | Windows Boot Manager | 失效,指向不存在的分区 |
| Boot0002 | Limine | 当前正在用,不能删 |
efibootmgr # 先看一眼,确认编号和上表一致sudo efibootmgr -b 0000 -Bsudo efibootmgr -b 0001 -Befibootmgr # 确认只剩 Limine 和固件自带项删之前一定核对:Limine 那一项的路径是
\EFI\limine\limine_x64.efi,它不能删。
0.4 准备 ISO
Section titled “0.4 准备 ISO”U 盘已经是 Ventoy 盘,不要再运行 sudo ventoy -i,否则 U 盘会被清空。只需把 ISO 文件复制进去。
U 盘里现有的相关 ISO:
| 用途 | 文件 |
|---|---|
| 缩分区(推荐) | gparted-live-1.8.1-6-amd64.iso |
| 缩分区(备选) | omarchy/omarchy-4.0.0.iso |
| 安装 Windows | 需要重新下载,见下文 |
Windows ISO 必须下载“家庭版(仅限中国)”:
本机(21M7A001CD)出厂预装的是 Windows 11 家庭中文版(联想官方商城参数确认),只有安装同一版本才能用主板里的授权自动激活。
在 微软官网 的“下载 Windows 11 磁盘映像 (ISO)“中选择 Windows 11 家庭版(仅限中国),下载后复制到 Ventoy U 盘。
U 盘里现有的 Windows ISO 都不适合:
| 文件 | 问题 |
|---|---|
zh-cn_windows_11_consumer_editions_x64_dvd_904f13e4.iso |
不含家庭中文版(只有家庭版、家庭单语言版、教育版、专业版、专业教育版、工作站专业版),且是 2021 年的初版(build 22000.132) |
Windows11_Client_x64_zh-cn_26300_9457.iso |
版本号看起来是预览版 |
SW_DVD9_Win_Pro_10_22H2...ISO |
Windows 10 |
X23-81954_..._SERVER_...iso |
Windows Server |
官网另外两个选项也不合适:“多版本 ISO”一般不含家庭中文版;“专业中文版”需要另购专业版授权。
如果想用 Arch ISO 缩分区,把 archlinux-*.iso 复制到 U 盘根目录即可。
0.5 确认 BIOS 设置(可选)
Section titled “0.5 确认 BIOS 设置(可选)”开机按 F1 进 BIOS 看一眼:
- Security → Security Chip:TPM 2.0 为 Enabled(当前已开启)
- Security → Secure Boot:保持 Disabled
第 1 步:缩小 Linux 分区
Section titled “第 1 步:缩小 Linux 分区”为什么要从 U 盘启动: Omarchy 就装在要缩小的分区上,系统运行时这个分区一直在用,不能缩。必须从 U 盘启动一个临时的 Linux 系统来操作。
下面两种方式任选一种。推荐方式 A(GParted Live),图形界面操作,不用自己算数字。
启动 U 盘
Section titled “启动 U 盘”- Omarchy 里完全关机,不要用休眠或挂起。
- 插上 U 盘,按电源键,在联想 Logo 出现时连续按 F12。
- 启动菜单里选 U 盘。
- Ventoy 菜单里选对应的 ISO;如果询问启动模式,选 normal mode。
方式 A:GParted Live(推荐)
Section titled “方式 A:GParted Live(推荐)”启动:
- GParted 启动菜单直接回车,用
GParted Live (Default settings)。 - 接下来的三个问题都直接回车:
- 键盘布局:
Don't touch keymap - 语言:默认(英文)
- 模式:
0(启动图形界面)
- 键盘布局:
- 进入桌面后 GParted 会自动打开。
操作速览:
- 右上角确认选中的是
/dev/nvme0n1(约 953GB),不是 U 盘(/dev/sda)。 - 右键
nvme0n1p2(带[Encrypted]标记的大分区),选 Open Encryption,输入磁盘密码。 - 再右键它,选 Resize/Move:
- Free space following (MiB) 填
204800(即 200GB) - 点 Resize/Move
- Free space following (MiB) 填
- 点工具栏上的绿色对勾 Apply,确认后等待完成,可能要几分钟到十几分钟。
- 完成后硬盘末尾会出现约 200GB 的灰色 unallocated(未分配)空间。不要在里面新建分区,留给 Windows 安装程序。
- 点桌面上的 Exit,选 Reboot。
全程只动
nvme0n1p2。nvme0n1p1(2GB,EFI 分区)绝对不要碰。
这几步合起来就是:把 Linux 的加密分区从末尾“截短”约 200GB,腾出一块空地给 Windows。 下面逐步说明每一步在做什么。
┌─ GParted ─────────────────────────────────────────────────────────────┐│ GParted Edit View Device Partition Help ││ [新建][删除] ... [撤销][✔ Apply] [/dev/nvme0n1 ▼] │ ← 右上角:选择硬盘├───────────────────────────────────────────────────────────────────────┤│ ┌───┬───────────────────────────────────────────────────────────────┐ ││ │p1 │ /dev/nvme0n1p2 [Encrypted] │ │ ← 分区示意条│ └───┴───────────────────────────────────────────────────────────────┘ │├───────────────────────────────────────────────────────────────────────┤│ Partition File System Size Used Flags ││ /dev/nvme0n1p1 fat32 2.00 GiB ... boot │ ← 不要碰│ /dev/nvme0n1p2 [Encrypted] btrfs 951.87 GiB ... │ ← 要操作的分区├───────────────────────────────────────────────────────────────────────┤│ 0 operations pending │ ← 待执行操作列表└───────────────────────────────────────────────────────────────────────┘步骤 1:确认选中的是内置硬盘
Section titled “步骤 1:确认选中的是内置硬盘”GParted 一次只显示一块硬盘,右上角的下拉框用于切换。
| 设备 | 是什么 | 操作 |
|---|---|---|
/dev/nvme0n1(约 953GB) |
内置固态硬盘 | 选这个 |
/dev/sda(约 231GB) |
Ventoy U 盘,GParted 正是从它启动的 | 不要动 |
目的:避免在错误的硬盘上操作。
步骤 2:Open Encryption(解锁加密)
Section titled “步骤 2:Open Encryption(解锁加密)”Linux 分区是一层套一层的结构:
┌─ nvme0n1p2(GPT 分区)───────────────────────────────────┐│ ┌─ LUKS2 加密层 ───────────────────────────────────────┐ ││ │ 没解锁时:GParted 只能看到这一层,内容是一团乱码 │ ││ │ ┌─ btrfs 文件系统 ─────────────────────────────────┐ │ ││ │ │ @(/) @home @pkg @log swapfile │ │ ││ │ │ 已用约 196GB,空闲约 750GB │ │ ││ │ └──────────────────────────────────────────────────┘ │ ││ └──────────────────────────────────────────────────────┘ │└──────────────────────────────────────────────────────────┘| 状态 | GParted 看到的 | Resize/Move |
|---|---|---|
| 未解锁 | 只有一个加密分区,不知道里面的数据在哪、用了多少 | 通常是灰色,不能用 |
| 已解锁 | 能看到里面的 btrfs 及其已用、空闲空间 | 可以使用 |
GParted 必须看清 btrfs 里的数据分布,才能安全地缩小它。
解锁只是“打开来看”,不会修改任何数据。
步骤 3:Resize/Move 对话框
Section titled “步骤 3:Resize/Move 对话框”对话框示意:
┌─ Resize/Move /dev/nvme0n1p2 ────────────────────────────────┐│ ││ ┌──────────────────────────────────────┬──────────────┐ ││ │██████████ 分区(可拖动右边缘) ██████│ 空出的部分 │ ││ └──────────────────────────────────────┴──────────────┘ ││ ││ Free space preceding (MiB): [ 0 ] ← 保持 0,不要改 ││ New size (MiB): [ ... ] ← 自动计算 ││ Free space following (MiB): [ 204800 ] ← 填这里 ││ ││ [ Cancel ] [ Resize/Move ] │└─────────────────────────────────────────────────────────────┘三个字段相加,始终等于分区原来的总大小:
Free space preceding + New size + Free space following = 原分区大小 0 + 约 751GiB + 200GiB = 约 951.87GiB| 字段 | 含义 | 填写 |
|---|---|---|
| Free space preceding (MiB) | 分区前面留出的空间 | 保持 0 |
| New size (MiB) | 分区缩小后的大小 | 自动计算 |
| Free space following (MiB) | 分区后面留出的空间 | 204800 |
效果:分区起点不动,终点往前挪 200GiB,在硬盘末尾空出一块。
缩小前:┌──────┬────────────────────────────────────────────────────────────┐│ p1 │ p2(Linux,951.9GB) ││ 2GB │ │└──────┴────────────────────────────────────────────────────────────┘0 2GB 953.9GB
缩小后:┌──────┬─────────────────────────────────────────────┬──────────────┐│ p1 │ p2(Linux,约 751GB) │ 未分配 ││ 2GB │ │ 约 200GB │└──────┴─────────────────────────────────────────────┴──────────────┘0 2GB 约 753GB 953.9GB ↑ 留给 Windows为什么从末尾缩,而不是从开头缩:
从末尾缩(正确):只需搬动末尾那一小段数据┌──────┬────────────────────────────────────────┬─────┬───────────┐│ p1 │ 数据 数据 数据 ... │数据 │ │└──────┴────────────────────────────────────────┴──┬──┴───────────┘ ↑ │ └──── 挪到前面的空闲位置 ──────┘
从开头缩(错误):整个分区的所有数据都要往后搬┌──────┬───────────┬────────────────────────────────────────────────┐│ p1 │ 空出 │ ←←← 约 196GB 数据全部整体后移 ←←← │└──────┴───────────┴────────────────────────────────────────────────┘ 慢,中途断电还可能损坏数据;而且 Windows 分区要放在 p2 前面所以 Free space preceding 必须保持 0。
为什么填 204800: 单位是 MiB。
204800 MiB = 200 × 1024 MiB = 200 GiB ≈ 214.7 GB(按厂商的 1000 进制算)Windows 安装程序会显示约 200GB。
步骤 4:点 Resize/Move 按钮
Section titled “步骤 4:点 Resize/Move 按钮”点完这个按钮,硬盘还没有任何改动。 GParted 只是把操作加入底部的“待执行操作”列表,界面上的示意条会先变成缩小后的样子:
│ 1 operation pending ││ ▸ Shrink /dev/nvme0n1p2 from 951.87 GiB to 751.87 GiB │这时如果发现填错了,可以撤销:Edit → Undo Last Operation,或者 Edit → Clear All Operations。
步骤 5:点 Apply,真正开始执行
Section titled “步骤 5:点 Apply,真正开始执行”点工具栏的绿色对勾 Apply 并确认后,GParted 才开始修改硬盘。它会按 由内到外 的顺序自动完成三件事:
┌──────────────────────────────────────────────┐第 1 步 │ 缩小 btrfs 文件系统 │ 最里层 │ 把末尾的数据挪到前面的空闲位置,再缩小文件系统│ └──────────────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────────────┐第 2 步 │ 缩小 LUKS 加密层 │ 中间层 │ 让加密层的范围和新的文件系统大小一致 │ └──────────────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────────────┐第 3 步 │ 缩小分区 │ 最外层 │ 修改 GPT 分区表里 p2 的结束位置 │ └──────────────────────────────────────────────┘为什么必须先缩里层:
正确顺序(由内到外): 分区 [==============================] LUKS [==============================] btrfs [=====================] ① 先缩 btrfs LUKS [=====================] ② 再缩 LUKS 分区 [=====================] ③ 最后缩分区 ✔ 数据完整
错误顺序(先缩分区): 分区 [=====================] 先缩分区 btrfs [=====================|XXXXXXXX] btrfs 末尾还在用的部分被切掉 ✘ 数据损坏这和方式 B 中几条命令手动做的事情相同,GParted 自动按正确顺序完成。
执行时间取决于需要搬动的数据量,一般几分钟到十几分钟。执行过程中不要关机、不要拔电源、不要拔 U 盘。
步骤 6:确认结果
Section titled “步骤 6:确认结果”完成后界面应该变成这样:
│ ┌───┬───────────────────────────────────────────────┬───────────────┐ ││ │p1 │ /dev/nvme0n1p2 [Encrypted] │ unallocated │ ││ └───┴───────────────────────────────────────────────┴───────────────┘ ││ /dev/nvme0n1p1 fat32 2.00 GiB ││ /dev/nvme0n1p2 [Encrypted] btrfs 751.87 GiB ││ unallocated unallocated 200.00 GiB │ ← 保持原样这块约 200GB 的空间是“未分配”状态,不属于任何分区。不要在这里新建分区,安装 Windows 时,安装程序会在这里自动创建 MSR、C 盘和恢复分区。
方式 B:命令行(Arch ISO 或 Omarchy ISO)
Section titled “方式 B:命令行(Arch ISO 或 Omarchy ISO)”如果用 Omarchy ISO,务必注意: 它启动后会自动运行安装程序,而安装程序会格式化硬盘。
- 不要在第一个界面(选键盘布局)按
Ctrl+C,新版里这会进入“为他人准备电脑”模式并直接开始安装。 - 不要选硬盘,更不要点
Yes, format disk。 - 正确做法:看到安装界面后什么都别选,按
Ctrl + Alt + F2切到另一个终端;如果出现login:,输入root回车,一般不需要密码。
用 Arch ISO 则启动后直接就是命令行,没有这个问题。
先确认工具齐全:
which cryptsetup btrfs parted三个都能打印出路径再继续。
缩分区。 思路:先把文件系统缩得比目标更小,再缩分区,最后把文件系统撑满。这样留有余量,不需要精确计算。
# 1. 解锁加密分区(输入平时开机的磁盘密码)cryptsetup open /dev/nvme0n1p2 root
# 2. 挂载 btrfs 顶层,缩小 210G(会搬动数据,需要几分钟)mount -o subvolid=5 /dev/mapper/root /mntbtrfs filesystem resize -210G /mntumount /mntcryptsetup close root
# 3. 查看分区,第 2 个分区的 End 应该约为 953.87GiBparted /dev/nvme0n1 unit GiB print
# 4. 把第 2 个分区的结束位置改到 753GiB,腾出约 200GiB# 提示 "Shrinking a partition can cause data loss" 时输入 Yesparted /dev/nvme0n1 resizepart 2 753GiB
# 5. 重新解锁,检查文件系统cryptsetup open /dev/nvme0n1p2 rootbtrfs check --readonly /dev/mapper/root
# 6. 让 btrfs 撑满缩小后的分区mount -o subvolid=5 /dev/mapper/root /mntbtrfs filesystem resize max /mntumount /mntcryptsetup close root
reboot数字是怎么来的:
| 项目 | 数值 |
|---|---|
| 分区 2 起点 | 约 2.00GiB |
| 分区 2 原终点 | 约 953.87GiB |
| 分区 2 新终点 | 753GiB,腾出约 200.9GiB |
| 缩小后 btrfs 大小 | 951.87 − 210 ≈ 741.9GiB |
| 缩小后分区可用空间 | 753 − 2.00 − 0.02(LUKS 头)≈ 751GiB |
| 安全余量 | 约 9GiB,第 6 步会把 btrfs 撑满 |
任何一条命令报错就停下,不要继续执行后面的命令。
验证(两种方式都要做)
Section titled “验证(两种方式都要做)”拔掉 U 盘,正常进入 Omarchy,确认:
lsblk -f /dev/nvme0n1 # nvme0n1p2 应约为 751Gdf -h / # 容量应约为 751G,已用空间和之前一样ls ~ # 文件都在一切正常再进行下一步。
第 2 步:安装 Windows 11
Section titled “第 2 步:安装 Windows 11”- 插上 U 盘,按 F12 从 U 盘启动,在 Ventoy 里选 Windows ISO。
- 语言选中文,点下一步。
- 输入产品密钥时,点 “我没有产品密钥”。
- 选择版本:用“家庭版(仅限中国)“ISO 时一般不会询问。如果让你选,选 家庭中文版(和出厂授权对应才能自动激活)。
- 安装类型选 自定义安装。
- 最关键的一步——选择安装位置:
- 只选那块约 200GB 的 “未分配的空间”,直接点下一步。
- 其他分区一个都不要删、不要格式化,特别是 2GB 的 EFI 分区和约 751GB 的那个大分区。
- Windows 会自动使用现有的 EFI 分区,并在未分配空间里创建 MSR、C 盘和恢复分区。
- 等待安装,中途会重启几次。
- 进入初始设置(OOBE)时要求联网:无线网卡驱动可能暂时没有,可以插网线,或者用手机 USB 共享网络。
装完后电脑会直接进 Windows,而不是 Limine。这是正常的,第 4 步会修复。
第 3 步:Windows 里的必要设置
Section titled “第 3 步:Windows 里的必要设置”3.1 关闭快速启动和休眠
Section titled “3.1 关闭快速启动和休眠”快速启动会让 Windows 关机时不真正释放硬盘,可能导致 Linux 读写 NTFS 出错、Wi-Fi 异常。以管理员身份打开 PowerShell:
powercfg /h off这条命令同时关闭休眠和快速启动。
3.2 统一系统时间
Section titled “3.2 统一系统时间”Linux 按 UTC 读硬件时钟,Windows 默认按本地时间读。不改的话,每次切换系统时间都会差 8 小时。管理员 PowerShell:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f3.3 处理 BitLocker 设备加密
Section titled “3.3 处理 BitLocker 设备加密”Windows 11 登录微软账户后,常常会自动加密系统盘。双系统下,从 Limine 启动和从 F12 菜单启动走的是不同的启动链,可能让它反复要求输入恢复密钥。二选一:
- 关闭(推荐): 设置 → 隐私和安全性 → 设备加密 → 关闭
- 保留: 到 account.microsoft.com/devices/recoverykey 记下恢复密钥
3.4 驱动
Section titled “3.4 驱动”- 先运行 Windows 更新,大部分驱动会自动装上。
- 还缺的话,去联想官网搜 E14 Gen 6 Intel 21M7 下载,或安装 Lenovo Vantage。
3.5 确认 TPM 并安装 LoL
Section titled “3.5 确认 TPM 并安装 LoL”Win + R输入tpm.msc,确认规范版本为 2.0。- 国服:WeGame 或 lol.qq.com。
- 外服:Riot 客户端,会自动安装 Vanguard(需要重启一次)。
第 4 步:回到 Omarchy 修复启动
Section titled “第 4 步:回到 Omarchy 修复启动”4.1 进入 Omarchy
Section titled “4.1 进入 Omarchy”开机按 F12,选 Limine。
4.2 把 Limine 设回第一启动项
Section titled “4.2 把 Limine 设回第一启动项”efibootmgr本机装完后的编号(先核对,不要盲抄):
| 编号 | 名称 |
|---|---|
0000 |
Windows Boot Manager |
0002 |
Limine |
把 Limine 放到最前,并保留后面的 USB/PXE 等备用项:
sudo efibootmgr -o 0002,0000,001D,001E,001F,0020,0021,0022,0023,0024,0025,0026只写 0002,0000 也能默认进 Limine,但可能把固件里其他备用项从 BootOrder 里挤掉。改完再跑一次 efibootmgr,确认 BootOrder 以 0002,0000 开头。
4.3 把 Windows 加进 Limine 菜单
Section titled “4.3 把 Windows 加进 Limine 菜单”不要指望 limine-update / FIND_BOOTLOADERS。 它们不会加 Windows(原因见第二节)。
用工具写入(推荐,会写进 /boot/limine.conf 并带上校验哈希相关流程):
# 路径必须带 ESP 挂载前缀 /boot;只写 /EFI/... 不会真正写入sudo limine-entry-tool --add-efi "Windows" /boot/EFI/Microsoft/Boot/bootmgfw.efi \ --comment "Windows Boot Manager" --priority 40
sudo limine-entry-tool --tree# 应看到:Omarchy / Windows / EFI fallback
sudo rg -n -A6 'Windows|bootmgfw' /boot/limine.conf写入后的条目大致如下:
/Windows### This EFI entry is auto-generated by limine-entry-toolcomment: Windows Boot Managercomment: order-priority=40protocol: efipath: boot():/EFI/Microsoft/Boot/bootmgfw.efi若工具因残留锁失败(例如之前跑过交互式 limine-entry-tool --scan 没退出),先清掉卡住的进程再重试:
ps aux | rg 'limine-entry-tool'# 若有卡住的 --scan,杀掉后再执行上面的 --add-efi也可以先扫一眼固件里有没有 Windows(交互选择,看完用 c 取消即可):
sudo limine-entry-tool --scan# 应列出 Windows Boot Manager → /EFI/Microsoft/Boot/bootmgfw.efi之后每次开机在 Limine 菜单里选择系统即可。
4.4 完成后的最终检查
Section titled “4.4 完成后的最终检查”lsblk -f /dev/nvme0n1 # 应能看到 5 个分区efibootmgr # BootOrder 第一个是 Limine(0002)sudo limine-entry-tool --tree # 菜单里有 Windows重启两次,分别从 Limine 进入 Omarchy 和 Windows,都正常就大功告成。
| 现象 | 原因 | 解决 |
|---|---|---|
| 开机直接进 Windows,看不到 Limine | Windows 把自己设成了第一启动项;Windows 大版本更新后也可能再次发生 | F12 选 Limine 进 Omarchy,重做 4.2 |
| Limine 菜单里没有 Windows | FIND_BOOTLOADERS / limine-update 本来就不会加 Windows;或 --add-efi 路径少了 /boot;或 mutex 被卡住的 --scan 占着 |
按 4.3 用完整路径 /boot/EFI/Microsoft/Boot/bootmgfw.efi 添加;锁超时则先杀掉残留 limine-entry-tool |
| 菜单里点「EFI fallback」还是 Limine | ENABLE_LIMINE_FALLBACK=yes 把 BOOTX64.EFI 写成了 Limine |
正常现象;进 Windows 请选菜单里的 Windows 项 |
| 开机看不到 Limine 菜单,直接进 Omarchy | 菜单等待时间过短 | 检查 /boot/limine.conf 开头的 timeout:,设为 5 |
| 进 Windows 要输入 BitLocker 恢复密钥 | 启动链变化触发 BitLocker 保护 | 输入恢复密钥后关闭设备加密,见 3.3 |
| 两边时间差 8 小时 | 硬件时钟标准不一致 | 见 3.2 |
| Windows 安装程序里看不到未分配空间 | 第 1 步没有成功 | 回 Omarchy 用 lsblk 检查,确认 nvme0n1p2 已缩小 |
| Windows 安装程序看不到硬盘 | BIOS 开启了 Intel VMD/RST | 本机当前未启用 VMD,一般不会出现;如出现,在 BIOS 中关闭 VMD,或加载 Intel RST 驱动 |
| LoL 提示 VAN9001 | TPM 2.0 未开启 | BIOS → Security → Security Chip 开启 |
| 缩分区后 Omarchy 进不去 | 分区或文件系统出错 | 从 U 盘启动,用 cryptsetup open 加 btrfs check --readonly 排查;LUKS 头损坏则用 0.2 的备份恢复 |
附录 A:原理速览
Section titled “附录 A:原理速览”启动流程:
开机 → UEFI 固件 → 按 BootOrder 找启动项 → EFI 分区里的 .efi 文件 ├─ \EFI\limine\limine_x64.efi → Limine 菜单 │ ├─ Omarchy:解锁 LUKS → 挂载 btrfs → 启动 │ └─ Windows:转交给 bootmgfw.efi └─ \EFI\Microsoft\Boot\bootmgfw.efi → Windows几个关键概念:
| 概念 | 作用 |
|---|---|
| GPT | 硬盘的分区表,记录每个分区的起止位置。parted 改的就是它 |
| EFI 系统分区(ESP) | FAT32 格式的小分区,存放各系统的引导程序(.efi 文件),多个系统可以共用 |
| UEFI 启动项 | 存在主板 NVRAM 里,记录“去哪个分区找哪个 .efi 文件”,efibootmgr 管理它 |
| LUKS | 整个分区的加密层。解锁后得到 /dev/mapper/root,文件系统在它里面 |
| btrfs | Omarchy 用的文件系统,支持子卷、快照,可以在挂载状态下缩放 |
| Limine | 引导程序,显示启动菜单,负责启动 Linux 或转交给 Windows |
缩分区为什么是“由内到外”: 数据结构是一层套一层的:分区 → LUKS 加密层 → btrfs 文件系统。缩小时必须先缩最里层(btrfs),再缩外层(分区),否则外层会把里层还在用的数据切掉。扩大时顺序相反。
附录 B:先在虚拟机里演练
Section titled “附录 B:先在虚拟机里演练”真机操作前,建议先在虚拟机里完整走一遍:虚拟机里复刻相同的结构(UEFI + LUKS + btrfs + Limine),搞坏了也不影响真机。注意:虚拟机里不能玩 LoL,Vanguard 会检测虚拟机。
安装 virt-manager
Section titled “安装 virt-manager”sudo pacman -S qemu-full virt-manager libvirt dnsmasq edk2-ovmf swtpmsudo systemctl enable --now libvirtdsudo usermod -aG libvirt $USER装完后注销重新登录,从启动器打开 Virtual Machine Manager(不要选 QEMU),连接选 QEMU/KVM(不要选 User session)。
本机已处理的问题
Section titled “本机已处理的问题”- virt-manager 打不开: mise 安装的 Python 3.12 排在系统 Python 前面,而它缺少 GTK 库(
gi)。已新建~/.local/share/applications/virt-manager.desktop,让启动器固定用/usr/bin/python3启动。终端里需要用/usr/bin/python3 /usr/bin/virt-manager打开。 - 选不了 U 盘里的 ISO: 虚拟机进程以
libvirt-qemu账户运行,无权进入/run/media/chenyibw2026/。把 ISO 复制到/var/lib/libvirt/images/即可:
sudo cp "/run/media/chenyibw2026/neo@gmail/omarchy/omarchy-4.0.0.iso" \ "/run/media/chenyibw2026/neo@gmail/gparted-live-1.8.1-6-amd64.iso" \ /path/to/新下载的-Windows11-家庭版仅限中国.iso \ /var/lib/libvirt/images/虚拟机配置建议
Section titled “虚拟机配置建议”| 用途 | CPU | 内存 | 硬盘 |
|---|---|---|---|
| 单独装 Arch 练手 | 4 核 | 4GB | 40GB |
| 双系统完整演练 | 4 核 | 6GB | 160GB(Windows 11 至少要 64GB) |
- 主机内存紧张,虚拟机内存不要超过 6GB,开之前先关掉浏览器等大程序。
- 虚拟硬盘按实际用量占空间,填 160GB 不会立刻占掉 160GB。
- 创建时勾选 Customize configuration before install:
- Overview → Firmware 选 UEFI(
OVMF_CODE.4m.fd,不带 secboot)。装完后不能再改。 - 双系统演练还要 Add Hardware → TPM,选 Emulated、2.0。
- Overview → Firmware 选 UEFI(
- 进桌面黑屏:Video 选 Virtio 并勾选 3D acceleration,Display Spice 打开 OpenGL,Listen type 选 None。
和真机的差异
Section titled “和真机的差异”| 真机 | 虚拟机 | |
|---|---|---|
| 硬盘设备名 | /dev/nvme0n1,分区 nvme0n1p1 |
/dev/vda,分区 vda1 |
| 启动菜单 | 开机按 F12 | 开机看到 TianoCore 时按 Esc → Boot Manager |
| 存档 | 无 | 关机后复制硬盘文件 |
存档与恢复(关机状态下操作,btrfs 上使用 reflink 几乎瞬间完成):
# 存档sudo cp --reflink=auto /var/lib/libvirt/images/虚拟机名.qcow2 ~/vm-backup-阶段名.qcow2# 恢复sudo cp --reflink=auto ~/vm-backup-阶段名.qcow2 /var/lib/libvirt/images/虚拟机名.qcow2- 用 Omarchy ISO 装一个加密的 Omarchy,存档。
- 用 GParted ISO 启动,缩出空间,验证 Omarchy 能正常启动,存档。
- 用 Windows ISO 安装到未分配空间。
- 回到 Omarchy,修复启动顺序(
efibootmgr -o ...),再用limine-entry-tool --add-efi把 Windows 加进菜单(不要只跑limine-update)。
每一步前后都可以观察:lsblk -f、efibootmgr、/boot/limine.conf 分别发生了什么变化。