.nfs0000123456789abcdef のようなファイルが出来てしまって削除できない時の対処法

今日はちょっとマニアックな話です。

NFSサーバを RedHat Linux Enterprise Server 5 でマウントして使っているのですが、しばしば、

.nfs0000123456789abcdef12345

というような名前のファイルが出来て、削除もリネームも出来ません。
なんか、一般ユーザがファイルをオープンしたりして掴んでいる時に、特権ユーザがそのファイルを削除したりすると、こんな名前のファイルにリネームされるらしいんですけど、このファイルがあると、フォルダも削除できないんですよね。
ファイル自体は、「.」(ドット)で始まるので、隠しファイルになるから邪魔にはなりにくいんですけど、フォルダが消せないのが問題になる事がよくあります。
原因がよくわからなかったので、しばらく放っておいたのですが、今日、たまたま対処法が見つかったので、忘れないように書いておきます。

どうやら、このようなファイルが出来る原因は、プロセスがファイルを掴みっぱなしになったままで居る事のようです。
ファイルを掴んでいるプロセスを特定し、そのプロセスを終了させれば、解決するようです。

  1. 次のコマンドで、ファイルを掴んでいるプロセスIDを調べる。
    (以下の例では、プロセスIDは「20607」ということになる。)
    # lsof .nfs0000123456789abcdef12345
    COMMAND   PID  USER   FD   TYPE DEVICE  SIZE       NODE NAME
    smbd     20607 guest  20u   REG   0,25  2980 2028790600 .nfs0000123456789abcdef12345
  2. psとか使って、このPIDのプロセスが、現在人の手によって動作中の物でないか、調べてみる。
    (もし、誰かがオープン中だったりすると、次の手順でkillすると、その誰かの情報が失われてしまう可能性があるので、慎重に。)
  3. kill コマンドで、プロセスを終了する。
    # kill 20607


これで、例のファイルは消え失せているはずです。
健闘を祈ります。