现代 Chromebook 双系统 Linux

HP Elite Dragonfly(i7-1265U + 32GB + 512 GB)。

重置了3、4次,得出了最优雅的双系统解决方案。不需要解除固件写保护,也就不存在砖的可能。

1. 先启用开发者模式

自行查找教程

2. 刷写RW_LEGACY

Chromebook的固件分为两部分,一部分写保护,一部分可写。前者用于ChromeOS的安全启动,后者(RW_LEGACY)用于传统启动,默认这个区域是空的(或者是用不了的U-Boot)。如果在这个区域写入自定义固件(edk2),并且在开机时按下ctrl+l,就可以启动uefi兼容固件edk2用于引导标准的linux系统。这一部分可以参考Mr. Chromebox。这里快速带过,不会提及细节。

按Ctrl+ALT+F2(刷新键),打开VT2,使用chronos登录(默认无密码),执行(手敲一下吧):

1
cd; curl -LOf https://mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh

flash
建议先选5备份固件,然后选1刷写RW_LEGACY。如果失败,优先检查网络环境。

3. 调整STATE分区大小

ChromeOS下,所有的剩余空间都分给了STATE分区。并且,Google魔改了GPT系统,加入了自定义标签来识别不同分区,所以要尽可能不破坏原来的分区,并且需要在ChromeOS下使用cgpt命令操作,防止标签被移除。

在下载文件夹新建文件 resize.sh,写入以下内容(可以自己调整分区大小,默认EFI留1GB、根给了300GB):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 设定目标硬盘 (根据实际情况修改,通常为 /dev/nvme0n1 或 /dev/mmcblk0)
DISK="/dev/nvme0n1"

# 设定分配空间大小 (GB)
EFI_GB=1
LINUX_GB=300

# 获取当前 STATE 分区 (p1) 的起点和大小
START=$(sudo cgpt show -i 1 -n -b -q $DISK)
SIZE=$(sudo cgpt show -i 1 -n -s -q $DISK)

# 计算所需扇区数量 (1GB = 1024*1024*2 = 2097152 个 512字节扇区)
EFI_SECTORS=$(( EFI_GB * 1024 * 1024 * 2 ))
LINUX_SECTORS=$(( LINUX_GB * 1024 * 1024 * 2 ))

# 计算 ChromeOS 缩小后的新 STATE 大小
NEW_STATE_SIZE=$(( SIZE - EFI_SECTORS - LINUX_SECTORS ))

# 计算两个新分区的精准起点 (首尾相接,不留缝隙)
EFI_START=$(( START + NEW_STATE_SIZE ))
LINUX_START=$(( EFI_START + EFI_SECTORS ))

# 缩小原有的 STATE 分区 (p1)
sudo cgpt add -i 1 -b $START -s $NEW_STATE_SIZE -l STATE $DISK

# 新建独立的 EFI 分区 (设为 p15,避开原系统的 1-14),类型设为 efi
sudo cgpt add -i 15 -b $EFI_START -s $EFI_SECTORS -t efi -l EFI-LINUX $DISK

# 新建 Linux 根分区 (设为 p16),类型设为 data
sudo cgpt add -i 16 -b $LINUX_START -s $LINUX_SECTORS -t data -l ROOT-LINUX $DISK

# 强制同步磁盘缓存
sync

echo "Done."

因为Crosh没有sudo权限,需要切换到VT2来执行脚本。按ctrl+alt+f2(刷新键),会进入tty,输入chronos登录(默认没有密码,除非你自己设置过)

执行以下指令:

1
cat /home/chronos/user/MyFiles/Downloads/resize.sh | bash

不直接执行脚本是为了绕过W^X限制。当输出Done.时,执行:

1
sudo reboot

重启,务必选择从内部磁盘启动。这时候会显示”Your System is repairing itself”,这是对的,因为这款Chromebook采用了LVM分区,需要利用自带的修复机制来重建LVM。再次完成OOBE。
repairing

注意,刷写RW_LEGACY时,会在p12新建一个64MB的EFI分区,但是像Ubuntu这样的系统使用/boot/efi来挂载esp分区,这会把内核塞在esp里,64MB显然不够,所以新建了一个1GB大的EFI分区。

4. 安装Linux

自行下载你喜欢的发行版。如果使用Ubuntu,请使用25.04及以上,后续修复音频需要

使用你熟悉的方式写入启动U盘,这里我就使用dd了。

1
sudo dd if=Downloads/archlinux-2026.03.01-x86_64.iso of=/dev/disk17 bs=4m status=progress oflag=sync

choose
插入后重启,选择”选择备用的引导加载程序”,确保备用的引导加载程序是edk2(而不是U-Boot)。默认会启动USB设备。看见兔子就说明没问题了。
load_edk2
按照标准流程完成安装,注意务必选择手动配置分区,删除刚刚新建的p16分区,新建为 / ,启动磁盘选择 nvme0n1,务必检查efi分区是否选择到刚刚新建的p15分区(1GB大小)。检查完成后继续安装。
partition
之前提到p12分区的64MB EFI的问题,如果是Ubuntu,会自动处理标记为非esp,使用新建的1GB esp。如果是ArchLinux,需要手动unmark(上图忘记了)。或者把里面的bootx64.efi改名为bootx64.efi.bak。总之只要别启动那个64MB的ESP就好。

5. 修复音频

参考这个