简短回答:写入备份时记录每个文件的哈希,之后再对备份运行检查。
如果哈希仍然一致,字节就还在。除此之外没有任何东西能证明这一点。
有四种问题会发生,而且没有一种会自己报告:
这四种情况从外面看都一样:一个装满了名称和日期都看似合理的文件的目录。
写入备份时,记录你写入的内容:
find /Volumes/Backup/Documents -type f -exec shasum -a 256 {} + > ~/backup.sha256
之后,检查备份是否仍与该记录一致:
shasum -a 256 -c ~/backup.sha256
每一行都会返回 OK 或 FAILED。完全消失的文件会被报告为无法读取,这正是你想要的行为:缺失的文件是一次失败,而不是缺少证据。
把哈希文件存放在备份磁盘以外的地方。和被描述对象放在一起的记录,会与它一同消失。
这是另一个问题,也是人们常栽跟头的问题。备份中最新的文件会告诉你任务上次成功的时间:
find /Volumes/Backup -type f -newermt '-7 days' | head
没有输出说明一周内没有写入任何内容。如果你依赖 Time Machine,直接问它:
tmutil latestbackup
哈希值证明字节完好,却不能证明你能把文件取回来,因为这还取决于工具、索引、加密密钥,以及你是否记得怎么使用这三者。每年一两次,把几个文件恢复到一个临时文件夹里并打开看看。
挑一个你真的会舍不得的文件,而不是测试文档。这个练习的意义在于发现你的恢复密钥写在被备份的那台 Mac 的便笺里,而且要在一个平静的周二发现。
自动检查有三个手动检查没有的特性:无论你是否记得都会运行,会检查每个数据块,包括你没想到的那些,并且一失败就告诉你。
Copy Shelter 会读回备份,并用存储时的哈希检查每个数据块,把被删除的数据块报告为缺失,并且只计算真正检查过的副本。它还会在 7 天没有成功备份后提醒你,这能发现上面的第四种故障,也就是最常见的那种。
shasum 慢吗?它会读取每个字节,所以耗时大约与复制数据相当。这正是关键:不读取数据的检查,无法发现无法返回数据的磁盘。
可以,随机抽样比什么都不做好得多。find ... | shuf -n 50 会给你五十个文件来检查,能很快发现正在损坏的磁盘或停止的任务,但发现不了单个损坏的文件。
存储服务商会对自己的副本做校验,这能防止他们的磁盘故障。但它防不了从未完成的上传、发送时就已损坏的文件,或停止了的同步。检查必须由你这边来做。
不要覆盖备份。先把 Mac 上的数据再复制一份到不同的存储,然后再弄清两者中哪个有问题。检查失败后立刻重新运行备份,等于亲手销毁了证据。
完整检查每月一次是合理的节奏,抽样检查每周一次,实际恢复每年一两次。任何按计划进行的事,都胜过任何需要你记着的事。