假設文件被批量替換(同名)並且未就地修改(即創建臨時文件,然後重命名爲文件名)。mmap本地v/s nfs文件:底層文件在磁盤上被替換時會發生什麼?
我想這個改變不會影響本地mmap,因爲內核仍然有一個磁盤上舊文件(inode)的句柄。
然而,由於NFS是無狀態的,將在MMAP得到所有困惑和MMAP的(長)一生中混淆了舊/新文件內容?
在我看來,讀/ readv是處理NFS安裝文件的唯一安全的方式。
假設文件被批量替換(同名)並且未就地修改(即創建臨時文件,然後重命名爲文件名)。mmap本地v/s nfs文件:底層文件在磁盤上被替換時會發生什麼?
我想這個改變不會影響本地mmap,因爲內核仍然有一個磁盤上舊文件(inode)的句柄。
然而,由於NFS是無狀態的,將在MMAP得到所有困惑和MMAP的(長)一生中混淆了舊/新文件內容?
在我看來,讀/ readv是處理NFS安裝文件的唯一安全的方式。
如果你有一個開放的引用文件,該引用將繼續引用同一個文件,只要參考生活,即使文件本身被刪除或重命名,即使它的名字被重用刪除後的全新文件。該引用可以是文件描述符或存儲器映射。這是POSIX的一部分,無論使用什麼類型的文件系統,都是如此(或者應該是!)。換句話說:如果您在NFS文件系統上打開文件並將其映射到內存中,只要不取消映射,您可以繼續使用該內存映射,即使其他進程(或其他進程相同的進程)刪除文件並用相同的名稱替換它。
這是真的,NFS協議是無狀態的,所以實現必須採取特殊措施,以確保這種情況下,正確處理。這是一個很長的時間,因爲我看它是如何做,但我最後一次做(在Solaris上),它被重命名文件的特殊隱藏名稱(.nfsXXXXX
)而不是刪除他們,如果他們的鏈接計數遞減到零做盡管仍有對它們的公開引用。無論如何,無論使用哪種技巧,你作爲文件系統的用戶都不應該擔心它。