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 という検索機能が検索用のインデックスを作成するときに使われるもののようでした。

エラーの内容

エラーの内容を眺めてみると、今回のログについては一見すると EvernoteSQLiteCoreData といった項目が目立つのですけど、それよりも今回は /Volumes/UserData/Home/$USER/Users/$USER というパス情報が記録されているのが気になりました。

というのも、この Mac では以前にホームディレクトリを変更するという作業を行ったことがあって、そのときに /Users/$USER から /Volumes/UserData/Home/$USER へとパスが変更になっていたのでした。

先ほどの mdworker の役割も踏まえて、その影響で Spotlight 機能のインデックス周りで不整合が発生しているのかもしれません。

Spotlight インデックスを再構築する

そこで今回は Spotlight のインデックスが壊れていると想定して、その再構築をしてみます。

Spotlight のインデックス再構築は、アップルメニューの システム環境設定 にある Spotlight から行えます。

ここのプライバシータブを開くと、Spotlight の検索インデックスから『除外』する場所を選択できる画面になります。ここで、再構築したいの検索インデックスを除外して、改めて除外対象から外すことで、インデックスの再構築が行えます。


今回であれば、該当するパスを格納しているドライブ /Volumes/UserData を追加します。このとき、次のように検索しないようにしてもいいか尋ねられるので OKボタン を押します。

これで、指定したドライブが Spotlight の検索対象から外れるようです。そのあとすぐに、追加したドライブを選択して、左下の ボタン を押すことで、そのドライブのインデックスを再構築できる様子でした。

今回は念のため、もうひとつの /Users があるドライブ、つまり OS X をインストールしたディスクも同様にして、インデックスの再構築を行いました。

出続けていたメッセージが解消される

そうしたところ、冒頭に記したような数秒おきのエラーメッセージは表示されなくなりました。