删除目录挂起

删除目录挂起

我是共享编译服务器上的非 root 用户,该服务器/home通过 NFS 从其他主机挂载。我有一个~/a/b包含很多子目录的目录c1,c2,...。我想~/a/b彻底删除,大部分cN目录都成功了。但有一些(比如c1)是完全无法访问的:我可以执行它们(即cd进入它们),但列表(ls)都不能,更不用说删除它们了。如果我说rm -rf ~/a/b/c1,则进程将处于挂起D状态。

作为非 root 用户我可以做什么来摆脱~/a/b


更新:我只是 ssh 到文件服务器(以排除 NFS),而且我也无法在那里执行操作,所以这似乎根本不是 NFS 问题。但是,为什么内核拒绝删除目录呢?

答案1

删除文件或目录是一项原子操作,需要一个系统调用,因此如果该rm命令挂起,那是因为内核被卡住了。在 NFS 文件系统上,这可能(通常是)由于服务器没有响应而导致。在本地文件系统上,这可能(通常是)由于硬件故障造成的。您的磁盘可能出现故障;内核日志会证实这一点。

答案2

如果它在查找和删除操作期间挂起,您可以为该过程设置超时,如下所示(这里我bash在 Windows 上使用 cygwin 调用它):

bash -c "find . -regex ".+fileDirToDelete" -exec rm -Rf {} \; & pid=$!; sleep 100; kill $pid"

答案3

检查是否有任何进程正在访问后台的文件(例如它们当前的工作目录)。我会使用诸如lsof和 之类的工具fuser -v,看看是否有任何进程弄乱了目录,并首先将其删除。如果需要,请重新启动 nfs 客户端服务,并尝试检查该目录是否存在,并且当该目录是同一 shell 的当前工作目录时,请勿删除该目录。

相关内容