如何透明地快取任何目錄或已安裝的檔案系統以進行讀取和寫入?

如何透明地快取任何目錄或已安裝的檔案系統以進行讀取和寫入?

假設我使用 FUSE 客戶端安裝了一些雲端儲存(在我的例子中是 Amazon Cloud Drive)/mnt/cloud。但是,由於直接讀取和寫入檔案的/mnt/cloud速度很慢,因為它必須通過互聯網,所以我想快取正在讀取和寫入雲端儲存的檔案。由於我可能一次寫入大量數據,因此快取應該位於我的磁碟上,而不是 RAM 中。但我不想將整個雲端儲存複製到我的磁碟上,因為我的磁碟可能太小了。

所以我想在/mnt/cloudMounted at中有一個快取視圖/mnt/cloud_cache,它使用另一個路徑,例如/var/cache/cloud快取位置。

如果我現在讀到/mnt/cloud_cache/file,我希望發生以下情況:

檢查是否file緩存在/var/cache/cloud/file.

  1. 如果已快取:file透過從 中取得 modtime 和/或校驗和來檢查快取是否是最新的/mnt/cloud。如果是最新的,則從快取中提供該文件,否則轉到 2。
  2. 如果未快取或快取已過期:複製/mnt/cloud/file到快取/var/cache/cloud/file並從快取中提供服務。

當我寫信給 時/mnt/cloud_cache/file,我希望發生這種情況:

  1. 寫入並記錄在需要寫回的/var/cache/cloud/file日誌中file/mnt/cloud
  2. 等待寫入/var/cache/cloud/file完成和/或之前的寫回/mnt/cloud完成
  3. 複製/var/cache/cloud/file/mnt/cloud

我有以下要求和限制:

  • 免費和開源
  • 能夠將快取設定為任意快取位置
  • 能夠快取任意位置(可能是某個 FUSE 安裝點)
  • 透明緩存,即使用/mnt/cloud_cache對緩存機制是透明的,並且像任何其他安裝的檔案系統一樣工作
  • 記錄需要寫回的內容(快取可能會在幾天內獲得大量需要寫回原始儲存位置的資料)
  • 自動刪除已寫回或一段時間未訪問的快取文件
  • 一致性(即反映對 的外部變更)並不是非常重要,因為我可能一次/mnt/cloud只有一個客戶端訪問,但如果有的話那就太好了。/mnt/cloud

我花了相當長的時間尋找現有的解決方案,但沒有找到任何令人滿意的解決方案。

答案1

嘗試使用貓夫,我目前正在開發的通用保險絲快取檔案系統。

答案2

可以使用FS-Cache/CacheFS 來快取已安裝熔斷器的系統,方法是在兩者之間添加NFS 間接:如果您的熔斷器安裝在/fusefs 上,則透過在/etc/exportfs 中寫入以下內容,在nfs 上將其分享給自己:

/fusefs localhost(fsid=0)

現在你可以這樣做:

mount -t nfs -o fsc localhost:/fusefs /nfs systemctl start cachefilesd

/nfs 將提供對 /fusefs 的快取存取。

我使用這種方法,使用 sshfs 作為後台 FS,效果很好。

(不幸的是,這只會加快文件內容的存取速度;文件元資料不會被緩存,因此stat仍然open很慢)。

答案3

這是一種無知的答案,因為我無法存取用於測試它的亞馬遜雲目錄。但在“怎麼做”精神:設定亞馬遜雲端服務 NFS, 然後使用遠端登入到該 NFS 伺服器cachefilesd

“說起來容易做起來難…”

相關內容