由于 NFS 升级后目录不为空,rmdir 失败
Posted
技术标签:
【中文标题】由于 NFS 升级后目录不为空,rmdir 失败【英文标题】:rmdir fails due to directory not empty after NFS upgrade 【发布时间】:2017-11-08 04:03:26 【问题描述】:我有一个包含资产目录的网站。有时我需要删除整个文件夹,之前在 AWS 上我有一个带有 EBS 的 EC2 用于存储,它运行良好。
我现在正在测试 EFS 以在多个实例之间共享资产。文件被删除,但是当它去删除目录时,它会抛出一个警告说目录不是空的:
错误 [警告]: rmdir(/path/): 目录不为空
查看文件系统时,目录是空的,所以我只能假设存在一些滞后。我已经放入了一个睡眠功能,看看它是否可以作为测试修复它,但它没有。
目录的权限看起来正确,保存/删除文件没有问题。
是我执行rm -rf
命令的唯一选择吗?执行以下删除的代码:
public function delTree($dir)
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file)
(is_dir("$dir/$file")) ? $this->delTree($dir . $file . "/") : unlink("$dir/$file");
return rmdir($dir);
【问题讨论】:
您确认没有点文件 (ls -la
)?您的 EFS 文件系统是“通用”还是“最大 i/o”?
是的,没有点,通用。
【参考方案1】:
这很可能意味着另一个进程对一个或多个文件持有锁。这可能是文件未正确关闭的软件错误。
这可能适用于 EBS 但不适用于 NFS 的原因是删除文件的处理方式不同。
有一些可用的软件工具可以告诉您在文件系统上打开了哪些文件。使用其中一种工具来找出正在发生的事情。通常你也可以看到打开文件的进程。
rm -rf 很可能不起作用。 -f 选项是“强制”,这意味着更改只读文件的权限,以便可以将其删除。 rm 无法更改/删除文件系统锁。
【讨论】:
以上是关于由于 NFS 升级后目录不为空,rmdir 失败的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular CLI 应用程序中安装 express 时出现“ENOTEMPTY:目录不为空,rmdir .....”错误。