Files

刪除我看到的流浪文件 .nfs0000000000b869e300000001

  • December 9, 2019

我刪除了一個文件,現在我看到:

$ ls
total 64
-rw-rw-r-- 1 502 17229 Sep 17 16:42 page_object_methods.rb
drwxrwxr-x 7 502   238 Sep 18 18:41 ../
-rw-rw-r-- 1 502 18437 Sep 18 18:41 new_page_object_methods.rb
-rw-r--r-- 1 502 16384 Sep 18 18:42 .nfs0000000000b869e300000001
drwxrwxr-x 5 502   170 Sep 21 13:48 ./
13:48:11 *vagrant* ubuntu-14 selenium_rspec_conversion

如果我嘗試刪除它:

$ rm .nfs0000000000b869e300000001
rm: cannot remove ‘.nfs0000000000b869e300000001’: Device or resource busy

這說明什麼?我該怎麼辦

文件可以在程序打開時被刪除。發生這種情況時,目錄條目被刪除,但文件本身(inode 和內容)留在後面;該文件只有在沒有更多連結並且沒有被任何程序打開時才會被真正刪除。

NFS 是一種無狀態協議:操作可以獨立於之前的操作執行。伺服器甚至可以重新啟動,一旦它重新聯機,客戶端將像以前一樣繼續訪問文件。為了使其工作,文件必須由它們的名稱指定,而不是通過打開文件獲得的句柄(伺服器重新啟動時會忘記)。

將兩者放在一起:當客戶端打開文件並刪除時會發生什麼?該文件需要保持名稱,以便打開它的客戶端仍然可以訪問它。但是當一個文件被刪除時,預計以後不會再存在同名的文件了。因此 NFS 伺服器將打開文件的刪除變成了重命名:文件被重命名為.nfs…(.nfs後跟一串字母和數字)。

您無法刪除這些文件(如果您嘗試,所發生的只是新.nfs…出現的帶有不同後綴的文件)。當打開文件的客戶端關閉它時,它們最終會消失。(如果客戶端在關閉文件之前就消失了,可能需要一段時間伺服器才會注意到。)

引用自:https://unix.stackexchange.com/questions/231074