You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SMB共享文件夹卸载异常:PHP仍可列出内容的问题排查

问题分析与解决方案

这种情况大概率是PHP运行的进程还在占用挂载点目录导致的——Linux系统里,如果有进程的当前工作目录处于挂载点下,执行umount后挂载点会被"隐藏"(命令行ls看不到内容),但占用它的进程依然能访问原来SMB共享里的文件内容。

下面是具体的排查和解决步骤:

1. 先确认挂载状态是否真的卸载

执行以下命令,检查/mnt/smb是否还在系统挂载列表中:

mount | grep /mnt/smb
# 或者用df查看更直观的磁盘占用
df -h | grep /mnt/smb

如果还能看到这条挂载记录,说明之前的卸载命令没真正生效;如果看不到,那就是进程占用的问题无疑了。

2. 找出占用挂载点的进程

用下面的命令定位所有当前工作目录在/mnt/smb下的进程:

lsof +D /mnt/smb
# 或者用fuser(如果没装可以先安装:Debian/Ubuntu用apt install psmisc,CentOS/RHEL用yum install psmisc)
fuser -m /mnt/smb

你应该能看到PHP相关的进程,比如php-fpm、apache2或者nginx,具体取决于你的PHP运行环境。

3. 终止占用进程并彻底卸载

  • 如果是PHP-FPM环境:重启PHP-FPM服务
    # Debian/Ubuntu通用命令
    systemctl restart php-fpm
    # 若指定版本,比如php7.4-fpm
    systemctl restart php7.4-fpm
    
    # CentOS/RHEL
    systemctl restart php-fpm
    
  • 如果是Apache(PHP作为模块运行):重启Apache服务
    # Debian/Ubuntu
    systemctl restart apache2
    
    # CentOS/RHEL
    systemctl restart httpd
    
  • 重启完成后,再执行一次卸载命令确保彻底生效:
    umount /mnt/smb
    

4. 验证结果

现在分别测试两种场景:

  • 命令行执行ls /mnt/smb,应该显示为空(或者提示目录不存在,如果你没手动重建这个目录)
  • 运行包含ls /mnt/smb的PHP文件,结果会和命令行一致,再也看不到SMB共享的内容了

另外建议下次卸载SMB共享前,先确认没有任何进程在使用该挂载点,避免出现这种"假卸载"的情况。

内容的提问来源于stack exchange,提问作者Reza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:25:49