NFS升级后,由于目录不为空,rmdir失败

时间:2017-11-08 04:03:26

标签: php amazon-web-services nfs rm

我有一个拥有资产目录的网站。有时我需要删除整个文件夹,以前在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); 
}

1 个答案:

答案 0 :(得分:1)

这很可能意味着另一个进程在一个或多个文件上有一个锁。这可能是文件未正确关闭的软件错误。

这可能适用于EBS但不适用于NFS的原因是删除文件的处理方式存在差异。

有一些软件工具可以告诉您文件系统上打开了哪些文件。使用这些工具之一来弄清楚发生了什么。通常,您还可以看到具有打开文件的进程。

rm -rf很可能无法正常工作。 -f选项是“force”,这意味着更改只读文件的权限,以便可以删除它。 rm无法更改/删除文件系统锁定。