在 Linux 系统中,Timeshift 常用于系统快照的备份与恢复。某些环境下,Timeshift 被配置为每小时执行一次快照清理任务。为了更好地了解该过程的具体行为,对其中一个自动执行的删除操作进行了系统调用级别的追踪,以下是相关分析与记录。
系统环境概述
通过以下命令观察当前运行的 Timeshift 相关进程:
ps aux | grep timeshift
输出内容显示,Timeshift 正在执行 --check --scripted,并调用 rm -rfv 删除某一旧快照目录,例如:
rm -rfv /run/timeshift/7017/backup/timeshift/snapshots/2025-08-05_20-50-22/
-v 参数指明删除过程中应输出详细信息,但由于进程在后台运行,终端中无法直接查看这些输出。
使用 strace 实时追踪删除行为
为了监控实际被删除的文件,使用 strace 对目标 rm 进程进行追踪:
sudo strace -e unlink,unlinkat,rmdir -p <rm_PID>
执行后,会实时输出每个文件或目录的删除调用。例如:
unlinkat(5, "classlookup.pxi", 0) = 0
unlinkat(3, "spacy-3.7.2.dist-info", AT_REMOVEDIR) = 0
这些系统调用清楚表明了:
- 被删除对象的文件名
- 是否为目录(
AT_REMOVEDIR) - 操作是否成功(返回值为 0 表示成功)
整个追踪过程涵盖了多个 Python 包构建文件、配置文件、用户目录内容等。
删除任务完成的标志
追踪结束时,可以观察到如下信息:
unlinkat(AT_FDCWD, "/run/timeshift/7017/backup/timeshift/snapshots/2025-08-05_20-50-22/", AT_REMOVEDIR) = 0
+++ exited with 0 +++
表示整个快照目录已被删除,进程以退出码 0 正常结束。
应用建议
- 若需持续记录类似操作,可封装
strace过程为脚本,每当删除任务运行时自动启动追踪并保存日志。 - 也可与系统监控工具整合,在关键目录变动时生成告警或记录快照。
示例追踪脚本
#!/bin/bash
PID=$(pgrep -f "rm -rfv /run/timeshift")
if [ -n "$PID" ]; then
LOG="/var/log/timeshift-delete-$(date +%F_%H-%M-%S).log"
sudo strace -e unlink,unlinkat,rmdir -p "$PID" -o "$LOG"
fi
该脚本自动查找正在运行的 Timeshift 删除任务并将其行为保存至日志。
总结
通过系统调用追踪工具如 strace,可以清晰地掌握 Timeshift 删除快照的全过程,包括具体文件、删除顺序及执行结果。这种方式为系统维护提供了更高的可见性,也有助于后期审计和排障。