すべての記事

Macで「使用中」のディスクを取り出す方法

· 8分で読めます

外部ディスクを取り出そうとして、macOSが「1つ以上のプログラムが使用中の可能性があるため、ディスクは取り出されませんでした」と答えるとき、そのディスク上ではまだ何かがファイルを開いています。書き込みの途中でデータが失われないよう、macOSはアンマウントを拒否するのです。対処は常に同じです。ディスクをつかんでいるものを見つけて閉じ、もう一度取り出す。強制的な取り出しは最後の手段です。

macOSに付属するツールで原因を突き止める方法と、Folia Filesがその名前を教えてくれる仕組みを紹介します。

macOSがディスクを「使用中」と言う理由

どれかのプロセスがディスク上のファイル、フォルダ、作業ディレクトリを開いている間は、ディスクをアンマウントできません。よくある原因は次のとおりです。

  • ディスク上の書類を開いているアプリ:プレーヤーの動画、エディタのプロジェクト、写真ライブラリなど。
  • Spotlight:見つけたばかりのディスクをインデックス作成中(mds_stores や mdworker というプロセス)。接続した直後のディスクは数分間ふさがっていることがよくあります。
  • Time Machine:そのディスクへのバックアップや検証の最中。
  • クイックルック:直前に見ていたファイルのサムネールを作成中。
  • ターミナルのウインドウ:現在のフォルダがそのディスク上にある場合。何も開いていないように見えても、シェル自体がディスクをつかんでいます。
  • 実行中のコピー:別のアプリで動いていることもあります。

Finderは警告の中でアプリ名を示すこともありますが、多くの場合は一般的なメッセージだけで、原因の手がかりはありません。

まず心当たりを閉じて、もう一度試す

  1. ディスク上の書類をすべて保存して閉じます。どのアプリが使っているかわからなければ、そのディスクのファイルを開いたアプリを終了します。
  2. そのディスクを表示しているFinderウインドウを閉じます。ターミナルでは、そのディスクで作業していたウインドウで cd ~ と入力します。
  3. ディスクを接続した直後や、Time Machineのバックアップ中なら、1分ほど待ちます。
  4. もう一度取り出します。Finderのサイドバーでディスクを選んで ⌘E を押すか、名前の横の取り出しボタンをクリックします。

ほとんどの場合はこれで解決します。それでも拒否されるなら、何がディスクをつかんでいるのかを正確に調べましょう。

ターミナルでディスクを使っているものを調べる

lsof(list open files、開いているファイルの一覧)はmacOSに標準で入っています。ターミナルを開き、MyDisk をFinderに表示されているディスク名に置き換えて、次のように入力します。

lsof /Volumes/MyDisk

ディスクのマウントポイントを指定すると、lsof はそのディスク上で開かれているファイルをすべて表示します。名前にスペースが含まれる場合は引用符で囲みます:lsof "/Volumes/My Disk"。

結果の読み方

1行が1つの開いているファイルです。見るべき列は次のとおりです。

  • COMMAND:プロセス名。QuickTime、zsh、mds_stores など。
  • PID:プロセス番号。アクティビティモニタにも同じ番号が表示されます。
  • FD:cwd は、そのプロセスの現在のフォルダがディスク上にあることを示します(たいていターミナルのウインドウ)。
  • NAME:ファイルそのもの。

何も表示されないのにディスクが拒否し続ける場合は、sudo lsof /Volumes/MyDisk として同じコマンドを実行し、パスワードを入力します。SpotlightやTime Machineなどのシステムサービスは別のユーザで動いており、そのファイルは管理者にしか見えません。

原因がわかったら、作業を保存してからアプリを普通に終了し、もう一度取り出します。ディスクに書き込み中のプロセスを強制終了するのは避けてください。拒否が防いでいるのは、まさにそのデータ消失です。

入力したくなければアクティビティモニタで

アクティビティモニタでプロセスをダブルクリックし、開いているファイルとポートを一覧するタブを開きます。/Volumes/MyDisk 以下のパスがあれば、そのプロセスが原因です。確実ですが、どのプロセスを調べるかを推測して1つずつ見る必要があります。lsof なら一度で答えが出ます。

SpotlightやTime Machineが原因のとき

lsof に mds、mds_stores、mdworker が表示されたら、Spotlightがディスクのインデックスを作成しています。終わるまで待つか、検索に使わないディスクなら sudo mdutil -i off /Volumes/MyDisk でインデックス作成を止めます(システム設定でSpotlightのプライバシーの一覧にディスクを追加しても同じです)。

backupd が表示されたら、Time Machineがそのディスクで作業中です。バックアップが終わるのを待つか、取り出す前にTime Machineから止めます。バックアップの途中でバックアップディスクを外すと、バックアップが壊れることがあります。

強制的に取り出す:使いどころとリスク

何をしてもだめなとき、Finderが強制的な取り出しを提案することがあり、ターミナルでも実行できます。

diskutil unmount force /Volumes/MyDisk

強制的な取り出しは、アプリが使っている最中のファイルを閉じてしまいます。まだディスクに保存されていない内容は失われ、実行中のコピーは中断されます。誰も書き込んでいないとわかっているディスク(固まったディスクイメージなど)だけに使い、コピーやバックアップの途中のディスクには使わないでください。

ディスクをつかんでいるものをFolia Filesに教えてもらう

Folia Files はmacOS用のファイルマネージャで、取り出しの拒否を行き止まりではなく、答えるべき問いとして扱います。ディスクが取り出せないと、バナーに 「MyDisk」を取り出せませんでした と表示され、使っているものがわかりやすい名前で並びます。アプリそのもの、Spotlight(ディスクのインデックス作成)、Time Machine、クイックルック などです。その下には次のボタンがあります。

  • 「App」を終了:ディスクをつかんでいるアプリを終了し(提案されるのは最大2つ)、そのあと自動でもう一度取り出します。
  • 再試行:単にもう一度試します。Spotlightが終わったあとなどに。
  • 強制的に取り出す…:先に確認を求め、何が失われうるかを説明します。

Folia Files:「Travel SSD」が取り出せず、Atlas が使用中であることをバナーが示し、再試行と強制取り出しを提案している

すべてをまとめて取り出すには、左サイドバーのディスクを右クリックして 3 個のディスクを取り出す を選ぶか(数は接続中のディスクに応じて変わります)、メニューバーのFolia Filesメニューから同じコマンドを使います。取り出すのは外部ディスクとディスクイメージだけで、ネットワーク共有は対象外です。

スリープ前に取り出す(Webサイト版)

スリープ中のノートパソコンからディスクを抜くと、macOSの「ディスクの不正な取り出し」の警告が出るのが普通です。設定 › ファイルとネットワーク › 外部ディスク の スリープ前に外部ディスクを取り出し、スリープ解除時にマウントし直す をオンにすると、Macがスリープする前にディスクをアンマウントし(接続はそのまま)、スリープ解除時にマウントし直します。そのとき使用中だったディスクはマウントされたまま残り、スリープ解除時にFolia Filesが知らせます。

設定›ファイルとネットワーク›外部ディスク:スリープ前に外部ディスクを取り出し、スリープ解除時に再マウントする

ディスクをつかんでいるものの表示、強制的に取り出す…、スリープ前の取り出しは、Folia FilesのWebサイト版の機能です。App Store版のサンドボックスからはほかのアプリが開いているファイルが見えないため、バナーにはmacOSのメッセージと 再試行 が表示されます。原因を探すには、引き続きターミナルの lsof を使います。

チェックリスト

  1. ディスク上の書類を保存して閉じ、ターミナルで cd ~。
  2. SpotlightやTime Machineが動いていそうなら1分待つ。
  3. lsof /Volumes/MyDisk、続いて sudo lsof /Volumes/MyDisk で、つかんでいるものを確認。
  4. そのアプリを終了し、⌘E でもう一度取り出す。
  5. 強制的な取り出しは、誰も書き込んでいないディスクだけに。

ターミナルを開かずに答えを知りたいなら、Folia Filesをダウンロードしてください。次に取り出しを拒むディスクが、その理由を教えてくれます。