如何手动删除旧备份以释放Time Machine的空间?


224

我使用Time Capsule进行备份,现在我希望驱动器从额外的Mac备份数据。但是驱动器中充满了Mac 1的旧备份。根本没有足够的空间可用于Mac 2的备份。

运行Time Machine备份时出现以下错误消息:

Time Machine无法完成备份。 对于备份磁盘,此备份太大。备份需要28.68 GB,但只有626.2 MB可用。

除存储备份所需的空间外,Time Machine还需要备份磁盘上的工作空间。打开“ Time Machine”首选项以选择更大的备份磁盘或通过排除文件来使备份更小。

我知道Time Machine本身可以在需要更多空间时删除旧备份。但是在这种情况下,它不会删除任何Mac 1备份来为Mac 2腾出空间。

问题是,我该如何手动进行?


3
鉴于外部驱动器的价格便宜,我很想购买一个驱动器并将其用于您的额外计算机。我喜欢的元素: amazon.com/Western-Digital-Elements-External-WDBAAU0010HBK-NESN/...
james.garriss

2
@ james.garriss好点子:)但是,我仍然必须在时间轴上交换驱动器:)
JesperRønn-Jensen2012年

1
任何人都知道是否有一种方法(不编写脚本)要求TM仅保留一个备份一个月以用于1岁以上的备份?
gamov 2012年

2
您不能在TM磁盘上创建2个不同的分区,并为每个Mac选择不同的分区吗?
皮埃尔·瓦特莱

Answers:


235

使用sudo时要小心,并确保选择正确的Mac文件,因为没有撤消或确认以下命令:

sudo tmutil delete /Volumes/drive_name/Backups.backupdb/old_mac_name

sudo命令需要您的密码(它不会在屏幕上回显,因此只需键入它并暂停一下,以确保您在按Enter键之前输入正确的文件)。如果您想更加安全,可以选择一个快照先删除,以确保该命令可以正常工作。这很好,因为清理一些较大的备份集可能要花费数小时,并且您想让Mac确信它正在删除正确的信息存储。

您可以使用该tmutil工具逐个删除备份。

sudo tmutil delete /Volumes/drive_name/Backups.backupdb/mac_name/YYYY-MM-DD-hhmmss

由于tmutil是与Lion一起引入的,因此这不适用于早期的OS版本。

如果要获取当前备份目录(可以定义多个目标,并且只有一个是“当前”)

sudo tmutil machinedirectory

4
像魅力一样工作。我的旧备份很大,并且由于硬盘驱动器的更改而与原始时间机器设置断开连接。我无法使用sudo rm(古怪)删除它们,但这确实成功了。谢谢!
大卫·皮索尼

2
@drfrogsplat是的,但是在使用旧备份时,原始mac会死掉是很常见的。就我而言,我试图释放备份驱动器上的空间,以便可以使用它来备份新的Mac。
Abhi Beckert

5
@square_eyes这不是删除硬链接文件的方式。假设同一文件有100个间隔。该文件在磁盘上一次存在,但是链接数为100。删除一个时,该目录条目消失在删除的位置,链接数现在为99。只有当链接数变为0时,文件本身才会被删除。所有其他删除仅删除目录条目。
bmike

5
无需一一删除备份。您可以键入sudo tmutil delete 然后将所有要删除的备份拖到“终端”窗口中。手册页中的@drfrogsplat 提到此命令可以删除其他计算机创建的备份。

2
@pointum是正确的。此外,如果您想留在终端中,可以使用通配符,例如:'sudo tmutil delete 2015- *'这可能是一个缓慢的过程,尤其是对于旋转磁盘而言,因此删除多个文件对于理智和效率至关重要。
马特·德莱斯特

81

最简单的方法是:

  1. 输入时间机器(在要删除其备份的Mac上)
  2. 转到您要删除的时间点
  3. 在查找器中选择看起来像齿轮的图标,然后选择“删除备份”(在Mavericks中:在查找器窗口中右键单击并选择“删除备份”)

这样可以确保备份目录保持准确,并且数据完整性保持不变。


3
@drfrogsplat是非常正确的,因为使用Apple提供的GUI是删除备份的最佳方法(适用于所有版本),并且由于存在多个视觉反馈(如果您仔细看)和输入之前的检查,因此不太容易出错。您的密码,以确保您知道删除是永久的。
bmike

1
我在齿轮菜单中的特立独行者上看不到删除备份项目
brainray 2014年

@brainray我张贴了特立独行者的
Inder Kumar Rathore

1
除非进行部分删除(无论出于何种原因),否则它会忘记那里存在部分备份,因此您不能再用tmutil delete
Jeroen Wiert Pluimers进行

1
如果您遇到“正在等待...”的问题,则此方法不起作用。apple.stackexchange.com/questions/207787/…等待并非总是有效。
Almo

39

对于小牛/优胜美地

  1. 输入时间机器
  2. 选择备份
  3. 右键单击备份(在查找器窗口中)
  4. 选择“删除备份”

它将询问密码,您完成了

在此处输入图片说明


右键单击备份:在哪里?
brainray 2014年

将显示一个查找器窗口,在该窗口的中间单击鼠标右键,并将显示一个选项列表
Inder Kumar Rathore 2014年

13
值得注意的是,Time Machine在退出 Time Machine 之前不会执行删除操作,也不会要求您输入密码。在选择要删除的文件和文件夹之后退出Time Machine的过程也不明显:您必须单击cancel左下角。(显然,您正在“取消”的事情是文件的还原;执行此操作时显然不认为删除被取消。)
mhucka 2014年

3
这也从另一台机器为我工作。我的旧MBP炸了,我的新MBP具有不同的硬盘驱动器名称和分区等。最后,它装满了我的TM磁盘,并且我不想删除所有旧计算机的备份。因此,您按住Option键,在菜单栏中单击Time Machine,然后单击“浏览其他备份磁盘”。通过插入具有相同名称的驱动器,我能够获得第一个旧备份。从那里,我可以转到旧的驱动器结构,并使用此技巧删除一些真正的旧备份。
2015年

或只需单击侧边栏中的根设备文件夹(以显示旧分区和驱动器结构)。在我的案例中,“设备-> Macbook Pro”
Mark

18

该脚本将自动为您的计算机找到最旧的TM备份,告诉您哪个是最旧和最新的备份,并提示您删除最旧的备份。您必须输入Y并输入管理员密码才能删除它。

bash脚本:

COMPUTER_NAME=$(scutil --get ComputerName)
NBACKUPS=$(tmutil listbackups | grep "$COMPUTER_NAME" | wc -l)
OLDEST_BACKUP=$(tmutil listbackups | grep "$COMPUTER_NAME" | head -n1)
LATEST_BACKUP=$(tmutil latestbackup)
echo Latest backup: $LATEST_BACKUP

if [[ -n "$LATEST_BACKUP" && "$LATEST_BACKUP" != "$OLDEST_BACKUP" ]]; then
     echo -n "$NBACKUPS backups. Delete oldest: ${OLDEST_BACKUP##*/} [y/N]? "
     read answer
     case $answer in
         y*)
             echo Running: sudo tmutil delete "$OLDEST_BACKUP"
             sudo time tmutil delete "$OLDEST_BACKUP"
             ;;
         *)
             echo No change
             ;;
     esac
 else
     echo "No backup available for deletion"
 fi

总之,此脚本将自动为您的计算机找到最旧的TM备份,告诉您哪个是最旧和最新的备份,并提示您删除最旧的备份。您必须输入Y并输入管理员密码才能删除它。
横街

3
请注意,这不会自动减小Sparsebundle备份文件的大小。您必须进入并跑步sudo hdiutil compact /path/to/disk-image
横街

14

我一直在问自己这个问题,这里的答案肯定有帮助。但是,缺少一个方面,这可能是在回答此问题时不存在的新实现“详细信息”。

tmutil delete确实确实删除了备份,但实际上并没有回收使用的空间,至少没有以任何保证的方式。我花了整整2天的时间从超过2年前删除备份,根据最终完成消息,这大约相当于 400Gb的数据。我确实看到空闲备份空间指示相应地增加了一次,但是在下一次备份之后,我又降低到了仅7%的可用空间(使用了858Gb而不是大约450Gb)。那真的使我陷入困境。

对此谜题的答案如下:http : //blog.hawkimedia.com/2012/08/reclaiming-a-timemachine-volumes-disk-space/ 简而言之,您必须压缩实际上保存备份的稀疏包如果它托管在网络磁盘上,或者托管在未使用HFS +格式化的磁盘上。我没有稀疏捆绑包中没有托管的TM备份,因此无法检查using tmutil delete是否可以免费回收。它很可能做到了,而实际上它不在Time Capsule上可能只是稀疏捆绑协议的特殊之处。之后执行的命令sudo tmutil deletesudo hdiutil compact /Volumes/YourTimeMachineDisk/YourBackupName.sparsebundle。就我而言

Starting to compact…
Reclaiming free space…
...................................................................................................................................
Finishing compaction…
Reclaimed 403.2 GB out of 583.5 GB possible.

好消息是,该命令仅花费了tmutil时间的一小部分,在磁盘上进行查找的时间大大减少,并且使用了更少的RAM(实际上,它是在我编写此答案的时间内完成的)。


我现在正在删除没有稀疏束缚的备份,并且该空间确实没有任何额外的步骤就可以释放。
Almo

12

如果Time Machine实际上仅备份差异,则不需要反向删除。再加上每次删除都需要花费一些时间,有一个脚本可以在当前脚本完成后删除下一个脚本。

按照上面的user36971的示例脚本,我编写了一个脚本,它将删除指定的或更早版本中的所有备份:

#!/bin/bash

if [ -z "$1" ]
then
    echo "must specify backup id: YYYY-MM-DD-HHMMSS"
    exit 1
fi

FOUND_BACKUP=0;
BACKUPS=""
while read line; do
    if [[ "${line}" == *$1* ]]
    then
        FOUND_BACKUP=1;
    fi

    if [ "${FOUND_BACKUP}" == "1" ]
    then
        BACKUPS+="${line}"$'\n'
    fi
done < <(/usr/bin/tmutil listbackups | tail -r)

if [ "${FOUND_BACKUP}" == "0" ]
then
    exit 1
fi

printf '%s' "$BACKUPS"

echo -n "Delete above backups? [y/N]? "
read answer
case $answer in
    y*)
        while read line; do
            if [ -n "${line}" ]
            then
                echo Running: /usr/bin/sudo /usr/bin/tmutil delete "${line}"
                /usr/bin/sudo time /usr/bin/tmutil delete "${line}"
            fi
        done < <(echo "${BACKUPS}")
        ;;
    *)
        echo No change
        ;;
esac

注意,我并没有包括在我的脚本的计算机名称检查,因此,如果您共享多台电脑一个备份驱动器,您可能需要添加额外的检查。


1
TM仅在每次运行时备份增量,但每次运行都会在备份磁盘上保留完整副本。对于两次运行之间未更改的文件(这意味着其中的大多数),仅添加一个新的目录条目。这可能意味着,如果两次运行之间只有很小的增量,则可能必须删除大量备份,然后才能发现可用空间显着增加。
nohillside

2
删除备份的顺序没有任何区别。实际上,如果您使用通配符tmutil delete来删除给定年份的所有备份,则会将它们从旧到旧删除。顺便说一句,在大多数情况下,使用通配符比使用脚本容易得多:)
mluisbrown '16

我建议在删除备份行之前添加printf'%s'“ $ BACKUPS”以提供更好的反馈
Petr 17'Jan

2
我可以删除多个备份而无需使用时间,例如: sudo tmutil delete 2016-06-12-184217 2016-06-19-080529 2016-06-26-092218
yuxuan

-3

只是打开一个终端,

#sudo tmutil disablelocal

这应该释放空间而不删除TM备份


3
这将禁用内部驱动器上的本地Time Machine快照,而不是OP的要求。
苏格兰,

2
是的-这只会释放Mac启动卷上的空间-不会释放目标位置上的空间。有用,但需要对IMO提出其他问题。
bmike

-3

这是我删除旧备份的分步操作

  1. 开放时间机器磁盘
  2. 找到并打开文件夹Backups.backupdb
  3. 转到按日期查看并选择最旧的
  4. 选择要删除的备份
  5. 打开终端并输入 sudo rm -rvf
  6. 将您要删除的旧文件夹拖放到“终端”窗口中
  7. 在提示符下输入您的用户密码

去喝咖啡或看电影,完成此过程后,对于某些不想删除的文件夹,您可能不得不再次重复。

当所有旧文件夹都消失后,Time Machine需要更新其数据库。这是强制Time Machine更新的方法。

  1. 输入Time Machine并转到仍列出的最早的备份
  2. 选择它并单击小齿轮,然后选择“删除备份”
  3. 输入密码并等待几分钟
  4. 退出Time Machine界面,然后再次返回。现在,您应该让Time Machine列出正确的备份。

14
不要这样做。Time Machine使用复杂的链接系统。您可能会中断备份。参见tankini.org/TM/Home.html
Harv

2
阅读http://pondini.org/TM/Works.html之后,我看不到为什么使用删除旧备份sudo rm -rvf会破坏Time Machine的原因。该rm命令是命令行建议的替代命令行,该建议从底部的Finder中删除:http://pondini.org/TM/12.html
Pro Backup
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.