苹果Mac系统工具Time Machine(时间机器)在NAS或远程备份教程

大家好,奇点今天分享一个关于Mac的我个人觉得有用的小技巧。

用过Mac的朋友应该都知道Time Machine(时间机器)。这个苹果官方推出的系统备份工具。你可以把你的Mac系统盘上的数据完整地备份到本地硬盘、移动硬盘或者远程服务器上,并在必要时进行还原。因为是系统原生软件,Time Machine在兼容性安全性上都做得不错。

 

 

不过用过Time Machine的朋友,大概率都不会选择本地备份。毕竟这相当于在本地磁盘做一个Raid,要花至少2倍的磁盘空间,并不合算。而且绝大多数需要数据还原的时候都是本地磁盘的软硬件出问题,备份放在本地,并不保险。因此很多人都会选择在必要时外接一个移动硬盘,或者在家庭环境中把备份放到比如NAS上。我就是把Time Machine备份设置到了家里的群晖中并让Time Machine自动运行。

 

 

其实起因是这样的:最近因为NAS上“有价值的影音文件”数量过多,NAS的空间不够了,于是上去把各个文件夹捋了一遍,才发现Macbook在NAS上的备份,有将近1T。而我MacBook本地的数据量,也才200多G。

 

于是问题来了,放在NAS或者远程服务器上的Time Machine备份,应该怎么管理?

▍备份逻辑

首先我们要简单了解一下Time Machine的备份逻辑。

官方说明:

备份频率和持续时间

“时间机器”会创建过去24小时的每小时备份,过去一个月的每日备份,以及过去所有月份的每周备份。如果备份磁盘已满则最早的备份会被删除。
从macOS Ventura开始,你可以更改备份频率:打开“时间机器”设置,点按“选项”,然后从“备份频率”菜单中选取一项设置。
首次备份可能需要很长时间,但你可以在备份期间继续使用Mac“时间机器”只会备份自上次备份以来有变动的文件,因此将来的备份速度会加快。
如果“时间机器”备份所用的时间比你预期的要长,

 

 

最新系统里备份的频率也可以手动调节

如果我们把Time Machine的备份放在NAS段并选择每小时自动备份,那系统就会每小时去连接NAS并在必要的时候进行Snapshot(快照),一来一去,备份的数量也就越来越多。平时只顾备份,却没有想着清理,自然会占用大量空间。

▍备份清理

Apple为Time Machine设置了一个App,在应用程序里找到Timemachine.app ,打开,就能进入到Time Machine备份的图形界面。

你可以选择到某个时间段的备份,删除或还原数据。很直观。

但如果你的备份是放在NAS上,因为网络原因,数据显示会有一定的滞后,反应会比较慢,操作并不方便。

那怎么办?当然是用命令行了!

Apple为Time Machine备份管理提供了一个叫 tmutil 的命令行工具,对应翻译应该就是 Time Machine Util(时间机器实用程序)。能实现的功能可以通过 tmutil –help 进行查看,输出如下:

➜  ~ tmutil --help
Usage: tmutil version
Usage: tmutil enable
Usage: tmutil disable
Usage: tmutil startbackup [-a | --auto] [-b | --block] [-r | --rotation] [-d | --destination dest_id]
Usage: tmutil stopbackup
Usage: tmutil delete [-d backup_mount_point -t timestamp] [-p path]
Usage: tmutil deleteinprogress machine_directory
Usage: tmutil restore [-v] src ... dst
Usage: tmutil compare [-@acdefghlmnstuEX] [-D depth] [-I name]
       tmutil compare [-@acdefghlmnstuEX] [-D depth] [-I name] snapshot_path
       tmutil compare [-@acdefghlmnstuEUX] [-D depth] [-I name] path1 path2
Usage: tmutil setdestination [-a]  mount_point
       tmutil setdestination [-ap] afp://user[:pass]@host/share
Usage: tmutil removedestination destination_id
Usage: tmutil destinationinfo [-X]
Usage: tmutil addexclusion [-p|-v] item ...
Usage: tmutil removeexclusion [-p|-v] item ...
Usage: tmutil isexcluded item ...
Usage: tmutil inheritbackup machine_directory
       tmutil inheritbackup sparse_bundle
Usage: tmutil associatedisk [-a] mount_point volume_backup_directory
Usage: tmutil latestbackup [-m] [-t] [-d mount_point]
Usage: tmutil listbackups [-m] [-t] [-d mount_point]
Usage: tmutil machinedirectory
Usage: tmutil calculatedrift machine_directory
Usage: tmutil uniquesize path ...
Usage: tmutil verifychecksums path ...
Usage: tmutil localsnapshot
Usage: tmutil listlocalsnapshots <mount_point>
Usage: tmutil listlocalsnapshotdates [<mount_point>]
Usage: tmutil deletelocalsnapshots [<mount_point> | <snapshot_date>]
Usage: tmutil thinlocalsnapshots <mount_point> [purgeamount] [urgency]

这里列出几个我们需要用到的命令:

  • tmutil machinedirectory: 获取本机的Timemachine的目标位置
  • tmutil listbackups: 列出当前使用的Timemachine存储备份
  • tmutil delete: 删除指定的Timemachine备份
一步步来:
1. 获取本机的Time Machine的目标位置
➜  ~ tmutil machinedirectory
Password:
/Volumes/Backups of MY-MBP

这里的  “MY-MBP” 就是主机名

2. 列出当前使用的Time Machine存储备份列表

➜  ~ tmutil listbackups -t
2023-03-15-085701
2023-03-16-093627
...
2023-04-15-200347
2023-04-16-075734

这里用了 -t,只会输出具体的时间戳。如果只是 tmutil listbackups 或者加了 -m,则会输出具体的存储路径,比如:

/Volumes/.timemachine/D533333-96EF-4403-BBBB-32222222222222/2023-04-14-203808.backup/2023-04-14-203808.backup

 

有个小技巧,通过上面两个命令,我们其实已经知道了Time Machine备份的存储位置和包含的备份信息,但如果你登录到NAS上,看到的只是一个 .sparsebundle文件,并不是完全按照目录形式进行存储,无法正常地预览到其中的内容。

 

但我们依旧可以通过Finder来看。Finder -> Go -> Go to folder,输入#1 里我们得到的目录名 “/Volumes/Backups\ of\ MY-MBP”, 这时候就可以通过窗口预览各个备份了。

 

我个人理解应该是个设计问题,在终端下文件系统并不能让你看到备份的历史结构,因为 Time Machine 一开始就不是纯粹按照目录存储进行设计的。Apple 提供了Time Machine 管理工具,但却没有提供一个轻松进入这个界面的入口,也不知道是设计缺陷还是产品经理故意为之。

3. 备份删除

在#2 里我们说到可以在Finder中找到Time Machine 备份的路径,那在上图的界面中,右键一个时间备份,就可以直接删除备份。

或者,继续用命令行。

➜  ~ sudo tmutil delete -d /Volumes/Backups\ of\ MY-MBP  -t 2023-03-12-153254
1 backups deleted

这里的命令是:tmutil delete -d [location] – t [timestamp],也是比较直观的。

这样我们就可以手动地进行备份快照的删除和管理了。

▍自动化

既然都用了命令了,为什么不搞个自动化?比如自动删除30天前所有的Time Machine 备份?

于是我问了ChatGPT

 

写一个.sh 脚本列出在一个月之前的所有的
timemachine backups备份,并用tmutil delete -d删除所有备份

以下是一个列出一个月之前的所有TimeMachine备份并删除它们的脚本:

#!/bin/bash
#计算一个月前的日期
onemonth_ago=$(date-v-1m+Y-m-d

#查找一个月前的所有备份并将其删除
sudo tmutil listbackups i while read backup
backup_date=$(echo “$backup” sed -E if [[ “$backup date” < “$one month ago
echo “Deleting backup: $backup’ sudo tmutil delete “$backup’ fi
done

使用方法:
1.打开终端应用程序。
2创建一个新的文本文件,将上述脚本复制并粘贴到文件中。
3.将文件保存为sh扩展名的脚本文件,例如
delete old backups.sh
4.在终端中导航到脚本文件所在的目录。
5.运行 chmod +x delete old backups.sh命
令将脚本文件设置为可执行。
6.运行./delete old backups.sh命令以运行脚本。
脚本将使用date命令计算出一个月前的日期。然后,脚本将使用 sudo tmutil listbackups命令列出所有Time Machine备份,并使用while循环遍历它们。对于每个备份,脚本将提取备份的日期,并将其与一个月前的日期进行比较。如果备份的日期早于一个月前的日期,脚本将使用sudo tmutil delete 命令删除备份。最后,脚本将打印出已删除的备份。

 

ChatGPT给的代码大体上逻辑没问题,但具体的tmutil命令行错了(Apple在Big Sur做了一次代码升级,看来ChatGPT的数据库还是没更新到最新)。简单修改了一下,就能用了。

#!/bin/bash
# 计算一个月前的日期one_month_ago=$(date -v-30d +%Y-%m-%d)
# 查找一个月前的所有备份并将其删除sudo tmutil listbackups -t | while read backup; do    backup_date=$(echo "$backup" | sed -E 's/.*\/(.{4})-(.{2})-(.{2})-\d{6}/\1-\2-\3/')if [[ "$backup_date" < "$one_month_ago" ]]; thenecho "Deleting backup: $backup"        sudo tmutil delete -d /Volumes/Backups\ of\ MY-MBP  -t "$backup"fidone

把.sh 文件通过快捷指令定时自动运行,自动化就基本完成了。

▍总结

虽然苹果提供了关于Time Machine的很多功能设置,但是对于普通用户,如果把Time Machine设置在远端NAS上,对于备份的管理和清理并不是很直观。通过简单的命令和脚本,可以实现对备份快照的精准清理和进一步管理。

希望对大家有用。

 

赵弈钦和前女友汤梦欣10分钟电话录音在哪里下载?

手机铃声响后提示忙音:对不起,您拨打的电话正在通话中?8个原因

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注