- 是否有可靠的方法來檢查該文件是否存在?在上面給出的場景中,lstat文件返回成功,應用程序僅在嘗試移動文件後失敗。
這是正常的NFS行爲。
那是不可能做手工,因爲NFS僞裝成一個正常的POSIX兼容的文件系統。
我試過一次代碼close()/ open()試圖以某種方式減輕NFS客戶端緩存的影響。在我的情況下,我需要讀取寫入其他服務器上的文件的信息。但即使重新開放的伎倆也接近零效應。我不能將fdatasync()添加到寫入端,因爲這會降低整個應用程序的速度。
我迄今爲止對NFS的使用經驗是,你無能爲力。在關鍵代碼路徑中,我簡單地編碼以重試返回ESTALE的文件操作。
- 如何在NFS的情況下寫的可靠的文件管理代碼一些一般性的提醒?
國防部我下來你想要的,但如果你的客戶想要的可靠性,他們應該不會使用NFS。
例如,如果客戶需要可靠性,我公司例如廣告使用正確的分佈式文件系統(我故意省略品牌)。我們的核心軟件不保證在NFS上運行,我們不支持這種配置。但在我們的情況下,我們確實需要保證只要數據寫入FS,它們就可以在所有其他節點上訪問。
NFS的一致性可以實現,但以性能爲代價,使得NFS幾乎不可用。 (檢查它的掛載選項。)NFS正在瘋狂地緩存,以隱藏它是服務器文件系統的事實。爲了使所有操作一致,NFS客戶端必須同步轉到NFS服務器以進行每個小操作,繞過本地緩存。那永遠不會很快。
但是因爲我們在這裏談論Linux,所以可以建議客戶使用該軟件來評估可用的羣集文件系統。例如。 RedHat現在正式支持GFS。我聽說過使用CodaFS的人,但沒有很好的信息。
謝謝。你已經證實了我自己的大部分NFS研究結果。猜猜我會編寫一堆ESTALE檢查,因爲我們沒有計劃遷移到其他存儲。我現在不會接受這個答案,希望有人會提出更多關於主題的信息。 – begray 2010-07-08 18:57:33