← 返回文档

系统更新与快照回滚

Linxira OS 是滚动发行:安全补丁上游一发布即可获得,不用等版本周期。配套的安全网也是自动的——系统每小时静默检查更新,每个 pacman 事务前自动创建 Timeshift 快照,真出问题时重启在 GRUB 菜单里选一下快照就能回滚。本文覆盖这套机制的日常用法,以及可选的「全自动更新」开关 EnableAutoApply。

1. 自动检查:默认开启,无需动手

装好系统后不需要装任何「更新管理器」,检查机制随 linxira-update 包自动生效:

想立刻手动查一次:

linxira-update --check

status.json(version 1)的字段:

字段说明
check_statusok(检查成功)/ error(检查失败)/ incomplete(有包查不到来源,未谎报最新)
pre_snapshot_id可选,字符串。自动应用更新前创建的快照 ID(见第 5 节)
auto_apply可选,布尔。本次是否执行了全自动更新,拒绝时附带原因(见第 5 节)

2. 更新系统的几种方式

1

Welcome 一键更新:打开 Linxira Welcome,更新卡片会显示检查结果,点击即可启动更新(Welcome 只是启动器,实际执行的是 linxira-update --launch,没有内嵌第二套更新逻辑)。

2

命令行更新:终端直接运行 linxira-update,交互式确认后执行。

linxira-update
3

手动 pacman 同样安全:sudo pacman -Syu 随时可用。自动快照由 pacman 钩子实现,对任何 pacman 事务生效(见第 3 节),不走 linxira-update 也有快照保护。

更新范围与边界

3. 快照:每个 pacman 事务前自动执行

系统内置 pacman 钩子 /etc/pacman.d/hooks/linxira-timeshift-autosnap.hook:PreTransaction 阶段、匹配 Upgrade/Install/Remove 全部操作、目标 *——也就是说,任何 pacman 事务(系统升级、装组件、甚至你手敲的 pacman -R)动手改系统之前,都会先执行 timeshift --create --tags O 记录当前状态。

定时快照

除了「事务前」,还有「按时间/按开机」的周期快照。安装时已由安装器自动配置(btrfs 模式,每日 3 份 + 每次开机 3 份);运行期随时用 linxira-config 查看 or 开关,底层与安装期是同一个幂等脚本:

linxira-config timeshift status    # 查看当前配置
linxira-config timeshift enable    # 启用(幂等)
linxira-config timeshift disable   # 停用

4. 出问题怎么办:重启,在 GRUB 里选快照

快照不是摆设,grub-btrfsd 服务(--timeshift-auto 模式)会自动探测 Timeshift 快照并生成对应 GRUB 启动项;grub-btrfs-overlayfs 已写入 mkinitcpio HOOKS,快照条目以只读 overlay 方式引导。

1

重启,在 GRUB 菜单里找到快照条目(按时间排列,选更新之前的那一个)。

2

只读验证:从快照条目启动的是「那个时间点的完整系统」(含当时的内核、驱动与用户态软件),但以只读方式运行、不落盘——先确认问题确实是这次更新引起的。

3

确认后恢复:验证无误后执行恢复(Timeshift 图形界面或 sudo timeshift --restore),系统回到更新前状态。想重试更新也没问题——下次更新前照样会自动快照。

💡 内核更新导致无法开机这类问题,优先用 GRUB 菜单里的 linux-lts 备用内核启动(双内核兜底);快照回滚针对的是「用户态包更新把系统搞坏」这一类问题。两层分工详见博客《btrfs 快照与回滚》。

5. 全自动更新:EnableAutoApply(默认关闭)

检查到更新后,连「点一下确认」都省掉——自动完成「快照 → 全量升级」。这个开关默认关闭,适合放在固定网络环境下、希望无人值守保持最新的机器。

开启方法

编辑 ~/.config/linxira-update/linxira-update.conf,加裸键一行(与 EnableAUR 同风格,单独一行即可):

EnableAutoApply

删掉这一行即恢复默认关闭。

硬门控:四个条件全满足才会自动动系统

开启后,--check 一旦发现更新,先做门控检查,全部满足才继续:

  1. 根文件系统是 btrfs;
  2. /etc/timeshift/timeshift.json 存在(Timeshift 已配置);
  3. mkinitcpio HOOKS 包含 grub-btrfs-overlayfs(快照可引导);
  4. grub-btrfsd 单元已启用(快照会进 GRUB 菜单)。

四项齐备后执行:显式创建快照并校验成功 → 非交互全量升级(pacman -Syu --noconfirm)→ 把快照 ID 写入 status.json 的 pre_snapshot_id。

拒绝与降级

任一门控不满足,或快照创建失败,本次自动应用直接拒绝:保持「只检查 + 通知」的原有行为,status.json 记 auto_apply: false 及原因。快照打不出来就不碰系统,这是硬规则,没有例外路径。

⚠️ 全自动更新意味着「补丁到达即安装」,极端情况下一个坏更新会在无人值守时进入系统——此时第 4 节的快照回滚就是兜底。对可用性敏感的生产机器,建议保持默认关闭、看到通知后再手动更新。

命令速查表

命令 / 位置作用
linxira-update --check立即检查更新(不安装)
linxira-update交互式检查并更新
~/.local/state/linxira-update/status.json最近一次检查结果(Welcome/托盘/通知读同一文件)
linxira-config timeshift status查看快照配置与状态
linxira-config timeshift enable / disable启用 / 停用周期快照(每日 3 + 开机 3)
sudo timeshift --list列出现有快照
sudo timeshift --restore恢复到指定快照
conf 中一行 EnableAutoApply开启全自动更新(默认关闭,硬门控保护)

相关页面:安装指南(btrfs + Timeshift 分区方案)、官方软件(linxira-update 与其他自研工具)、Config Hub(timeshift 子命令)、博客《btrfs 快照与回滚》(设计原理与演练建议)。