web-dev-qa-db-ja.com

mkdirは、ディレクトリが最近アクセスされたかどうかに応じて、異なるエラー(許可が拒否されたか、ファイルが存在するか)を示します。

問題

まず、新しいワークステーションにログインします。

_myAcct@ws5: mkdir /users/adminAcct/foo/parentDir/childDir
mkdir: cannot create directory ‘/users/adminAcct/foo/parentDir/childDir’: Permission denied
_

ChildDirが存在していても、_Permission denied_エラー。

ChildDirにアクセスすると、このエラーが変わります。これは、iPythonでos.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_

「ファイルが存在します」というエラーを一貫して返すことができるようにしたい。

バックグラウンド

親ディレクトリ_--x_に対して_/users/adminAcct/foo/parentDir_グループ権限があります。子ディレクトリ_/users/adminAcct/foo/parentDir/childDir_が存在し、そのディレクトリに対する_r-x_グループ権限があります。これはもともとPythonの問題として始まりましたが、シェルで再現することができました。 NFSを介してホームディレクトリがマウントされているクラスターの一部であるCentOS6ワークステーションで作業しています。 _/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/childDir_を_AIRFLOW_HOME_として使用して、これらのワークステーションでエアフローCeleryExecutorワーカーを起動および実行する際に断続的な問題が発生します。これらの問題がいつ再発するかを予測することはできませんでした。

6
hhoke1

NFSクライアントは、ウォールクロックベースのタイムアウトを持つ属性をキャッシュします。

これによりパフォーマンスは向上しますが、一部のシナリオでは「わずかに不正確」な結果になります。ファイルの存在などに関する標準のUNIX保証は、クライアントの動作方法の性質によって常に満たされるとは限りません。

これを軽減する1つの方法は、クライアント側のキャッシュ(noac)を無効にするか、ディレクトリエントリのキャッシュ(lookupcache=none)-参照 https://linux.die.net/man/5/nfs

1
fork2execve