1

我正在使用时间机器将一些服务器备份到稀疏磁盘映像包中,并且我想要一个脚本来清理旧备份并在空间释放后重新调整映像大小。我相当确定数据受到保护,因为如果我通过右键单击删除旧备份,我必须输入密码才能删除它们。为了让我的脚本能够删除它们,我一直以 root 身份运行它。出于某种原因,它只是无法运行,并且它试图删除的每个文件我都得到

rm: /file/: Operation not permitted

这是我的脚本:

#!/bin/bash

for server in servername; do
    /usr/bin/hdiutil attach -mountpoint /path/to/mountpoint /path/to/sparsebundle/$server.sparsebundle/;
    /bin/sleep 10;
    /usr/bin/find /path/to/mountpoint -type d -mtime +7 -exec /bin/rm -rf {} \;
    /usr/bin/hdiutil unmount /path/to/mountpoint;
    /bin/sleep 10;
    /usr/bin/hdiutil compact /path/to/sparsebundle/$server.sparsebundle/;
    done

exit;

我认为导致此问题的问题之一是它需要指定一个挂载点,因为默认挂载是 /Volumes/Time\ Machine\ Backups/ 这就是我创建挂载点的原因。我还认为它试图在安装后快速删除文件,但实际上还没有安装,这就是我添加睡眠的原因。我也尝试过使用-deletefind 而不是 的选项-exec,但没有任何区别。

对此的任何帮助将不胜感激,因为我不知道为什么这不起作用。

4

2 回答 2

1

首先,以这种方式精简备份是一个非常糟糕的主意。首先,当您-mtime在目录上使用 find 的测试时,您正在检查该目录的最后一次修改时间;您需要检查的是该目录中的某些内容最后一次被修改的时间。例如,我的 Mac 上的 / (根目录)被修改已经 10 天了,所以如果我在备份中使用了你的脚本(并且它有效),它将从所有备份中删除我的整个启动卷(包括最新的一)。

其次,您弄乱了 Time Machine 精心安排的备份结构,这可能会有效地破坏备份(甚至包括未来的备份)。不要这样做。

(注意:任何时候你看到这个命令rm,特别-Rf 在以 root 身份运行时,确保你知道它指向什么,然后再按回车键。)

现在,至于实际问题,我怀疑您遇到了Time Machine 的安全网,这是一个试图防止损坏 TM 备份的内核扩展。这是一件好事(见最后一点),你不应该禁用它。

不过,有一个简单的解决方案:使用 Time Machine。具体来说,用于tmutil delete /path/to/snapshot删除旧快照。快照路径将类似于/path/to/mountpoint/Backups.backupdb/<servername>/<YYYY-MM-DD-HHMMSS>.

请注意,删除旧快照实际上只会删除未与其他快照共享的文件;因此,如果您删除一周前的所有快照,您不会删除一周内未修改的文件(备份),而是删除一周多前删除的文件。哪个更有可能是您想要的...

于 2013-11-05T20:23:33.937 回答
0

虽然这是一个旧线程,但需要提到的是时间机器包中的备份不是副本,而是指向文件的链接(使用硬链接),这意味着如果文件没有更改,则文件的副本只需要几个字节的开销,所以仅仅因为你可以看到一个文件的多个副本并不意味着它们都在使用物理空间。

来自(这个关于时间机器如何工作的网站)---------

当 Time 进行第一次备份时,它会复制所有内容(除了一些系统工作文件、垃圾等)。它还制作了一个有日期的备份文件夹,并在其中放置了指向它刚刚制作的所有备份副本的硬链接。然后,当 Time Machine 进行第二次备份时,它会复制自第一次备份以来更改的所有内容,创建另一个已注明日期的备份文件夹,并在其中放入指向新备份项目的硬链接。到目前为止,一切都很好。

但诀窍在于:它还将硬链接放在第二个备份文件夹中,指向未更改的项目。因此,该文件夹现在包含指向第二次备份时系统上所有内容的链接。


于 2016-03-25T17:29:12.687 回答