在 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 删除快照的全过程,包括具体文件、删除顺序及执行结果。这种方式为系统维护提供了更高的可见性,也有助于后期审计和排障。

Leave a Reply

Your email address will not be published. Required fields are marked *