Почему Time Machine бэкапит не всё?

English version here.

tl;dr

Потому что она не rsync, а слишком умная и имеет минимум 3 места хранения списков директорий, исключаемых из бэкапа.

Места хранения исключений

  1. Конфиг демона /System/Library/CoreServices/backupd.bundle/Contents/Resources/Std/Exclusions.plist. По большей части это с временные/служебные системные каталоги и кэш.
  2. Недра системы: sudo mdfind "com_apple_backup_excludeItem = 'com.apple.backupd'". Здесь, в большинстве своём, исключения, добавленные приложениями. ИХ локальный кэш и прочие службно-рантаймовые объекты.
  3. Недра тайм машины: tmutil isexcluded ~/Library/Application\ Support/. Это самая правдивая информация, но  не существует рекурсивной команды для получения полного списка исключений.

Получение полного списка исключений

Как обычно, bash нам поможет. Вот тут в gist-е лежит скрипт, который рекурсивно обходит указанный каталог и выбирает только уникальные директории, которые исключены из бэкапа. Если его вызвать для хомяка ./recursive_tmutil.sh ~/, то секунд за 20-40 он покажет что было, что будет и чем сердце успокоится. 

Если же после внимательного изучения вышеозначенного списка возникло непреодолимое желание добавить директорию обратно в бэкап, то надо вызвать tmutil removeexclusion /full/path/to/directory.

Напутствие

Будьте мудры и настраивайте/проверяйте бэкап до того как он понадобится, а не после.

Источник вдохновения

Директория ~/Library/Application Support/ оказалась среди исключений и автор узнал об этом после восстановления системы из бэкапа. По "счастливой" случайности, именно там хранятся все данные большинства приложений типа Skype, Slack, Nextcloud, Sublime, Firefox, VPN и тд. Поэтому добрая половина системы превратилась в тыкву.


Time Machine backup

comments powered by Disqus