mkdir 根据最近是否访问过目录给出不同的错误(权限被拒绝与文件存在)

hho*_*ke1 7 filesystems permissions centos nfs mount

问题

首先,我登录到一个新工作站。

myAcct@ws5: mkdir /users/adminAcct/foo/parentDir/childDir
mkdir: cannot create directory ‘/users/adminAcct/foo/parentDir/childDir’: Permission denied
Run Code Online (Sandbox Code Playgroud)

一种 Permission denied错误,即使childDir存在。

如果我访问 childDir,这个错误就会改变。我可以在 iPythonos.path.isdir()中使用ls.

myAcct@ws5: ls /users/adminAcct/foo/parentDir/childDir
file.cfg
myAcct@ws5: mkdir /users/adminAcct/foo/parentDir/childDir
mkdir: cannot create directory ‘/users/adminAcct/foo/parentDir/childDir’: File exists
Run Code Online (Sandbox Code Playgroud)

我希望能够始终如一地返回“文件存在”错误。

背景

--x对父目录有组权限,/users/adminAcct/foo/parentDir. 子目录/users/adminAcct/foo/parentDir/childDir存在,并且我r-x对该目录具有 组权限。这最初是 python 中的一个问题,但我能够在 shell 中重新创建它。我正在使用 CentOS 6 工作站,该工作站是通过 NFS 挂载主目录的集群的一部分。该/users目录位于 中/etc/fstab,并使用选项挂载(rw,vers=3,hard,intr,addr=<some IP addr>)。内核是Linux ws5.MyCompany.com 2.6.32-431.17.1.el6.x86_64 #1 SMP Wed May 7 23:32:49 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

语境

在我访问子目录后的一段时间内,mkdir 将继续返回File exists错误。一段时间后, mkdir 将再次返回Permission denied错误。这会在这些工作站上使用/users/adminAcct/foo/parentDir/childDiras启动和运行气流 CeleryExecutor 工作程序时产生间歇性问题AIRFLOW_HOME。我一直无法预测这些问题何时会再次出现。

小智 1

NFS 客户端缓存属性,这些属性具有基于挂钟的超时。

这提高了性能,但在某些情况下会给出“稍微不正确”的结果。客户端工作方式的本质并不总能满足有关文件存在等的标准 UNIX 保证。

缓解此问题的一种方法是禁用客户端缓存 ( noac),或仅禁用目录条目缓存 ( lookupcache=none) - 请参阅https://linux.die.net/man/5/nfs