由于 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 .....”错误。

linux-rmdir

Linux 之 rmdir 命令

os模块

文件目录管理二

#yyds干货盘点#Linux之rmdir与rm