Я следил за /var/log/system.log
и заметил внезапную стену текста. Посмотрев ближе, я увидел, что CalendarAgent получил ошибку при попытке сохранить что-то:
Nov 18 11:42:45 rainbow-dash.local CalendarAgent[12321]: CoreData: error: (11) Fatal error. The database at /Users/blackl/Library/Calendars/Calendar Cache is corrupted. SQLite error code:11, 'database disk image is malformed'
Nov 18 11:42:45 rainbow-dash.local CalendarAgent[12321]: Core Data: annotation: -executeRequest: encountered exception = Fatal error. The database at /Users/blackl/Library/Calendars/Calendar Cache is corrupted. SQLite error code:11, 'database disk image is malformed' with userInfo = {
NSFilePath = "/Users/blackl/Library/Calendars/Calendar Cache";
NSSQLiteErrorDomain = 11;
}
2 сообщения повторяются несколько раз
Nov 18 11:42:49 rainbow-dash.local CalendarAgent[12321]: [com.apple.calendar.store.log.subscription] [WARNING: CalSubscriptionSession :: persistError :: save failed]
Вся эта последовательность повторяется много раз по всему журналу.
file
сказал, что рассматриваемый файл является SQLite 3.x database
, поэтому я немного поискал и нашел способ проверить их.
blackl% cp -i ~/Library/Calendars/Calendar\ Cache /tmp
blackl% sqlite3 /tmp/Calendar\ Cache
SQLite version 3.7.12 2012-04-03 19:43:07
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> pragma integrity_check ;
*** in database main ***
Main freelist: Bad ptr map entry key=863 expected=(2,0) got=(5,21)
On page 21 at right child: 2nd reference to page 863
Далее следуют несколько десятков строк:
rowid <number> missing from index <name>
а потом:
wrong # of entries in index <name>
Я немного растерялся из-за того, что делать сейчас - я не смог найти ничего о том, как исправить найденные ошибки. Также, возможно, было бы неплохо отключить Calendar Agent, чтобы он не пытался использовать базу данных во время ее исправления (вот почему я скопировал ее в /tmp
прежде чем запускать на ней sqlite3
).
Как отключить CalendarAgent и исправить его кеш?