Mac でドライブを使用しているプロセスを見つける方法

Mac がドライブを取り出せませんか?アクティビティモニタ、ターミナル、そしてより速いワンクリックの方法を使って、何がドライブをブロックしているのかを正確に見つける手順を解説します。

macOS が外付けドライブの取り出しを拒むとき、何かが使用中だとは教えてくれますが——そこで止まってしまいます。名前も、手がかりも、ヒントもありません。原因を自分で見つけるにはいくつかの手順が必要ですが、十分にやり遂げられます。このガイドでは、Apple が提供する標準ツールから、GUI が隠している情報を表に出すターミナルのコマンドまで、あらゆる方法を順を追って説明します。

なぜ macOS は教えてくれないのか

これはユーザーのミスではなく、れっきとした不便さです。macOS は昔から、原因となるプロセスの名前を示さずに「ディスク使用中」エラーを表示してきました。OS は、どのプロセスがボリューム上のファイルハンドルを開いたままにしているかを把握しているのに——その情報を Finder や取り出しダイアログに表示しないだけなのです。

その結果:見えているアプリをすべて閉じても何も変わらず、ドライブは依然として取り出せません。macOS「ディスク使用中」エラーのトラブルシューティングガイドで取り上げているように、ブロックしているのは、手動で終了しようと思うようなものではなく、たいていバックグラウンドのプロセス——Spotlight のインデックス作成、クイックルックによるサムネイル生成、クラウド同期のデーモン——です。

方法 1:アクティビティモニタ(限界はあるが、出発点として)

アクティビティモニタは、ほとんどの人が最初に見る場所です。この特定の作業に理想的ではありませんが、範囲を絞り込むのには役立ちます。

  1. アクティビティモニタを開きます(アプリケーション → ユーティリティ → アクティビティモニタ、または Spotlight 検索)。
  2. 上部のディスクタブをクリックします。
  3. 読み込みバイト数または書き込みバイト数で並べ替えて、どのプロセスが活発に読み書きしているかを確認します。

問題点:アクティビティモニタは、外付けドライブだけでなくすべてのボリュームにまたがるディスクのアクティビティを表示します。リストの上位にあるプロセスは、USB ドライブではなく内蔵 SSD に書き込んでいるのかもしれません。ここではボリュームで絞り込むことができないのです。

それでも、予想外のもの——バックアップのデーモン、メディアアプリ、同期サービス——が目に留まったら、それを終了させて、もう一度取り出しを試す価値はあります。

方法 2:ターミナルで lsof を使う(確実なアプローチ)

lsof は「list open files(開いているファイルの一覧)」の略で、macOS ではマウントされたすべてのボリュームがファイルパスとして扱われます。このコマンドは、特定のドライブ上にハンドルを開いているすべてのプロセスを表示してくれます。

ドライブのマウントポイントを見つける

まず、macOS が認識しているドライブの正確な名前を確認します。

ls /Volumes/

これでマウントされているすべてのボリュームが一覧表示されます。外付けドライブはここに現れるので、大文字・小文字やスペースを含めて、正確な名前を控えておきます。

ボリュームに対して lsof を実行する

lsof /Volumes/YourDriveName

YourDriveName を実際のボリューム名に置き換えてください。出力には、そのボリューム上にファイルを開いているすべてのプロセスが、次の情報とともに一覧表示されます。

  • COMMAND — プロセス名
  • PID — プロセス ID
  • USER — それを実行しているユーザーアカウント
  • NAME — アクセスされている具体的なファイルパス

典型的に表示されるもの

lsof の出力によく現れる原因:

  • mds または mds_stores — Spotlight のインデックス作成
  • QuickLookUIService — クイックルックのサムネイル生成
  • clouddbird、または com.apple.iCloudDrive — iCloud の同期
  • backupd — Time Machine
  • Finder — ドライブを指している開いたままの Finder ウィンドウ
  • プロジェクトファイルを開いている Final Cut Pro や Premiere などのメディアアプリ

ヒント: lsof が何も出力しない場合は、sudo を付けて、より高い権限で実行してみてください:sudo lsof /Volumes/YourDriveName。一部のシステムプロセスは、root 権限でのみ表示されます。

lsof でできること——PID での絞り込みや、コマンドラインから直接プロセスを終了させる方法を含む——をさらに深く知りたい方は、Mac ユーザーのための lsof コマンド解説をご覧ください。

ターミナルからプロセスを終了する

PID が分かったら、そのプロセスを終了できます。

kill -15 <PID>

反応がない場合は、強制終了にエスカレートします。

kill -9 <PID>

その後、もう一度ドライブの取り出しを試してください。

方法 3:代替手段としての fuser

fuser は、どのプロセスがファイルやファイルシステムを使用しているかを報告する、もう一つのターミナルコマンドです。lsof ほど詳細ではありませんが、より読み取りやすいのが特長です。

sudo fuser /Volumes/YourDriveName

出力は PID の一覧だけです。プロセス名も併せて取得するには、ps と組み合わせます。

sudo fuser /Volumes/YourDriveName | xargs ps -p

これは、長い lsof の表を読み解かずに、すばやく答えがほしいときに便利です。

よくあるブロック元のプロセスと、その対処法

Spotlight(mdsmds_stores)

Spotlight は新しいドライブを自動的にインデックス化します。大容量のドライブを接続すると、インデックス作成は数分から数時間に及ぶことがあります。システム設定 → Siri と Spotlight → Spotlight のプライバシーを開いてドライブを除外リストに追加すれば、一時的に止められます。あるいは、ターミナルから mds を終了させることもできます——Spotlight は後で自動的に再起動します。

クイックルック(QuickLookUIService)

クイックルックは、Finder でドライブを閲覧するときにプレビュー用のサムネイルを生成します。Finder ウィンドウを閉じた後でも、ファイルハンドルを開いたままにすることがあります。クイックルックがドライブを人質に取っているで詳しく取り上げていますが、手短な対処法は、ターミナルか専用ツールでクイックルックのプロセスを終了させることです。

iCloud と Dropbox

同期サービスは、外付けドライブに同期データを保存していれば、それを他のフォルダと同じように扱います。アップロードや競合の解決の間、ファイルを開いたままにします。iCloud と Dropbox がドライブの取り出しをブロックするのを止める方法で、取り出す前に同期を一時停止する方法を説明しています。

Finder

Finder 自体も、ドライブの中身を表示するウィンドウを開いている場合や、ファイルのコピーが進行中の場合に、取り出しをブロックすることがあります。ドライブを指しているすべての Finder ウィンドウを閉じるか、Apple メニューから Finder を終了して再起動してください。

メディア系・クリエイティブ系アプリ

Final Cut Pro、Premiere、Logic などのアプリは、プロジェクトが読み込まれている間、プロジェクトファイルを開いたままにします。取り出す前に、アプリのウィンドウだけでなく、プロジェクトそのものを閉じてください。ワークフローに即したアドバイスは、取り出しの問題なく Final Cut Pro で外付けドライブを使う方法をご覧ください。

なぜ日常使いにターミナルは不便なのか

lsof のアプローチは機能しますが、手間がかかります。次のことをしなければなりません。

  1. ターミナルを開く
  2. 正確なボリューム名を知っている
  3. 見慣れない出力を読み解く
  4. PID とプロセス名を調べる
  5. 別途 kill コマンドを実行する
  6. Finder に戻って取り出す

ターミナルの中で暮らしている開発者やシステム管理者なら、それで構いません。けれども、ただドライブを安全に引き抜きたいだけのビデオ編集者や普段使いの Mac ユーザーにとっては、2秒で終わるべき作業にしては、ずいぶんな儀式です。

警告: たとえ待ちきれなくても、取り出さずにドライブを引き抜くのは避けてください——ファイルシステムが破損する恐れがあり、特に exFAT や NTFS でフォーマットされたドライブではその危険が高まります。リスクは現実のもので、外付けドライブを取り出さずに引き抜くと壊れる?で詳しく取り上げています。

より速い方法:ブロック元のプロセスをひと目で確認する

Ejectalsof とまったく同じことを行いますが、その結果を、必要になったまさにその瞬間にメニューバーに表示します。アイコンをクリックして、どのプロセスがドライブを掴んでいるかを確認し、クリックして終了させ、取り出す——ターミナルも、読み解きも、ウィンドウの行き来も不要です。

人々が最もつまずくケースにも対応します。バックグラウンドで動く Spotlight、サムネイルのキャッシュを掴んだままのクイックルック、なかなか解放しない同期のデーモン。プロセス名がそこに、読みやすく表示され、ワンクリックの操作で解決できます。

クイックリファレンス:どの方法を使うか

状況 最適な方法
何が起きているのか理解したい ターミナルでの lsof
一度きりの答えをすばやく得たい ターミナルでの fuser
これを日常的に行い、手間をかけたくない Ejecta メニューバーアプリ
しつこいシステムプロセスのトラブルシューティング sudo lsof + kill

「ディスク使用中」の壁に日常的にぶつかっているなら、Ejecta をダウンロードして、ブロック元のプロセス名をワンクリックの距離に置いてください——ターミナルは不要です。