マイコミジャーナル

知りたい!を刺激する総合専門サイト


  1. パソコン

  2. アップル
  3. コラム
  4. OS X ハッキング!

【コラム】

OS X ハッキング!

180 Spotlightトラブル対策室

2006/06/01

海上忍

  • このエントリーを含むはてなブックマーク
  • Yahoo!ブックマークに登録
  • この記事をクリップ!
  • BuzzurlにブックマークBuzzurlにブックマーク
  • wycoブックマークする

最近、旅行に行きたくて仕方ありません。原稿が行き詰まっているので逃避したい(おいおい)というド真ん中な理由はさておき、近頃のホテルはブロードバンド/無線LAN装備が当たり前になりつつあるので、いろいろ試してみたいという動機もあるのですよ。MacBook/MacBook Proはモデムを標準装備していませんから、過去のノウハウも使えませんし……

さて、今回はSpotlightのトラブル対策について。基本的にSpotlightはメンテナンスフリーだが、GUIベースの管理ツールは機能が大幅に簡略化されているため、トラブル時の活躍は期待できない。いざというときのために、Spotlightのトラブル対策術をマスターしよう。

いつの間にやら「mds-crash-state」が

Tigerを使い続けていると、Spotlightの検索結果が最新の状態を反映していないことに気付くことがある。その場合、Finderで起動ボリューム(ルートディレクトリ)を表示し、「mds-crash-state」なるファイルが作成されていないかを確認すべし。

このファイルは、Spotlightのインデックスファイルを更新するプロセス(※)が異常終了したときに作成され、存在するかぎりインデックスファイルが更新されないという困った事態をもたらす。発見次第、mds-crash-stateを削除し(sudo rm /mds-crash-state)、mdutilコマンドを実行してインデックスファイルを再構築しよう。

※:/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mds

それでもダメな場合

mdsが異常終了する原因はいくつか考えられるが、まず挙げられるのはSpotlightインポーター(*.mdimporter)の問題。サードパーティー製アプリケーションのなかには、まれに挙動不審なSpotlightインポーターを含むものがあるので、動作が不安定になった時期とのインストール時期が重なるようであれば、一時的に削除して様子を見るのも手だろう。なお、操作時点で有効なSpotlightインポーターは、以下のコマンドを実行すれば確認できる。

$ mdimport -L

システムに高い負荷がかかる状態が続く場合には、topコマンドなどを利用して「LAServer」というプロセスのCPU消費率を確認すべし。100%近い状態が続くようであれば、LAServerが日本語を解析する過程でなんらかの問題が生じ、mdsともども暴走しているものと考えられる。以下の要領でLAServe関連のリソースファイルを削除、システムを再起動したうえでSpotlightのインデックスファイルを再構築(sudo mdutil -E /)してみよう。

$ cd ~/Library/Preferences/com.apple.JapaneseAnalysis/AppleContextualKKC.index
$ rm AdaptiveMap InputHistory.plist

「lsregister」で確認する

Spotlightインポーターは、アプリケーション起動用フレームワーク「LaunchServices」と連携して動作する。SpotlightインポーターがLaunchServicesに認識されると、ファイルの拡張子やファイルタイプなどを情報として持つLaunchServicesのデータベースに登録、アプリケーションとの関連付けなどFinderとの連携プレーが始まる仕組みだ。逆にいえば、SpotlightインポーターがLaunchServicesに認識されていない場合、対象となるファイルを作成/更新してもLaunchServicesに検出されないため、Spotlgihtのインデックスに反映されないことになる。

動作に疑問を感じた場合には、LaunchServices.framework内部にあるlsregisterコマンドを以下のとおり実行すると、データベースの内容をダンプできる。grepやlessを利用して対象のファイルの拡張子を検索すれば、Spotlightインポーターが正しく認識されているかどうか確認できるはずだ(1)。認識されていなければ、-fオプションに続けてSpotlightインポーターのパスを示せば、強制的に登録できる(2)。

$ cd /System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Support
$ ./lsregister -dump | less ……(1)
$ ./lsregister /Library/Spotlight/neolight.mdimporter ……(2)

二重に登録されているなどデータベースに問題がある場合には、以下のとおりコマンドを実行してデータベースを再構築しよう。特殊な設定は失われてしまうこともあるが、トラブル発生時はシンプルな状態に戻すことが基本だ。

$ ./lsregister -kill -r -domain system -domain local -domain user

特別企画


注目サイト