Skip to content

Omarchy + Windows 11 双系统安装指南

目标:在不重装 Omarchy 的前提下,从现有加密分区中缩出约 200GB 安装 Windows 11,用于玩 LoL 等 Linux 下无法运行的游戏。

预计耗时:约 2 小时。全程插着电源。

状态(2026-09-30):真机已按本文完成双系统。 下文保留完整步骤;第 4 步按实机结果写了正确命令(FIND_BOOTLOADERS 不会自动加 Windows)。

引导原理(引导程序、EFI 分区、启动项)详见 双系统引导原理说明。


项目 情况
机型 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 “二、为什么这台机器装双系统相对简单”
  1. LoL 只要求 TPM 2.0,不要求安全启动。 本机 TPM 2.0 已开启,安全启动保持关闭即可,Limine 不需要做任何签名配置。
    • 注意:无畏契约(Valorant)要求安全启动,如果以后要玩它,需要额外配置,本文不涉及。
  2. 现有 2GB EFI 分区足够 Windows 共用,Windows 安装程序会自动使用它,不需要新建。
  3. 主板内置出厂授权,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。


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 里做)”

缩小加密分区有一定风险。至少把 ~ 下的重要文件复制到移动硬盘或网盘。

LUKS 头保存了解锁分区所需的密钥信息。它一旦损坏,就算密码正确,整个 Linux 分区也打不开。

Terminal window
sudo cryptsetup luksHeaderBackup /dev/nvme0n1p2 --header-backup-file ~/luks-header-backup.img

必须把这个文件复制到电脑之外,比如 U 盘:

Terminal window
sudo cp ~/luks-header-backup.img "/run/media/chenyibw2026/neo@gmail/"

这个文件本身不含密码,但配合密码就能解锁分区,请妥善保管。

需要恢复时(从 Live U 盘里执行):

Terminal window
cryptsetup luksHeaderRestore /dev/nvme0n1p2 --header-backup-file luks-header-backup.img

固件里残留着以前系统的启动项,它们指向的分区已经不存在了:

编号 名称 状态
Boot0000 Pop!_OS 22.04 LTS 失效,指向不存在的分区
Boot0001 Windows Boot Manager 失效,指向不存在的分区
Boot0002 Limine 当前正在用,不能删
Terminal window
efibootmgr # 先看一眼,确认编号和上表一致
sudo efibootmgr -b 0000 -B
sudo efibootmgr -b 0001 -B
efibootmgr # 确认只剩 Limine 和固件自带项

删之前一定核对:Limine 那一项的路径是 \EFI\limine\limine_x64.efi,它不能删。

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 盘根目录即可。

开机按 F1 进 BIOS 看一眼:

  • Security → Security Chip:TPM 2.0 为 Enabled(当前已开启)
  • Security → Secure Boot:保持 Disabled

为什么要从 U 盘启动: Omarchy 就装在要缩小的分区上,系统运行时这个分区一直在用,不能缩。必须从 U 盘启动一个临时的 Linux 系统来操作。

下面两种方式任选一种。推荐方式 A(GParted Live),图形界面操作,不用自己算数字。

  1. Omarchy 里完全关机,不要用休眠或挂起。
  2. 插上 U 盘,按电源键,在联想 Logo 出现时连续按 F12。
  3. 启动菜单里选 U 盘。
  4. Ventoy 菜单里选对应的 ISO;如果询问启动模式,选 normal mode。

启动:

  1. GParted 启动菜单直接回车,用 GParted Live (Default settings)。
  2. 接下来的三个问题都直接回车:
    • 键盘布局:Don't touch keymap
    • 语言:默认(英文)
    • 模式:0(启动图形界面)
  3. 进入桌面后 GParted 会自动打开。

操作速览:

  1. 右上角确认选中的是 /dev/nvme0n1(约 953GB),不是 U 盘(/dev/sda)。
  2. 右键 nvme0n1p2(带 [Encrypted] 标记的大分区),选 Open Encryption,输入磁盘密码。
  3. 再右键它,选 Resize/Move:
    • Free space following (MiB) 填 204800(即 200GB)
    • 点 Resize/Move
  4. 点工具栏上的绿色对勾 Apply,确认后等待完成,可能要几分钟到十几分钟。
  5. 完成后硬盘末尾会出现约 200GB 的灰色 unallocated(未分配)空间。不要在里面新建分区,留给 Windows 安装程序。
  6. 点桌面上的 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 │ ← 待执行操作列表
└───────────────────────────────────────────────────────────────────────┘

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 里的数据分布,才能安全地缩小它。

解锁只是“打开来看”,不会修改任何数据。

对话框示意:

┌─ 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。

点完这个按钮,硬盘还没有任何改动。 GParted 只是把操作加入底部的“待执行操作”列表,界面上的示意条会先变成缩小后的样子:

│ 1 operation pending │
│ ▸ Shrink /dev/nvme0n1p2 from 951.87 GiB to 751.87 GiB │

这时如果发现填错了,可以撤销:Edit → Undo Last Operation,或者 Edit → Clear All Operations。

点工具栏的绿色对勾 Apply 并确认后,GParted 才开始修改硬盘。它会按 由内到外 的顺序自动完成三件事:

┌──────────────────────────────────────────────┐
第 1 步 │ 缩小 btrfs 文件系统 │ 最里层
│ 把末尾的数据挪到前面的空闲位置,再缩小文件系统│
└──────────────────────┬───────────────────────┘
↓
┌──────────────────────────────────────────────┐
第 2 步 │ 缩小 LUKS 加密层 │ 中间层
│ 让加密层的范围和新的文件系统大小一致 │
└──────────────────────┬───────────────────────┘
↓
┌──────────────────────────────────────────────┐
第 3 步 │ 缩小分区 │ 最外层
│ 修改 GPT 分区表里 p2 的结束位置 │
└──────────────────────────────────────────────┘

为什么必须先缩里层:

正确顺序(由内到外):
分区 [==============================]
LUKS [==============================]
btrfs [=====================] ① 先缩 btrfs
LUKS [=====================] ② 再缩 LUKS
分区 [=====================] ③ 最后缩分区 ✔ 数据完整
错误顺序(先缩分区):
分区 [=====================] 先缩分区
btrfs [=====================|XXXXXXXX] btrfs 末尾还在用的部分被切掉 ✘ 数据损坏

这和方式 B 中几条命令手动做的事情相同,GParted 自动按正确顺序完成。

执行时间取决于需要搬动的数据量,一般几分钟到十几分钟。执行过程中不要关机、不要拔电源、不要拔 U 盘。

完成后界面应该变成这样:

│ ┌───┬───────────────────────────────────────────────┬───────────────┐ │
│ │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 则启动后直接就是命令行,没有这个问题。

先确认工具齐全:

Terminal window
which cryptsetup btrfs parted

三个都能打印出路径再继续。

缩分区。 思路:先把文件系统缩得比目标更小,再缩分区,最后把文件系统撑满。这样留有余量,不需要精确计算。

Terminal window
# 1. 解锁加密分区(输入平时开机的磁盘密码)
cryptsetup open /dev/nvme0n1p2 root
# 2. 挂载 btrfs 顶层,缩小 210G(会搬动数据,需要几分钟)
mount -o subvolid=5 /dev/mapper/root /mnt
btrfs filesystem resize -210G /mnt
umount /mnt
cryptsetup close root
# 3. 查看分区,第 2 个分区的 End 应该约为 953.87GiB
parted /dev/nvme0n1 unit GiB print
# 4. 把第 2 个分区的结束位置改到 753GiB,腾出约 200GiB
# 提示 "Shrinking a partition can cause data loss" 时输入 Yes
parted /dev/nvme0n1 resizepart 2 753GiB
# 5. 重新解锁,检查文件系统
cryptsetup open /dev/nvme0n1p2 root
btrfs check --readonly /dev/mapper/root
# 6. 让 btrfs 撑满缩小后的分区
mount -o subvolid=5 /dev/mapper/root /mnt
btrfs filesystem resize max /mnt
umount /mnt
cryptsetup 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 撑满

任何一条命令报错就停下,不要继续执行后面的命令。

拔掉 U 盘,正常进入 Omarchy,确认:

Terminal window
lsblk -f /dev/nvme0n1 # nvme0n1p2 应约为 751G
df -h / # 容量应约为 751G,已用空间和之前一样
ls ~ # 文件都在

一切正常再进行下一步。


  1. 插上 U 盘,按 F12 从 U 盘启动,在 Ventoy 里选 Windows ISO。
  2. 语言选中文,点下一步。
  3. 输入产品密钥时,点 “我没有产品密钥”。
  4. 选择版本:用“家庭版(仅限中国)“ISO 时一般不会询问。如果让你选,选 家庭中文版(和出厂授权对应才能自动激活)。
  5. 安装类型选 自定义安装。
  6. 最关键的一步——选择安装位置:
    • 只选那块约 200GB 的 “未分配的空间”,直接点下一步。
    • 其他分区一个都不要删、不要格式化,特别是 2GB 的 EFI 分区和约 751GB 的那个大分区。
    • Windows 会自动使用现有的 EFI 分区,并在未分配空间里创建 MSR、C 盘和恢复分区。
  7. 等待安装,中途会重启几次。
  8. 进入初始设置(OOBE)时要求联网:无线网卡驱动可能暂时没有,可以插网线,或者用手机 USB 共享网络。

装完后电脑会直接进 Windows,而不是 Limine。这是正常的,第 4 步会修复。


快速启动会让 Windows 关机时不真正释放硬盘,可能导致 Linux 读写 NTFS 出错、Wi-Fi 异常。以管理员身份打开 PowerShell:

Terminal window
powercfg /h off

这条命令同时关闭休眠和快速启动。

Linux 按 UTC 读硬件时钟,Windows 默认按本地时间读。不改的话,每次切换系统时间都会差 8 小时。管理员 PowerShell:

Terminal window
reg add "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f

Windows 11 登录微软账户后,常常会自动加密系统盘。双系统下,从 Limine 启动和从 F12 菜单启动走的是不同的启动链,可能让它反复要求输入恢复密钥。二选一:

  1. 先运行 Windows 更新,大部分驱动会自动装上。
  2. 还缺的话,去联想官网搜 E14 Gen 6 Intel 21M7 下载,或安装 Lenovo Vantage。
  • Win + R 输入 tpm.msc,确认规范版本为 2.0。
  • 国服:WeGame 或 lol.qq.com。
  • 外服:Riot 客户端,会自动安装 Vanguard(需要重启一次)。

开机按 F12,选 Limine。

Terminal window
efibootmgr

本机装完后的编号(先核对,不要盲抄):

编号 名称
0000 Windows Boot Manager
0002 Limine

把 Limine 放到最前,并保留后面的 USB/PXE 等备用项:

Terminal window
sudo efibootmgr -o 0002,0000,001D,001E,001F,0020,0021,0022,0023,0024,0025,0026

只写 0002,0000 也能默认进 Limine,但可能把固件里其他备用项从 BootOrder 里挤掉。改完再跑一次 efibootmgr,确认 BootOrder 以 0002,0000 开头。

不要指望 limine-update / FIND_BOOTLOADERS。 它们不会加 Windows(原因见第二节)。

用工具写入(推荐,会写进 /boot/limine.conf 并带上校验哈希相关流程):

Terminal window
# 路径必须带 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-tool
comment: Windows Boot Manager
comment: order-priority=40
protocol: efi
path: boot():/EFI/Microsoft/Boot/bootmgfw.efi

若工具因残留锁失败(例如之前跑过交互式 limine-entry-tool --scan 没退出),先清掉卡住的进程再重试:

Terminal window
ps aux | rg 'limine-entry-tool'
# 若有卡住的 --scan,杀掉后再执行上面的 --add-efi

也可以先扫一眼固件里有没有 Windows(交互选择,看完用 c 取消即可):

Terminal window
sudo limine-entry-tool --scan
# 应列出 Windows Boot Manager → /EFI/Microsoft/Boot/bootmgfw.efi

之后每次开机在 Limine 菜单里选择系统即可。

Terminal window
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 的备份恢复

启动流程:

开机 → 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),再缩外层(分区),否则外层会把里层还在用的数据切掉。扩大时顺序相反。


真机操作前,建议先在虚拟机里完整走一遍:虚拟机里复刻相同的结构(UEFI + LUKS + btrfs + Limine),搞坏了也不影响真机。注意:虚拟机里不能玩 LoL,Vanguard 会检测虚拟机。

Terminal window
sudo pacman -S qemu-full virt-manager libvirt dnsmasq edk2-ovmf swtpm
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER

装完后注销重新登录,从启动器打开 Virtual Machine Manager(不要选 QEMU),连接选 QEMU/KVM(不要选 User session)。

  • 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/ 即可:
Terminal window
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/
用途 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。
  • 进桌面黑屏:Video 选 Virtio 并勾选 3D acceleration,Display Spice 打开 OpenGL,Listen type 选 None。
真机 虚拟机
硬盘设备名 /dev/nvme0n1,分区 nvme0n1p1 /dev/vda,分区 vda1
启动菜单 开机按 F12 开机看到 TianoCore 时按 Esc → Boot Manager
存档 无 关机后复制硬盘文件

存档与恢复(关机状态下操作,btrfs 上使用 reflink 几乎瞬间完成):

Terminal window
# 存档
sudo cp --reflink=auto /var/lib/libvirt/images/虚拟机名.qcow2 ~/vm-backup-阶段名.qcow2
# 恢复
sudo cp --reflink=auto ~/vm-backup-阶段名.qcow2 /var/lib/libvirt/images/虚拟机名.qcow2
  1. 用 Omarchy ISO 装一个加密的 Omarchy,存档。
  2. 用 GParted ISO 启动,缩出空间,验证 Omarchy 能正常启动,存档。
  3. 用 Windows ISO 安装到未分配空间。
  4. 回到 Omarchy,修复启动顺序(efibootmgr -o ...),再用 limine-entry-tool --add-efi 把 Windows 加进菜单(不要只跑 limine-update)。

每一步前后都可以观察:lsblk -f、efibootmgr、/boot/limine.conf 分别发生了什么变化。