Я разбирался с базой данных Yojimbo, и в процессе обнаружил, что в бекап Time Machine помещаются не все файлы. Такая мистика мне не по нраву – если что-то в системе происходит, то это должно иметь какие-то явные и объяснимые причины.

Вот содержимое каталога Yojimbo (при запущенной программе, о чём говорят lock-файлы):

$ cd "Library/Application Support/Yojimbo"
$ ls -al
-rw-------@   1 ctrld  staff       759 Mar 13 16:33 .ContentIndex.lock
-rw-r--r--@   1 ctrld  staff       369 Mar 13 15:38 .ContentIndex.version
-rw-------@   1 ctrld  staff       759 Mar 13 16:33 .Yojimbo.lock
-rw-r--r--@   1 ctrld  staff    532480 Mar 13 15:38 ContentIndex.skindex
-rw-r--r--@   1 ctrld  staff  28815360 Mar 13 16:33 Database.sqlite
-rw-r--r--    1 ctrld  staff      2731 Mar 13 15:38 State.plist

Но в Time Machine помещены лишь эти файлы:

$ hdiutil mount /Volumes/Meow/ole-mac.sparsebundle
$ ls -al "/Volumes/Time Machine Backups/Backups.backupdb/ole-mac/Latest/Macintosh HD/Users/ctrld/Library/Application Support/Yojimbo/"
-rw-r--r--@  1 ctrld  staff  28815360 Mar 13 15:42 Database.sqlite
-rw-r--r--@  1 ctrld  staff      2731 Mar 13 15:38 State.plist
$ hdiutil eject /Volumes/Time\ Machine\ Backups/

Вы обратили на знак “@” после прав доступа? Он обозначает, что файлу или каталогу назначены “расширенные аттрибуты”. Просмотреть их можно командой “xattr -l filename”. Пройдёмся по файлам:

$ xattr -l .ContentIndex.lock
com.apple.metadata:com_apple_backup_excludeItem:
00000000  62 70 6C 69 73 74 30 30 5F 10 11 63 6F 6D 2E 61  |bplist00_..com.a|
00000010  70 70 6C 65 2E 62 61 63 6B 75 70 64 08 00 00 00  |pple.backupd....|
00000020  00 00 00 01 01 00 00 00 00 00 00 00 01 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00 00 00 00 00 1C           |.............|
0000003d

Тот же самый аттрибут com_apple_backup_excludeItem = ‘com.apple.backupd’ выставлен для .ContentIndex.version, .Yojimbo.lock и ContentIndex.skindex.

Теперь понятно, почему файлы исключены из бекапа Time Machine.

Работа с хранилищем метаданных

Метаданные из файлов сервисом mds (Metadata Server) переносятся в центральное хранилище. На Mac OS X Hints нашёл полезную команду, которая запрашивает файлы, для которых выставлен аттрибут исключения из Time Machine:

$ sudo mdfind "com_apple_backup_excludeItem == 'com.apple.backupd'"
/Users/ctrld/Library/Application Support/Yojimbo/.ContentIndex.version
/Users/ctrld/Library/Application Support/Yojimbo/ContentIndex.skindex
/Users/ctrld/Library/Application Support/Yojimbo/.ContentIndex.lock
/Users/ctrld/Library/Application Support/Yojimbo/.Yojimbo.lock
...

К данным также можно обратиться командой mdls:

$ mdls "/Users/ctrld/Library/Application Support/Yojimbo/.ContentIndex.version"
com_apple_backup_excludeItem = "com.apple.backupd"
kMDItemContentType           = ""
kMDItemFSContentChangeDate   = 2010-03-13 18:34:34 +0200
kMDItemFSCreationDate        = 2010-03-13 18:34:34 +0200
kMDItemFSCreatorCode         = ""
kMDItemFSFinderFlags         = 0
kMDItemFSHasCustomIcon       = 0
kMDItemFSInvisible           = 1
kMDItemFSIsExtensionHidden   = 0
kMDItemFSIsStationery        = 0
kMDItemFSLabel               = 0
kMDItemFSName                = ".ContentIndex.version"
kMDItemFSNodeCount           = 0
kMDItemFSOwnerGroupID        = 20
kMDItemFSOwnerUserID         = 501
kMDItemFSSize                = 369
kMDItemFSTypeCode            = ""

В случае необходимости можно удалить все данные из центрального хранилища, и оно будет автоматически перестроено (этот процесс длительный):

$ sudo mdutil -E /

Учтите также, что после удаления базы Time Machine будет делать полный бекап всей системы.