なぜSpotlightはディスクの取り出しをブロックするのか

Spotlightのインデックス作成は、外付けドライブを取り出せなくなる最もよくある原因の一つです。その対処法を解説します。

外付けドライブを取り出そうとすると、macOSが拒みます。アクティビティモニタを確認すると、mdsmds_stores という名前のプロセスがドライブにアクセスしているのが見えます。おめでとうございます、Spotlightのインデックス作成に出会いました。

これはおそらく、Macで外付けドライブが取り出せなくなる最もよくある原因です。Spotlightは、あとで検索できるようにあらゆるものをインデックス化したがり、2分後に会議へ出かけなければならない事情など気にも留めません。

Spotlightが実際にしていること

Spotlightのインデックス作成のしくみは、いくつかのバックグラウンドプロセスを通じて動きます。主役は mds(メタデータサーバー)で、これが処理全体を取りまとめます。次に mds_stores があり、これがインデックス化されたメタデータの実際の保存を担います。mdworkermdworker_shared が、ファイルを読み込んで分類するという力仕事をしているのも見えるかもしれません。

外付けドライブを接続すると、Spotlightはそれを新しく探検すべき領土のように扱います。すべてのファイルをスキャンし、メタデータを抽出し、検索可能なインデックスを構築し始めます。これは、そのドライブを放っておくようSpotlightに明示的に伝えていない限り、自動的に行われます。

問題は、Spotlightが作業中ファイルハンドルを開いたままにすることです。それらのハンドルが存在する限り、macOSはドライブを「使用中」とみなし、取り出させてくれません。

Spotlightが原因かどうかを確認する方法

アクティビティモニタを開き(皮肉なことに、Spotlightで検索して開きます)、次のプロセス名を探します。mdsmds_storesmdworkermdworker_shared です。そのいずれかがプロセス情報の中に外付けドライブの名前を表示していれば、Spotlightが原因です。

ターミナルから確認することもできます。次のコマンドを実行し、ドライブ名を実際のものに置き換えてください。

lsof /Volumes/YourDriveName

出力にmds関連のプロセスが見えれば、Spotlightがドライブを掴んでいます。

手早い対処: インデックス作成を一時的に無効にする

最も速い解決策は、その特定のボリュームのSpotlightインデックス作成をオフにすることです。

sudo mdutil -i off /Volumes/YourDriveName

パスワードの入力が必要になります。コマンドが完了すると、Spotlightがドライブを解放し、通常どおり取り出せるはずです。

あとでドライブを再接続して、インデックス作成を元に戻したいときはこうします。

sudo mdutil -i on /Volumes/YourDriveName

恒久的な対処: ドライブを完全に除外する

特定の外付けドライブをSpotlightに一切インデックス化させたくない場合は、プライバシーリストに追加できます。

システム設定を開き、Siri と Spotlight(古いmacOSでは単に Spotlight)に進み、一番下にある「Spotlightのプライバシー」をクリックします。外付けドライブをこのリストにドラッグするか、プラスボタンをクリックして追加します。

このリストにあるドライブは、Spotlightから完全に無視されます。Spotlightメニューからその内容を検索することはできなくなりますが、毎回一瞬で取り出せるようになります。

隠しファイルを使った裏技もあります。外付けドライブのルートに .metadata_never_index という名前の空のファイルを作成します。

touch /Volumes/YourDriveName/.metadata_never_index

Spotlightはこのファイルの有無を確認し、これを持つボリュームのインデックス作成をスキップします。これは、複数のMac間で共有するドライブに便利です。設定が各コンピューターに保存されるのではなく、ドライブについてまわるからです。

Spotlightが手放してくれないとき

ときにはSpotlightが固まってしまうことがあります。インデックス作成を無効にしたのに、プロセスがまだドライブを解放してくれない。アクティビティモニタで、問題のmdsプロセスを選択し、Xボタンをクリックして強制終了できます。

ただし、システムプロセスを強制終了すると、一時的におかしな挙動が起こることがあるので注意してください。Spotlightは自動的に再起動しますが、短い速度低下が見られたり、すべてが落ち着くまで少し待つ必要があったりするかもしれません。

Spotlightのプロセスを終了させてもドライブがまだ取り出せない場合は、他の何かもそれを掴んでいます。もう一度 lsof コマンドを実行して、何が残っているかを確認してください。

なぜこれが繰り返し起こるのか

外付けドライブを接続するたびに、除外していない限り、Spotlightはそれを一から新たにインデックス化し始めます。以前使ったことのあるドライブでも、そのインデックスが古くなったり壊れたりすると、再びインデックス化されます。

macOSのアップデートが、Spotlightのプライバシー設定をリセットすることもあります。新しいmacOSのバージョンにアップグレードしたあと、以前除外していたドライブが突然また再びインデックス化されていた、という報告をするユーザーもいます。大きなアップデートのあとには、Spotlightのプライバシーリストを確認しておくとよいでしょう。

もっとシンプルなやり方

ドライブを取り外したいたびに、アクティビティモニタやターミナルをかき分けるのは、すぐにうんざりします。Ejecta は、何が取り出しをブロックしているのかを正確に表示し、ワンクリックでそれらを終了させることができます。Spotlightについては、関連するmdsプロセスを特定し、それらをきれいに処理するので、どれを終了させればよいか推測したり、システムの安定性を心配したりする必要はありません。

根本的な問題(Spotlightが外付けドライブを積極的にインデックス化すること)が、近いうちになくなることはありません。しかし、ドライブを持って出かける必要があるたびに、それへの対処が調べものの作業になる必要はないのです。

毎回ターミナルを使いたくないなら、Ejectaがどのプロセスがドライブをブロックしているかを正確に表示します。しかもメニューバーから、ワンクリックでそのプロセスを終了できます。

今すぐ購入 — $9.99