所有文章

Mac 磁盘“正在使用”无法推出怎么办

· 阅读约 6 分钟

当你推出外置磁盘时,macOS 回答“磁盘未能推出,因为一个或多个程序可能正在使用它”,说明这个磁盘上仍有文件被打开。macOS 拒绝卸载,是为了不让数据在写入途中丢失。解决办法始终如一:找出占用磁盘的东西,关闭它,再次推出;强制推出只作为最后手段。

下面介绍如何用 macOS 自带的工具找出元凶,以及 Folia Files 如何直接告诉你它的名字。

macOS 为什么说磁盘正在使用

只要有进程在磁盘上打开着文件、文件夹或工作目录,磁盘就无法卸载。常见的原因有:

  • 打开了磁盘上文稿的 App:播放器里的视频、编辑器里的项目、照片图库。
  • 聚焦(Spotlight):正在为刚发现的磁盘建立索引(进程名为 mds_stores 或 mdworker)。刚接上的磁盘常常会忙上几分钟。
  • 时间机器:正在向这个磁盘备份或检查它。
  • 快速查看:正在为你刚浏览过的文件生成缩略图。
  • 终端窗口:当前文件夹位于该磁盘上。看起来什么都没打开,其实是 shell 本身占着磁盘。
  • 仍在进行的拷贝:有时在另一个 App 里。

访达有时会在提示中写出 App 的名字,但更多时候只有一句笼统的提示,看不出是谁。

先关掉明显的,再试一次

  1. 存储并关闭磁盘上的所有文稿。如果不确定是哪个 App 在用,就退出打开过该磁盘文件的 App。
  2. 关闭显示该磁盘的访达窗口。在终端里,对每个在该磁盘上工作的窗口输入 cd ~。
  3. 如果磁盘刚刚接上,或时间机器正在备份,请等一分钟。
  4. 再次推出:在访达边栏中选中磁盘并按 ⌘E,或点按名称旁的推出按钮。

大多数情况到这里就解决了。如果磁盘仍然拒绝推出,就来精确查明是谁占着它。

用终端找出正在使用磁盘的程序

lsof(list open files,列出打开的文件)是 macOS 自带的。打开终端,输入下面的命令,把 MyDisk 换成访达中显示的磁盘名称:

lsof /Volumes/MyDisk

指定磁盘的装载点后,lsof 会列出该磁盘上所有打开的文件。如果名称中有空格,请加上引号:lsof "/Volumes/My Disk"。

如何看结果

每一行是一个打开的文件。需要关注的列:

  • COMMAND:进程名,例如 QuickTime、zsh 或 mds_stores。
  • PID:进程编号,活动监视器中显示的也是它。
  • FD:cwd 表示该进程的当前文件夹在磁盘上(通常是终端窗口)。
  • NAME:文件本身。

如果什么都没显示,磁盘却仍然拒绝推出,就用 sudo lsof /Volumes/MyDisk 再运行一次并输入密码:聚焦和时间机器等系统服务以另一个用户身份运行,只有管理员才能看到它们打开的文件。

找到之后,先存储工作,再正常退出该 App,然后再次推出。不要强行结束正在向磁盘写入的进程:拒绝推出所防止的,正是这种数据丢失。

不想输入命令,就用活动监视器

在活动监视器中连按一个进程,打开列出其打开的文件和端口的标签页:如果其中出现 /Volumes/MyDisk 下的路径,就是它。这样可行,但你得猜该查哪个进程,一个一个地看。lsof 一次就能给出答案。

如果是聚焦或时间机器

如果 lsof 显示 mds、mds_stores 或 mdworker,说明聚焦正在为磁盘建立索引。等它完成;如果是从不需要搜索的磁盘,可以用 sudo mdutil -i off /Volumes/MyDisk 关闭索引(或在系统设置中把磁盘加入聚焦的隐私列表)。

如果显示 backupd,说明时间机器正在使用这个磁盘。等备份完成,或在推出前从时间机器中停止它:备份进行到一半时拔下备份磁盘,可能会损坏备份。

强制推出:何时用,有何风险

实在没办法时,访达可能会提供强制推出,终端也能做到:

diskutil unmount force /Volumes/MyDisk

强制推出会在 App 不知情的情况下关闭文件:尚未存储到磁盘的内容会丢失,正在进行的拷贝会被中断。只对确定没有任何程序在写入的磁盘使用,例如卡住的磁盘映像;切勿用于正在拷贝或备份的磁盘。

让 Folia Files 告诉你是谁占着磁盘

Folia Files 是一款 macOS 文件管理器,它把推出失败当作一个需要回答的问题,而不是死胡同。当磁盘无法推出时,横幅会显示 无法推出“MyDisk”,并用一看就懂的名字列出正在使用它的东西:App 本身、聚焦(正在索引磁盘)、Time Machine 或 快速查看。消息下方有:

  • 退出“App”:退出占用磁盘的 App(最多提供两个),然后自动再次推出。
  • 重试:只是再试一次,例如在聚焦完成之后。
  • 强制推出…:先请你确认,并说明会有什么风险。

Folia Files:“Travel SSD”无法推出,横幅显示它正被 Atlas 使用,并提供重试和强制推出

要一次推出全部,在左侧边栏中右键点按一个磁盘,选择 推出 3 个磁盘(数字随已连接的磁盘而变),或使用菜单栏中 Folia Files 菜单里的同一命令。它推出外置磁盘和磁盘映像,从不推出网络共享。

睡眠前推出(网站版)

在笔记本电脑睡眠时拔下磁盘,通常会引来 macOS 关于磁盘未正确推出的警告。在 设置 › 文件与网络 › 外置磁盘 中打开 睡眠前推出外置磁盘,唤醒后重新装载,Mac 会在睡眠前卸载这些磁盘(仍保持连接),并在唤醒后重新装载。那一刻正在使用的磁盘会保持装载,唤醒后 Folia Files 会告诉你。

设置›文件与网络›外部磁盘:睡眠前推出外部磁盘,唤醒后重新装载

指出占用磁盘的程序、强制推出… 和睡眠前推出,都属于 Folia Files 的网站版。App Store 版的沙盒看不到其他 App 打开的文件:在那里,横幅显示 macOS 的提示和 重试 按钮,要找出元凶仍需使用终端中的 lsof。

快速清单

  1. 存储并关闭磁盘上的文稿;在终端中输入 cd ~。
  2. 如果聚焦或时间机器可能在工作,等一分钟。
  3. 先运行 lsof /Volumes/MyDisk,再运行 sudo lsof /Volumes/MyDisk,看是谁占着它。
  4. 退出该 App,再按 ⌘E 推出。
  5. 只对没有程序在写入的磁盘使用强制推出。

如果你更想不打开终端就知道答案,下载 Folia Files:下一个拒绝推出的磁盘会告诉你原因。