阿里云文件存儲NAS是否支持inotify?
使用 inotifywait 配合 rsync 是一種常見的準實時數(shù)據(jù)備份/同步方案,但在NAS文件系統(tǒng)上 inotifywait 無法正常工作,這是由于 inotify 本身的實現(xiàn)機制導(dǎo)致的。
inotifywait 原理簡介
inotifywait 是Linux 內(nèi)核子模塊 inotify 的用戶態(tài)接口實現(xiàn),inotify 實現(xiàn)在 VFS 層,當文件操作到達 VFS 層時,inotify 模塊會將操作類型(創(chuàng)建/刪除/屬性改變等)和操作對象(文件名)反饋給用戶態(tài),用戶態(tài)的 inotifywait 即可將本次操作信息輸出給用戶。
NAS 上使用 inotifywait 存在的問題
由于 inotify 是在 kernel 的 VFS 層實現(xiàn)的,因此在 NFS 文件系統(tǒng)上,遠程客戶端對 NFS 文件系統(tǒng)的操作無法被本地 kernel 所感知,inotify 也就無法感知遠程客戶端的文件修改操作。
因此,在 NAS 上使用 inotifywait 會出現(xiàn)以下現(xiàn)象:
?在客戶端 A 和 B 同時掛載一個 NAS 文件系統(tǒng),在客戶端 A 啟動 inotifywait 監(jiān)聽掛載目錄。
?在客戶端 A 上操作掛載目錄中的文件,可以被 inotifywait 感知。
?在客戶端 B 上操作掛載目錄中的文件,inotifywait 無法感知任何文件操作。
替代方案
一個可行的替代方案是使用 FAM, FAM 是一個用來監(jiān)聽文件或目錄的庫,全部在用戶態(tài)實現(xiàn),原理是在后臺運行一個 daemon,定時掃描目錄,獲取文件變化情況。
但是使用 FAM 存在以下幾個缺陷:
?需要自己寫程序調(diào)用 FAM 接口實現(xiàn)功能。
?對于文件數(shù)目很多的場景,使用該方案性能會較差,可能消耗大量資源,無法做到很好的實時性。
