Mac驱动使用中,了解lsof

Mac驱动使用中,了解lsof

我正在尝试修复外部硬盘上的权限。插入后我无法清空垃圾箱,因为我收到一堆“此类文件正在使用中”。我在网上读到,这可以通过修复驱动器上的权限来解决。我目前无法卸载驱动器,因为在我重新启动或拔下并重新插入它时它正在使用中。我曾经lsof看到什么在使用它,但我无法理解这一点,并且似乎无法找到明确的指南了解这意味着什么。输出如下:

COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mds      59 root   23r   DIR    1,9     1701    5 /Volumes/SEAGATE
mds      59 root   31r   DIR    1,9     1701    5 /Volumes/SEAGATE 

命令

ps ax | egrep '[ /](PID|mds)'

输出

PID   TT  STAT      TIME COMMAND
660   ??  Ss     0:12.49 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Support/mds
673   ??  Ss     0:08.68 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mds_stores

命令

/usr/bin/sudo kill 660

输出

//new line$

命令

sudo lsof /dev/disk2s2

输出

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mds     1599 root   11r   DIR    1,8     1764    5 /Volumes/SEAGATE

以该顺序

如果我连续运行几次 bash 文件,我可以得到

PID   TT  STAT      TIME COMMAND
1737   ??  Ss     0:00.69 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Support/mds

但驱动器仍然被 mds 锁定

只是为了表明添加了异常,以下是屏幕截图:

在此输入图像描述

在此输入图像描述

答案1

诊断速度太快

我在网上读到,这可以通过修复驱动器上的权限来解决。

不幸的是,从你的问题描述来看,这是错误的。需要修复的是外部磁盘上的文件系统SEAGATE

分析lsof

命令的输出lsof表明该命令mds(第一列)实际上正在读取您的文件系统/volumes/SEAGATE(最后一列)。要了解有关这个奇妙命令的更多信息,只需阅读 MacOS X 附带的手册:

man lsof

mds是 MacOS X 服务器,负责提供对所有文件系统元数据的访问。其最重要的客户端是FinderSpotlight

如果您无法弹出外部磁盘,这是合法的,因为mds仍在读取它。如果你仍然提取它,你肯定会损坏它的文件系统。

释放并修复文件系统

现在它已损坏,以下是修复此问题的方法。

  1. 打开System Preferences > Spotlight 选择Privacy窗口并添加 ( +) 您的 SEAGATE 外部磁盘以停止Spotlight 尝试为其建立索引。

  2. 如果mds仍在运行:

    ps ax | egrep '[ /](PID|mds)'
    

    你必须杀死它:

    _pid_to_kill=`ps ax | egrep '[ /]mds' | awk '{print $1}'`
    if [ "${_pid_to_kill}" ] ; then
        echo "${_pid_to_kill}" | while read _pid ; do
            /usr/bin/sudo kill ${_pid}
        done
    fi
    

    检查lsof您的SEAGATE磁盘现在是否可用:

    lsof /Volumes/SEAGATE
    

    如果没问题,请转到 4。

  3. 如果杀掉后mds没有释放/Volumes/SEAGATE,则有另一个进程通过 访问该文件系统mds。 (这可能是防病毒软件或垃圾软件。这是另一种规模的调查)。在这种情况下,快速路径将是停止launchd启动mds

    请按如下方式进行:

    cd /System/Library/LaunchDaemons
    /usr/bin/sudo launchctl unload com.apple.metadata.mds.plist
    

    检查您是否没有更多mds进程:

    ps ax | egrep '[ /](PID|mds)'
    

    检查lsof您的SEAGATE磁盘现在是否可用:

    lsof /Volumes/SEAGATE
    

    这应该没问题,转到 4。

  4. 启动Disk Utility 并检查您的磁盘SEAGATE。我怀疑需要进行一些维修。在这种情况下进行修复。

    弹出它,并检查是否不再有任何“文件正在使用”错误消息。

  5. 打开System Preferences > Spotlight 选择Privacy窗口并移除 ( -) 您的 SEAGATE 外部磁盘以允许Spotlight 为其建立索引。

  6. 如果您通过了 strep 3,您必须停止launchd启动mds,则必须重新启用此功能(否则管理文件系统的很多事情都会失败)。

    请按如下方式进行:

    cd /System/Library/LaunchDaemons
    /usr/bin/sudo launchctl load com.apple.metadata.mds.plist
    

答案2

Spotlight 似乎正在为此驱动器建立索引。可能存在导致 Spotlight 挂起并不断损坏该驱动器的问题。

mds进程是元数据服务器。尝试终止此进程,然后告诉聚光灯不要索引此驱动器。

要禁用聚光灯索引,请转至系统首选项 -> Spotlight -> 隐私,并将磁盘添加到排除列表。您可能必须终止mds并重新启动它才能获得聚光灯以停止索引。

不确定这是否是您的问题,但这将是一个很好的起点。

相关内容