何も開いていないのにMacが「ディスク使用中」と言う理由
すべてのアプリを閉じました。Finderのウィンドウも開いていません。それなのにmacOSは、何かがドライブを使っていると言い張ります。実際に何が起きているのかを解説します。
すべてを閉じました。Safariは消えました。Finderのウィンドウも閉じました。編集していたあのドキュメントも、保存して終了しました。外付けドライブの取り出しをクリックすると、macOSは何かがまだそれを使っていると告げます。
もう一度確認します。目に見えるものは何も動いていません。進捗バーもどこにもありません。ドライブは、見たところ何もせずに、ただそこにあるだけです。しかし、目には見えない何かが、ディスクに爪を立てているのです。
これはmacOSで最もいら立たしい体験の一つです。問題がありえないことのように感じられるからです。やるべきことはすべて正しくやったはずです。作業を閉じました。それなのにシステムは、説明しようとしない理由で阻み続けるのです。
目に見えないプロセスたち
Macで動いているものの大半は、目に見えません。操作しているアプリの裏側では、数十ものバックグラウンドプロセスが、意識したこともないようなタスクを処理しています。検索用にファイルをインデックス化したり、サムネイルを生成したり、データを同期したり、変更を監視したり。
これらのプロセスにはウィンドウがありません。Dockにも現れません。中には、どこを見ればよいかを知っていなければ、アクティビティモニタにすら表示されないものもあります。しかし、それらはすべて外付けドライブにアクセスでき、そのどれもが取り出しを妨げることがあるのです。
macOSがディスクを「1つ以上のプログラムが使用している可能性がある」と言うとき、たいていそれは嘘ではありません。何かが使っているのです。役に立たないのは、macOSがそれが何なのかを教えるのを拒む点です。
いつもの容疑者たち
Spotlightは、最もよくある目に見えない原因です。外付けドライブを接続した瞬間に、Spotlightはそれのインデックス作成を始めます。インデックス作成のプロセス(mds、mds_stores、mdworker)は、働いていることを示す目に見えるしるしもなく、バックグラウンドで動きます。ドライブにどれだけの内容があるかによって、ファイルを何分も、あるいは何時間も開いたままにすることがあります。
クイックルックはもっと巧妙です。フォルダを閲覧すると、macOSはサムネイルとプレビューを生成します。クイックルックのプロセス(QuickLookUIService、quicklookd)は、Finderのウィンドウを閉じたあとでも、ファイルハンドルを掴み続けることがあります。10分前に見たフォルダのことを、クイックルックはまだ考えているのです。
Time Machineは、有効になっていれば、バックアップドライブを絶えず監視します。バックアップが動いていないときでも、backupd プロセスはTime Machineのボリュームへの接続を維持します。変更を見張り、次のバックアップを始める準備をしているのです。
iCloudやその他の同期サービスは、同期フォルダを外付けドライブに保存している場合、それにアクセスすることがあります。同期デーモンが、ファイルの状態を確認していたり、変更のアップロードを待っていたりするかもしれません。
Finder自体も、目には見えないバックグラウンドの操作を行っています。ファイルのメタデータの更新、ゴミ箱の管理、サイドバーの計算などが、すべて目に見えないところで起こっています。Finderのウィンドウを閉じても、Finderとドライブの関係が必ずしも終わるわけではないのです。
犯人を見つける
何がドライブをブロックしているかを確実に知る唯一の方法は、ターミナルです。次のコマンドを実行し、ドライブ名を実際のものに置き換えてください。
lsof /Volumes/YourDriveName
これで、ドライブ上でファイルを開いているすべてのプロセスが一覧表示されます。出力は技術的ですが、読み取れます。COMMAND列にはプロセス名が、NAME列には各プロセスが開いているファイルが表示されます。
よく見かけるものはこちらです。
mdsまたはmdworker: Spotlightのインデックス作成QuickLookUIService: サムネイルの生成Finder: Finderの操作、またはサイドバーの参照backupd: Time Machineの監視birdまたはcloudd: iCloudの同期
一覧が長ければ、目に見えない使用者を見つけたということです。空であれば、問題はすでに自然に解消したのかもしれないので、もう一度取り出しを試してみてください。
手作業の手順は省きましょう: Ejectaがどのプロセスがドライブをブロックしているかを正確に表示します。しかもメニューバーから、ワンクリックでそのプロセスを終了できます。 詳しく見る →
目に見えないプロセスを止める
何がドライブをブロックしているかが分かれば、選択肢があります。
Spotlightなら、ドライブのインデックス作成を無効にします。
sudo mdutil -i off /Volumes/YourDriveName
これで、Spotlightにそのドライブを放っておくよう伝えられます。あとでドライブの内容を検索したくなったら、インデックス作成を再び有効にできます。
クイックルックなら、そのキャッシュをリセットします。
qlmanage -r cache
これで、クイックルックが掴んでいたものが消去され、たいていはドライブが解放されます。
Finderなら、Optionキーを押しながらDockのFinderアイコンを右クリックし、「再度開く」を選択して再起動します。これでFinderのすべての接続がリセットされます。
その他のプロセスは、アクティビティモニタから終了させることができます。プロセス名で検索し、選択して、Xボタンをクリックします。ほとんどのシステムプロセスは自動的に再起動しますが、ドライブは解放されるはずです。
問題を防ぐ
外付けドライブをSpotlightで検索する必要がなければ、システム設定の Siri と Spotlight でプライバシーリストに追加してください。このリストにあるドライブは決してインデックス化されず、最もよくある取り出しの原因がなくなります。
外付けドライブのルートに .metadata_never_index という名前のファイルを作成します。Spotlightはこのファイルの有無を確認し、それを持つドライブのインデックス作成をスキップします。これは、複数のMac間で移動させるドライブに便利です。
外付けドライブに何を保存しているかを意識してください。iCloudのフォルダ、同期フォルダ、Time Machineのバックアップをそこに置いた場合は、バックグラウンドプロセスが絶えずそれらにアクセスすると考えておきましょう。
より良いやり方
ドライブを取り外したいたびに、ターミナルの出力をかき分けるのは、すぐにうんざりします。情報はそこにあるのですが、その作業の流れが不格好なのです。
Ejecta は、同じ情報をよりすっきりした形で表示します。ブロックされているドライブをクリックし、何がブロックしているのかを見て、もうワンクリックでそのプロセスを閉じます。覚えるべきコマンドも、読み解くべき出力もありません。
根本的な問題は、macOSが、ドライブを掴みうる目に見えないプロセスを数十も動かしていることです。それらが存在することを知るのが第一歩です。そして、ターミナルに切り替えることなく、どれが問題なのかを正確に見られることが、はるかに優れた体験なのです。
毎回ターミナルを使いたくないなら、Ejectaがどのプロセスがドライブをブロックしているかを正確に表示します。しかもメニューバーから、ワンクリックでそのプロセスを終了できます。
今すぐ購入 — $9.99