Timeshift 在小米平板5(nabu)上的踩坑记录

设备:小米平板5(codename: nabu)
系统:Arch Linux ARM,内核 6.14
桌面:KDE Plasma 6(X11)

1 |安装时镜像源 404

安装 Timeshift 时遇到 rsync 包下载失败:

错误:无法从 mirrors.tuna.tsinghua.edu.cn 获取文件 'rsync-3.4.1-2-aarch64.pkg.tar.xz'
The requested URL returned error: 404

原因:镜像源同步延迟,某个版本的包还没同步过来 ~~(虽然没必要提的,但是arch arm真的太难搞了,还是去arch上面折腾滚动更新好了)~~

解决方法

sudo pacman -Syy        # 强制刷新数据库
sudo pacman -Syu        # 完整滚动更新后再装
sudo pacman -S timeshift

注意:不要只用 -Sy 然后装单包,这会导致 partial upgrade,可能引发 so 库版本不匹配。

---

二:GUI 备份卡死,各种奇怪位置卡住 (我也不知道这是为什么,反正写一下吧 arch arm 很多包都是自动构建的,出点问题也正常,但是应该不是这个问题导致卡住的,应该是快照同步完了的,但是因为某些原因,info.json无法写入

(这些都不是问题,第四个应该才是问题的原因)

打开 Timeshift GUI 开始备份后,进度条卡在各种目录:

  • /var/log/journal/(journal 日志)
  • /var/lib/systemd/coredump/(崩溃转储)
  • /var/spool/plymouth/(开机动画临时文件)
  • /usr/src/linux-nabu(内核源码,体积巨大)
  • /usr/share/zsh/site-functions/(小文件但大量)

解决方法:在 Timeshift 设置 → 过滤器中添加排除项:

/var/log/\*\*
/var/tmp/\*\*
/var/cache/\*\*
/var/spool/\*\*
/var/opt/\*\*
/var/lib/systemd/coredump/\*\*
/usr/src/\*\*
/proc/\*\*
/sys/\*\*
/dev/\*\*
/run/\*\*
/tmp/\*\*
/timeshift/\*\*

这些目录对系统回滚没有意义,全部排除。

顺手清理 journal 日志减少首次备份体积:

sudo journalctl --vacuum-size=200M

---

三:rsync 被 OOM killer 杀死

加了排除项后还是卡死。用另一个终端监控:

watch -n 2 'free -h \&\& ps aux | grep rsync'

发现 rsync 进程消失了,内存从 2.9G 可用降到 200M 左右后进程消失。

查日志确认:

sudo journalctl -b -1 | grep -i "oom\\|killed process\\|out of memory"

输出:

kernel: OOM killer disabled.
kernel: OOM killer enabled.

Timeshift 备份时主动禁用了 OOM killer (但是这里也能讲一下

解决方法:备份前释放内存,关掉大内存进程:

sudo systemctl stop *****a
sudo sync \&\& echo 3 | sudo sh -c 'echo 3 > /proc/sys/vm/drop\_caches'

或者切换到 TTY 关掉桌面环境:

# Ctrl+Alt+F2 进入 TTY
sudo systemctl stop sddm
sudo timeshift --create --comments "首次快照"

---
(这些都不是问题,第四个应该才是问题的原因)

四:rsync 成功但 info.json 没有写入

进了 TTY,内存充裕,rsync 跑完了(exit_code: 0),但 Timeshift 界面显示"0 个快照"。

查 Timeshift 日志:

cat /var/log/timeshift.log

关键内容:

\[12:29:11] export LC\_ALL=C.UTF-8 rsync -aii --recursive ...
\[12:32:55] AsyncTask: finish(): enter
\[12:32:55] exit\_code: 0
\[12:33:32] loading snapshots from '...snapshots': 0 found

rsync 成功结束,但 Timeshift 跳过了写 info.json 这一步,直接去扫描快照目录,发现空的就报"0 个快照"。

查看快照目录:

ls /timeshift/snapshots/2026-05-01\_15-15-45/
# 输出:exclude.list  localhost  rsync-log  rsync-log-changes
# 缺少 info.json

原因:推测是 Timeshift 在 ARM 平台上的 bug,rsync 子进程结束信号处理存在竞态条件,导致写 info.json 的步骤被跳过。

解决方法:手动写 info.json:

sudo nano /timeshift/snapshots/2026-05-01\_15-15-45/info.json
{
  "uuid" : "2026-05-01\_15-15-45",
  "name" : "2026-05-01\_15-15-45",
  "sys\_uuid" : "你的分区UUID",
  "date" : "2026-05-01 15:15:45",
  "date\_formatted" : "2026-05-01 15:15:45",
  "description" : "手动修复",
  "tags" : "O",
  "backup\_parent\_uuid" : "",
  "live\_snapshot" : false,
  "written\_to\_disk" : true
}

获取分区 UUID:

sudo blkid /dev/sda32

日期格式参考 Timeshift 设置 → 杂项中显示的格式:%Y-%m-%d %H:%M:%S

写完后重启 Timeshift GUI 即可识别到快照(时间显示可能有偏差,不影响回滚功能)(但是不知道为什么,这样设置之后仍然有bug,显示是1970年的快照()

---

五:GUI 备份彻底卡死(timeshift CPU 99%,rsync 不存在)

最诡异的情况:Timeshift 进程 CPU 占用 99%,但 ps 里根本没有 rsync 子进程,界面显示"正在同步"但什么都没发生。

sudo ps aux | grep rsync
# 只有 grep 自己,没有 rsync

同时 top 里出现:

kworker/u32:1-ufs\_clkscaling\_0

原因:nabu 的 UFS 存储时钟调频驱动(ufs\_clkscaling)在持续 IO 时可能触发问题,导致 Timeshift 在启动 rsync 之前就卡住了。这是底层驱动的已知问题,不是 Timeshift 本身的 bug ( 但是原因真的是这个的话,我不认为nabu会在固定 20万个文件的时候卡住,20多万个文件应该是我总的需要备份的文件,备份完成之后没有写入info.json而已,因为我查看过进程,一切都是正常为0结束的

解决方法:放弃 Timeshift GUI,直接用 rsync 手动备份:

sudo rsync -aAXv \\
  --exclude='/proc/\*\*' \\
  --exclude='/sys/\*\*' \\
  --exclude='/dev/\*\*' \\
  --exclude='/run/\*\*' \\
  --exclude='/tmp/\*\*' \\
  --exclude='/var/log/\*\*' \\
  --exclude='/var/cache/\*\*' \\
  --exclude='/var/tmp/\*\*' \\
  --exclude='/var/spool/\*\*' \\
  --exclude='/usr/src/\*\*' \\
  --exclude='/home/\*\*' \\
  --exclude='/timeshift/\*\*' \\
  / /timeshift/snapshots/manual-backup-1/

这次完全没有卡,257,026 个文件,16.7GB,顺利完成。

结论:Timeshift 的进程管理层在 nabu 上有问题,但底层 rsync 和 UFS 本身是正常的。

---

回滚方法

需要回滚时,从 OrangeFox Recovery 或其他外部环境执行:

sudo rsync -aAXv \\
  --exclude='/proc/\*\*' \\
  --exclude='/sys/\*\*' \\
  --exclude='/dev/\*\*' \\
  --exclude='/run/\*\*' \\
  --exclude='/tmp/\*\*' \\
  / /timeshift/snapshots/manual-backup-1/localhost/ /

源和目标对调即可。

---

增量备份方案

使用 --link-dest 参数实现硬链接增量,新快照中没有变化的文件直接硬链接到上一个快照,几乎不占额外空间:

sudo rsync -aAXv --delete \\
  --exclude='/proc/\*\*' \\
  --exclude='/sys/\*\*' \\
  --exclude='/dev/\*\*' \\
  --exclude='/run/\*\*' \\
  --exclude='/tmp/\*\*' \\
  --exclude='/var/log/\*\*' \\
  --exclude='/var/cache/\*\*' \\
  --exclude='/var/tmp/\*\*' \\
  --exclude='/var/spool/\*\*' \\
  --exclude='/usr/src/\*\*' \\
  --exclude='/home/\*\*' \\
  --exclude='/timeshift/\*\*' \\
  --link-dest=/timeshift/snapshots/manual-backup-1/localhost/ \\
  / /timeshift/snapshots/manual-backup-2/localhost/

这就是 Timeshift rsync 模式的底层原理,手动实现完全等价。

---

总结

问题 原因 解决方案
镜像源 404 ARM 镜像同步延迟 pacman -Syy 后完整更新
备份卡在特定目录 大文件/活跃写入文件 添加排除项
rsync 被杀 内存不足触发 OOM 关桌面进入 TTY 再备份
备份完成但找不到快照 info.json 未写入(ARM bug) 手动写 info.json
GUI 完全卡死不启动 rsync UFS 驱动问题 放弃 GUI,直接用 rsync
posted @ 2026-05-02 11:13  气温骤降  阅读(20)  评论(0)    收藏  举报