我有一个 LaCie USB 磁盘,当它连接到我的 MacBook Pro 时,它不会停止读取或写入。它总是发出噪音,即使我没有对它做任何事情。驱动器无法正常弹出(即弹出并旋转),而是必须强制弹出它,之后驱动器仍在运行。
如果我将驱动器连接到我的 Windows 7 PC,它就能运行得很好。
我已经看到这种情况几个星期了,不记得我是否安装了可能导致问题的东西。该驱动器使用的是 FAT32。
有人知道如何找出哪个程序使得驱动器执行所有那些读取或写入操作吗?
答案1
有几种命令行工具可以帮助追踪此类情况。要找出磁盘活动的原因,我会使用fs_usage
。以下是使用它在从 bash 创建文件时监视备用卷的示例:
$ sudo fs_usage | grep /Volumes/Spare
Password: [enter admin password; it will not echo]
08:56:10 open /Volumes/Spare/somefile 0.000827 bash
08:56:10 lstat64 /Volumes/Spare 0.000029 fseventsd
08:56:10 getattrlist /Volumes/Spare 0.000017 Finder
08:56:10 getattrlist /Volumes/Spare 0.000030 Finder
08:56:10 getattrlist /Volumes/Spare 0.000013 Finder
08:56:10 access_extended /Volumes/Spare 0.000045 Finder
08:56:10 lstat64 /Volumes/Spare/somefile 0.000038 mdworker
08:56:10 getattrlist /Volumes/Spare/somefile 0.000023 mdworker
08:56:10 getattrlist /Volumes/Spare/somefile 0.000034 mdworker
08:56:10 open /Volumes/Spare/somefile 0.000027 mdworker
08:56:10 getattrlist /Volumes/Spare/somefile 0.000018 mdworker
08:56:10 open /Volumes/Spare/somefile 0.000016 mdworker
08:56:10 getattrlist /Volumes/Spare/somefile 0.000017 mdworker
08:56:10 getattrlist /Volumes/Spare/somefile 0.000012 mdworker
^C
(注意:当fs_usage
通过管道传输到另一个命令时,它会将其输出格式化为 132 列显示 - 为了使其可读,您应该扩大终端窗口以匹配。另外,使用 control-C 退出)。这里有趣的列是第三列(文件路径)和最后一列(进程名称) - 在此示例中,bash 创建了 /Volumes/Spare/somefile,Finder 注意到某些内容已更改并检查了文件夹的属性,并且 mdworker(Spotlight 的一部分)注意到了新文件并对其进行了检查以将其添加到卷的搜索索引中。
对于这种事情,另一个有用的工具是lsof
(列出打开的文件):
$ sudo lsof | grep /Volumes/Spare
mds 30 root txt REG 14,4 2 430 /Volumes/Spare/.Spotlight-V100/Store-V1/Stores/0DF7E0C0-E376-45EF-81DC-0F0C64676526/0.indexGroups
mds 30 root txt REG 14,4 2056 435 /Volumes/Spare/.Spotlight-V100/Store-V1/Stores/0DF7E0C0-E376-45EF-81DC-0F0C64676526/0.indexDirectory
mds 30 root txt REG 14,4 8 436 /Volumes/Spare/.Spotlight-V100/Store-V1/Stores/0DF7E0C0-E376-45EF-81DC-0F0C64676526/0.indexCompactDirectory
mds 30 root txt REG 14,4 2731 400 /Volumes/Spare/.Spotlight-V100/Store-V1/Stores/0DF7E0C0-E376-45EF-81DC-0F0C64676526/live.0.indexGroups
mds 30 root txt REG 14,4 1024 406 /Volumes/Spare/.Spotlight-V100/Store-V1/Stores/0DF7E0C0-E376-45EF-81DC-0F0C64676526/live.0.indexCompactDirectory
[...etc...]
这里,进程名称位于第一列,文件路径位于末尾(显示甚至更宽)。在此示例中,只有 mds(Spotlight 的另一部分)处于打开状态,其索引数据库也处于打开状态。
虽然fs_usage
很适合查看一段时间内的活动(但不会显示已打开但不活动的文件),但它lsof
会提供哪些程序正在使用哪些文件的快照(但不会显示它们的活动程度,并且会错过已打开、使用然后立即关闭的文件)。这些工具结合起来,可以很好地展示正在发生的事情。
答案2
尝试使用 Activity Monitor.app。通常位于:
Applications->Utilities
让它监视所有进程,然后按 %CPU 排序。如果某些东西不断读取/写入磁盘,则很可能可以通过此实用程序看到它。