mdworker が出力するエラーログを解消する。
Spotlight
OS X のシステムログをコンソールアプリで眺めていたら、mdworker というプロセスが頻繁にエラーを出していることに気がついたので、エラーを解消してみました。
ふと、OS X のシステムログをコンソールアプリで眺めてみたところ、次のようなメッセージが数秒おきにで続けているのに気がつきました。
Sep 23 05:41:47 mymac1.local mdworker[2332]: CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/tomohiro/Library/Application%20Support/com.evernote.Evernote/accounts/www.evernote.com/49598538/LocalNoteStore.sqlite options:{ NSExternalRecordExtensionOption = enspot; NSExternalRecordsDirectoryOption = "/Volumes/UserData/Home/tomohiro/Library/CoreData/com.evernote.Evernote"; NSReadOnlyPersistentStoreOption = 1; NSSQLitePragmasOption = { fullfsync = 0; "journal_mode" = WAL; synchronous = OFF; }; } ... returned error Error Domain=NSCocoaErrorDomain Code=260 "The file couldnât be opened because it doesnât exist." with userInfo dictionary { }
ログを見る限り明らかにエラーメッセージですし、こう頻繁にエラーが記録されるのはシステムに負荷がかかるでしょうから、エラーを発生させないようにしてみることにしました。
エラーの原因を調べてみる
エラーを解消するためにはエラーの原因を知る必要があるので、まずはログから心当たりを探ってみます。
mdworker
まず、出力元のプロセス mdworker
が何に関係するかを調べてみると、どうやらこれは OS X の Spotlight という検索機能が検索用のインデックスを作成するときに使われるもののようでした。
エラーの内容
エラーの内容を眺めてみると、今回のログについては一見すると Evernote
や SQLite
や CoreData
といった項目が目立つのですけど、それよりも今回は /Volumes/UserData/Home/$USER
と /Users/$USER
というパス情報が記録されているのが気になりました。
というのも、この Mac では以前にホームディレクトリを変更するという作業を行ったことがあって、そのときに /Users/$USER
から /Volumes/UserData/Home/$USER
へとパスが変更になっていたのでした。
先ほどの mdworker の役割も踏まえて、その影響で Spotlight 機能のインデックス周りで不整合が発生しているのかもしれません。
Spotlight インデックスを再構築する
そこで今回は Spotlight のインデックスが壊れていると想定して、その再構築をしてみます。
Spotlight のインデックス再構築は、アップルメニューの システム環境設定
にある Spotlight
から行えます。
ここのプライバシータブを開くと、Spotlight の検索インデックスから『除外』する場所を選択できる画面になります。ここで、再構築したいの検索インデックスを除外して、改めて除外対象から外すことで、インデックスの再構築が行えます。
今回であれば、該当するパスを格納しているドライブ /Volumes/UserData
を追加します。このとき、次のように検索しないようにしてもいいか尋ねられるので
を押します。
これで、指定したドライブが Spotlight の検索対象から外れるようです。そのあとすぐに、追加したドライブを選択して、左下の
を押すことで、そのドライブのインデックスを再構築できる様子でした。今回は念のため、もうひとつの /Users
があるドライブ、つまり OS X をインストールしたディスクも同様にして、インデックスの再構築を行いました。
出続けていたメッセージが解消される
そうしたところ、冒頭に記したような数秒おきのエラーメッセージは表示されなくなりました。