You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何判断Time Machine备份是否正在运行以避免中断备份?

解决APFS快照清理与Time Machine备份冲突的问题

我之前也踩过这个坑!APFS自动生成的快照悄咪咪占满硬盘,一开始也是写了cron脚本跑tmutil deletelocalsnapshots清理,结果好几次把正在进行的Time Machine备份搞中断了,太头疼了。后来摸索出几个更靠谱的办法,分享给你:

1. 用隐藏的tmutil命令判断备份状态

Apple其实给tmutil藏了几个没写进手册页的实用命令,用来判断备份状态刚好合适:

  • tmutil currentphase:会返回当前备份的阶段,比如BackupNotRunning就代表没有备份在执行,要是返回PreBackupCopying这类值,说明备份正在进行中。
  • tmutil isbackuprunning:更直接,返回0代表备份在运行,1代表没在运行。

你可以把脚本改成这样,先判断再执行删除:

# 检查是否有备份在运行
if tmutil currentphase | grep -q "BackupNotRunning"; then
    # 批量删除所有本地快照
    SNAPSHOTS=$(tmutil listlocalsnapshots / | awk -F '.' '{print $4}')
    for SNAP in $SNAPSHOTS; do
        echo "正在删除快照:$SNAP"
        tmutil deletelocalsnapshots $SNAP
    done
else
    echo "Time Machine正在备份,跳过本次快照清理"
    exit 0
fi

2. 别再靠挂载点判断了,它有局限性

你之前用/Volumes/Time Machine Backups/挂载情况判断的问题在于:Time Machine的本地快照备份是不会生成这个挂载点的,这时候脚本会误判成没有备份在运行,删快照直接中断本地备份。用上面的tmutil命令就完全没这个问题。

3. 更省心的方案:让系统自动清理快照

其实不用手动写脚本,你可以修改系统配置,限制APFS自动快照的保留时间,让系统自己清理旧快照:

  • 查看当前本地快照保留天数:defaults read /Library/Preferences/com.apple.TimeMachine.plist LocalSnapshotRetentionInterval
  • 修改为保留2天(根据自己需求调整):sudo defaults write /Library/Preferences/com.apple.TimeMachine.plist LocalSnapshotRetentionInterval -int 2
  • 重启Time Machine服务生效:sudo launchctl stop com.apple.backupd && sudo launchctl start com.apple.backupd

这样系统会自动删除超过保留天数的快照,完全不用你操心,也不会和备份冲突。

最后提醒一句:删除快照时尽量用批量删除的方式,别手动指定日期,避免漏删或者误删正在使用的快照哦。

内容的提问来源于stack exchange,提问作者Grzegorz Adam Hankiewicz

火山引擎 最新活动