SMB共享文件夹卸载后PHP仍可访问的问题排查
问题拆解与解决办法
兄弟,你遇到的这个情况其实挺常见的——核心原因是有进程(就是跑你PHP脚本的那个服务,比如php-fpm或者Apache)还攥着/mnt/smb的访问权限,导致你的卸载操作只是“表面生效”:shell里看不到内容,但进程还能访问到原来的共享文件系统。
为啥会出现这种情况?
- 要么是运行PHP的服务进程(比如某个php-fpm worker)当前的工作目录就在
/mnt/smb或者它的子目录里 - 要么是之前的PHP脚本打开了
/mnt/smb里的文件,没及时关闭文件句柄,系统就会保留对这个挂载点的引用
先验证问题根源
你可以用lsof命令查一查哪些进程还在占用这个挂载点:
lsof +D /mnt/smb
执行完应该能看到php-fpm或者Apache相关的进程条目,这就实锤了。
解决步骤
- 先停掉相关的PHP服务,把所有占用的引用都释放掉:
如果用的是php-fpm:
如果是Apache搭的PHP环境:systemctl stop php-fpm # 老系统可能要用 service php-fpm stopsystemctl stop apache2 - 重新执行卸载命令,这次就能彻底卸载了:
如果还提示“device is busy”,可以用强制卸载(已经停了服务的话没问题):umount /mnt/smbumount -f /mnt/smb - 重启服务,再跑你的PHP脚本试下,应该就列不出内容了:
systemctl start php-fpm # 或者 systemctl start apache2
小提醒
以后卸载挂载前,最好先用lsof扫一眼有没有进程在占用目标目录,能避免这种“假卸载”的麻烦。
内容的提问来源于stack exchange,提问作者Reza
相关产品推荐
相关产品推荐

