# 加速Time Machine备份速度

\[Time Machine]\([https://en.wikipedia.org/wiki/Time\_Machine\_(OS\_X))是苹果操作系统非常独特而且关键的特性，提供了系统完全的备份以及恢复到任意时间点的功能。](https://en.wikipedia.org/wiki/Time_Machine_\(OS_X\)\)%E6%98%AF%E8%8B%B9%E6%9E%9C%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E9%9D%9E%E5%B8%B8%E7%8B%AC%E7%89%B9%E8%80%8C%E4%B8%94%E5%85%B3%E9%94%AE%E7%9A%84%E7%89%B9%E6%80%A7%EF%BC%8C%E6%8F%90%E4%BE%9B%E4%BA%86%E7%B3%BB%E7%BB%9F%E5%AE%8C%E5%85%A8%E7%9A%84%E5%A4%87%E4%BB%BD%E4%BB%A5%E5%8F%8A%E6%81%A2%E5%A4%8D%E5%88%B0%E4%BB%BB%E6%84%8F%E6%97%B6%E9%97%B4%E7%82%B9%E7%9A%84%E5%8A%9F%E8%83%BD%E3%80%82)

但是，Time Machine备份也是非常缓慢的过程，对于几百G的数据，动辄备份十几小时也非藏常见。

[Time Machine ridiculously slow after El Capitan upgrade](http://apple.stackexchange.com/questions/212537/time-machine-ridiculously-slow-after-el-capitan-upgrade) 提供了一个解决建议。

> 不过，我的实践测试下来并没有改善备份速度，看来还有什么我没有找到的解决问题。

## 实际使用的方法

[Fix Slow Time Machine Backups on a Mac](http://osxdaily.com/2016/03/19/fix-slow-time-machine-backups-mac/)建议可以尝试启动到安全模式进行备份。安全模式的启动方法是在启动的时候按住`shift`键，启动后会看到右上角有一行红色小字显示"sofe boot"。

我的验证确实发现，第一次对整个系统备份采用这个方法是成功的（没有使用sofe boot时候备份了十几个小时都没有完成）。

## 关闭限流

* 有可能是系统的高负载瓶颈设置了低的IO，可以通过在终端中输入以下命令查看

```
sudo fs_usage backupd
```

这个命令中如果看到 `THROTTLED` 项就是表示备份是受到限流的。

> 上述命令会检查`backupd`服务的文件系统使用活动情况，可以实时看到`backupd`备份的文件。不过，我没有看到`THROTTLED`内容。

* 如果有大量文件，特别是笑文件，会有大量的I/O任务，因为需要对`xattrs`执行一系列的I/O操作。使用以下命令，关闭限流：

```
sudo sysctl debug.lowpri_throttle_enabled=0
```

关闭限流可以大幅缩短备份时间

* 备份完成后，使用如下命令恢复限流：

```
sudo sysctl debug.lowpri_throttle_enabled=1
```

## 限流持久化配置

* 如果要在重启后依然使得上述设置生效，可以创建一个名为 `/Library/LaunchDaemons/fix-el-capitan-slow-time-machine-speed.plist` 文件，内容如下

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>fix-el-capitan-slow-time-machine-speed</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/sbin/sysctl</string>
      <string>debug.lowpri_throttle_enabled=0</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>
```

* 确保文件属于root用户

```
sudo chown root /Library/LaunchDaemons/fix-el-capitan-slow-time-machine-speed.plist
```

* 确认命令

```
sudo launchctl load /Library/LaunchDaemons/fix-el-capitan-slow-time-machine-speed.plist
```
