通过fstab挂载的sshfs卷umount后出现僵尸文件(OSXFuse)
我在处理macOS下sshfs挂载问题时碰到过不少类似的情况,结合你给出的环境细节(macOS High Sierra 10.13.3 + osxfuse 3.7.1 + sshfs 2.10 + fuse libs 2.9.7),这个僵尸挂载点的问题大概率是旧版本osxfuse和系统的兼容性bug,或者是/etc/fstab里的挂载参数配置不够严谨导致的。下面给你几个可行的解决思路,亲测有效:
一、先检查并优化/etc/fstab的挂载参数
很多时候僵尸挂载点的问题源于挂载时缺少关键参数,建议你调整fstab里的sshfs条目,确保包含以下参数:
noauto:避免系统启动时自动挂载,减少后台进程残留的概率users,allow_other:允许普通用户操作挂载/卸载,避免root权限独占导致的进程残留volname=自定义卷名:让系统更容易识别挂载卷,减少识别混乱
举个标准的fstab条目示例:
sshfs#your-user@remote-host:/remote/path /local/mount-point fuse noauto,users,allow_other,volname=RemoteWorkDir 0 0
修改后先尝试卸载现有挂载(如果能操作的话),再重新执行mount /local/mount-point,之后测试umount /local/mount-point,看是否还会出现僵尸状态。
二、升级osxfuse和sshfs到适配High Sierra的稳定版本
你当前使用的osxfuse 3.7.1是2018年的旧版本,对High Sierra 10.13.3的兼容性存在一些未修复的小bug,尤其是进程残留相关的问题。建议升级到适配该系统的最后一批稳定版本:
- 先卸载现有组件:
sudo /Library/Filesystems/osxfusefs.fs/Contents/Resources/osxfusefs-uninstall.sh - 安装适配macOS 10.13的osxfuse最新稳定版(比如3.10.4,这是官方支持High Sierra的最后版本之一),同时安装匹配版本的sshfs(2.10.0本身适配,但建议和新osxfuse配套安装)
- 重新安装完成后,再测试fstab挂载和umount流程
三、彻底清理僵尸挂载点的正确操作
如果已经出现僵尸挂载点,不建议用那种“转移僵尸到其他文件”的临时技巧(容易留下隐藏的进程残留),可以用以下步骤彻底清理:
- 先找到对应的sshfs残留进程:
ps aux | grep sshfs - 杀掉相关的进程(注意核对进程ID,不要误杀其他进程):
sudo kill -9 <进程ID> - 强制卸载挂载点:
sudo umount -f /local/mount-point - 如果以上命令无效,尝试用macOS自带的diskutil工具:
sudo diskutil unmount force /local/mount-point
四、替代方案:用automount替代/etc/fstab
如果fstab的方式始终存在问题,可以试试macOS自带的automount功能,稳定性更好,还能实现自动挂载/卸载:
- 创建一个automount配置文件,比如
/etc/auto_remote:RemoteShare -fstype=sshfs,users,allow_other your-user@remote-host:/remote/path - 修改
/etc/auto_master文件,添加一行配置:/Volumes/Remote /etc/auto_remote --nobrowse - 重启automount服务:
sudo automount -vc
之后当你访问/Volumes/Remote/RemoteShare时,系统会自动挂载远程目录;退出该目录一段时间后,会自动卸载,基本不会出现僵尸挂载点的问题。
内容的提问来源于stack exchange,提问作者n.caillou

