时光机在做什么?

Ste*_*ton 21 backup time-machine mac-osx

有时,OS X 会在很长一段时间内告诉我“正在准备备份...”。所需的时间似乎与要备份的数据量无关。“完成备份...”阶段也是如此。

问题:OS X 在“准备备份...”和“完成备份...”时在做什么?

我知道它正在弄清楚要备份的内容,然后记录更改,但肯定需要的时间应该与更改的数据量成正比。有足够的空间磁盘空间(所以我认为它不会删除旧备份)。如果这有什么不同,我正在使用 TimeCapsule。没有什么问题,我只是好奇。

Com*_*een 21

这是来自另一个论坛的答案(我不知道原始海报):

Time Machine 中的“准备”阶段通常很快,因为 Time Machine 使用文件系统活动日志来了解在哪里可以找到需要备份的更改。

但是您可以采取一些措施使该日志不可信。当 Time Machine 发现日志可能无效时,它会全面扫描您的文件系统以确定真正需要备份的内容。这可能需要一段时间。在我的 Powerbook(以及带有火线外部 Time Machine 驱动器)上,它可以导致持续 20 分钟的“准备”阶段。如果您让 Time Machine 继续,它最终会找出真正需要添加到备份磁盘的内容并继续。当然,这比仅仅赌日志是正确的或只是再次备份所有内容要好,即使实际上可能只有几个文件发生了更改(这将花费更长的时间并消耗更多的 Time Machine 磁盘空间)。

在 Leopard 安装的早期阶段,您可以做的最常见的事情之一就是从 Leopard 安装 DVD 启动,这会使日志变得不可信。每次执行此操作时,下次 Time Machine 运行时,它都会发现您的硬盘驱动器可能已被修改,而这些更改并未反映在日志中。所以它会进行全面扫描——一个漫长的“准备”阶段——以确保它做对了。


Che*_*ion 11

为了赞美指挥官 Keen 的回答,我建议您阅读Earthling Soft对Time Machine的深入研究。此外,backupd 将更多信息记录到 system.log(这将说明为什么准备状态如此之长等等)


Arj*_*jan 10

要轻松查看backupd日志,请查看Time Machine Buddy小部件。另请注意,备份磁盘本身还有另一个日志,位于.Backup.log每个备份文件夹中的隐藏文件中。这提供了backupd日志以外的一些其他信息。

请注意,日志通常显示的数字似乎不匹配:

无需预备份细化:请求 821.4 MB(包括填充)[..]
从 Macintosh HD 卷复制 1630 个文件 (3.8 MB)。

在上面,实际复制的文件比最初预测的要少。由于 Time Machine 依赖于仅报告已更改目录的FSEvents,我假设在上面的示例中,这些目录总共包含 821.4 MB 的文件。在实际复制文件时,Time Machine 然后将硬盘上更改的目录与备份进行比较,发现实际更改的文件只有 3.8 MB。

要查看已写入备份的内容,请参阅TimeTracker (GUI) 或timedog(命令行)。请注意,即使以管理员用户身份运行,有时这些程序也需要以 root 身份运行才能查看所有文件。不这样做时,这些工具可能例如不考虑 MySQL 日志和数据的备份,这些备份由_mysql在 group wheel 中拥有:

cd "/Volumes/Backup of XX/Backups.backupdb/XX/Latest"
sudo ls -l "Macintosh HD/usr/local/mysql-5.0.51a-osx10.5-x86"
[..]
drwxr-x---@ 6 _mysql wheel 374 Jul 2 20:05 data

在这些情况下,这两个工具将(静默)报告比backupd控制台中的日志更小的总备份大小和更少的文件。因此,如果数字与日志不匹配,那么对于 TimeTracker:

须藤 ~/Downloads/TimeTracker.app/Contents/MacOS/TimeTracker

同样,对于timedog:

cd "/Volumes/Backup of XX/Backups.backupdb/XX" 
须藤〜/下载/时间狗

轻松找到您的硬盘上的大文件看到磁盘库存X。该程序与 Time Machine 无关,但可能有助于调查问题,例如当您想知道为什么备份比硬盘上使用的空间小很多时。请注意,该程序在其窗口标题中报告的总磁盘空间可能总是少于在其可以选择要调查的磁盘的屏幕中报告的总磁盘空间(即使以 root 身份运行并选择菜单“查看”、“显示物理文件大小”)。但是,如果报告的总大小确实比 Mac 上使用的实际总数小很多,那么以 root 身份运行可能会有所帮助:

sudo "$HOME/Downloads/Disk Inventory X.app/Contents/MacOS/Disk Inventory X"

要从备份中删除文件(例如,如果您碰巧发现 Time Machine 实际上正在备份一些大文件,例如失控的 MySQL 日志文件),Apple 写道

想要删除以前备份的文件或文件夹的所有实例吗?很容易。启动 Time Machine,选择要删除的项目,然后从 Finder 工具栏的操作菜单中选择“从所有备份中删除”。

现在,如果您要删除的文件仅对 root 可见,那么您也应该以 root 身份调用“Enter Time Machine”。这需要首先以 root 身份启动 Finder:

须藤/系统/图书馆/CoreServices/Finder.app/Contents/MacOS/Finder

这看起来像一个普通的 Finder,但您会注意到Finder 侧边栏中主文件夹图标旁边的root。例如,现在使用 Shift-Cmd-G(菜单 Go、Go to Folder)进入/usr/local并找到要从备份磁盘中删除文件的文件夹。接下来,输入 Time Machine(并再次验证主文件夹图标旁边是否显示目录)并按照 Apple 的说明进行操作。从备份中删除文件后,在终端中按 Ctrl-C 以停止 root-Finder。(我还需要注销我的 Mac,因为远程磁盘无法正确卸载。)

如果您使用的是稀疏包(例如在网络上使用备份时),则不会自动回收任何释放的空间(或:直到需要空间时才会回收)。要强制执行此操作,请参阅How to reclaim all/most free space from a sparsebundle on OS X。这不仅适用于您手动删除的文件,也适用于 Time Machine 在备份后精简期间为过期的每小时或每日备份删除的文件。

当磁盘空间用完时,Time Machine 实际上会压缩稀疏包本身。但似乎它可能会在预备份精简期间首先删除一些旧备份,因此如果您曾经删除过一些大文件,或者过期的备份可能包含大文件,那么手动压缩可能是明智的:

开始预备份细化:请求 53.57 GB(包括填充), 
    9.90 GB 可用 
不存在过期的备份 - 删除最旧的备份以腾出空间 
删除了 XX/Backups.backupdb/XX/2007-12-20-172543 的备份 /Volumes/Backup:
    9.90 GB 现已可用 
删除了备份 /Volumes/Backup of XX/Backups.backupdb/XX/2007-12-31-005523:
    9.90 GB 现已可用 
删除了 2 个备份:最旧的备份现在是 2008 年 1 月 8 日 
停止备份。 
备份已取消。 
弹出的 Time Machine 磁盘映像。 
压缩备份磁盘映像以恢复可用空间 
完成备份磁盘映像压缩 
开始标准备份
[..]
开始预备份细化:请求 53.57 GB(包括填充), 
    12.75 GB 可用

非常感谢 Adam Cohen-Rose 测试上述内容;看他的博客了解更多详情!


小智 8

当卡在“准备中”时 (ThinningPreBackup)

root# tmutil status
Backup session status:
{
    BackupPhase = ThinningPreBackup;
    ClientID = "com.apple.backupd";
    DateOfStateChange = "2018-10-20 12:02:54 +0000";
    DestinationID = "XXXXXX0A-1XB7-4X3B-A791-6XXXXX4325D89B";
    DestinationMountPoint = "/Volumes/TimeMachineXXX";
    Percent = "-1";
    Running = 1;
    Stopping = 0;
}
Run Code Online (Sandbox Code Playgroud)

使用 lsof(确保以 root 身份运行)查看备份访问的文件 - 最后一个文件应该更改:

root# ps -ef | grep backupd
    0    91     1   0  9:39pm ??         0:00.15 /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -launchd
    0   552     1   0  9:59pm ??         0:49.54 /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd
    0  1244  1156   0 10:30pm ttys003    0:00.01 grep backupd
root# lsof -p 552
COMMAND PID USER   FD   TYPE DEVICE   SIZE/OFF     NODE NAME
backupd 552 root  cwd    DIR    1,4       1292        2 /
backupd 552 root  txt    REG    1,4     769168 67640888 /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd
backupd 552 root  txt    REG    1,4   26771408 67698052 /usr/share/icu/icudt59l.dat
backupd 552 root  txt    REG    1,4     236208 67730774 /private/var/db/timezone/tz/2018e.1.0/icutz/icutz44l.dat
backupd 552 root  txt    REG    1,4     841456 67695858 /usr/lib/dyld
backupd 552 root  txt    REG    1,4 1174183936 69140457 /private/var/db/dyld/dyld_shared_cache_x86_64
backupd 552 root    0r   CHR    3,2        0t0      306 /dev/null
backupd 552 root    1u   CHR    3,2        0t0      306 /dev/null
backupd 552 root    2u   CHR    3,2        0t0      306 /dev/null
backupd 552 root    3w   REG    1,9        686  5515544 /Volumes/TimeMachine2/Backups.backupdb/XXXXXXXXXX/2018-10-20-220254.inProgress/.Backup.561729775.162983.log
backupd 552 root    4r   DIR    1,4        136 68977542 /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/tvOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/CoreLocation.framework/English.lproj
Run Code Online (Sandbox Code Playgroud)

这表明它正在做某事 - 并且要有耐心......