Bagaimana saya bisa secara transparan melakukan cache direktori atau sistem file yang dipasang untuk dibaca dan ditulis kembali?

22

Katakanlah saya memasang beberapa penyimpanan cloud (Amazon Cloud Drive dalam kasus saya) dengan klien FUSE di /mnt/cloud. Tetapi karena membaca dan menulis file secara langsung menjadi /mnt/cloudlambat karena harus melalui internet, saya ingin men-cache file yang saya baca dan menulis ke penyimpanan cloud. Karena saya mungkin menulis banyak data sekaligus, cache harus diletakkan di disk saya dan bukan di RAM. Tetapi saya tidak ingin mereplikasi seluruh penyimpanan cloud pada disk saya, karena disk saya mungkin terlalu kecil.

Jadi saya ingin memiliki tampilan cache /mnt/clouddi mount /mnt/cloud_cache, yang menggunakan jalur lain, katakan /var/cache/cloudsebagai lokasi caching.

Jika saya sekarang membaca /mnt/cloud_cache/file, saya ingin yang berikut terjadi:

Periksa apakah di file-cache di /var/cache/cloud/file.

  1. Jika di-cache: Check- filein cache terbaru dengan mengambil modtime dan / atau checksum dari /mnt/cloud. Jika up-to-date, sajikan file dari cache, jika tidak pergi ke 2.
  2. Jika tidak di-cache atau cache sudah kedaluwarsa: Salin /mnt/cloud/fileke /var/cache/cloud/filedan sajikan dari cache.

Ketika saya menulis surat /mnt/cloud_cache/file, saya ingin ini terjadi:

  1. Menulis /var/cache/cloud/filedan mencatat dalam jurnal yang fileperlu ditulis kembali/mnt/cloud
  2. Tunggu penulisan untuk /var/cache/cloud/filediselesaikan dan / atau penulisan kembali sebelumnya /mnt/cloudselesai
  3. Salin /var/cache/cloud/fileke/mnt/cloud

Saya memiliki persyaratan dan batasan berikut:

  • Sumber gratis dan terbuka
  • Kemampuan untuk mengatur cache lokasi cache sewenang-wenang
  • Kemampuan untuk menembolok lokasi yang sewenang-wenang (mungkin beberapa titik pemasangan FUSE)
  • Caching transparan, yaitu menggunakan /mnt/cloud_cachetransparan untuk mekanisme caching dan berfungsi seperti sistem file lain yang di-mount
  • Menyimpan catatan tentang apa yang perlu ditulis kembali (cache mungkin mendapatkan banyak data yang perlu ditulis kembali ke lokasi penyimpanan asli selama beberapa hari)
  • Penghapusan otomatis file cache yang telah ditulis kembali atau belum diakses dalam beberapa saat
  • Konsistensi (yaitu mencerminkan perubahan eksternal /mnt/cloud) tidak terlalu penting, karena saya mungkin hanya akan memiliki satu klien mengakses /mnt/cloudpada satu waktu, tetapi akan menyenangkan untuk memilikinya.

Saya telah menghabiskan beberapa waktu mencari solusi yang ada, tetapi belum menemukan sesuatu yang memuaskan.

Flecto
sumber
2
Penasaran apakah Anda pernah menemukan solusi? Mencari lapisan cache'ing yang sama dengan yang serupa membutuhkan Anda.
SS44
1
bitbucket.org/nikratio/s3ql melakukan apa yang saya inginkan. Namun, sayangnya, itu tidak bermain terlalu baik dengan Amazon Cloud Drive pada khususnya (terutama kesalahan ACD oleh kurangnya klien Linux yang baik)
Flecto
Saya pernah menggunakan s3ql di masa lalu, tetapi bermigrasi ke ACD untuk file saya tampaknya membatasi penggunaannya dengan penyedia itu. Apakah mengalami masalah dengan konsistensi data dengan s3ql ketika pengumpulan data> 2TB. RClone tampaknya menjanjikan tetapi melewatkan bagian caching yang vital itu.
SS44
Jika Anda benar-benar tertarik pada hal itu - kita dapat menulisnya dalam C ++, menggunakan tmpfs dan stat.
GOST

Jawaban:

3

Coba gunakan catfs , sistem file caching sekering generik yang sedang saya kerjakan.

khc
sumber
1
Dari apa yang saya lihat hingga sekarang berfungsi seperti pesona. Terima kasih banyak!
Alfe
2

Dimungkinkan untuk menggunakan FS-Cache / CacheFS untuk men-cache sistem yang dipasang sekring, dengan menambahkan inirection NFS inbetween: Jika mount sekering Anda pada / fusefs, kemudian bagikan kepada diri Anda sendiri pada nfs dengan menulis ini di / etc / exportfs:

/fusefs localhost(fsid=0)

Sekarang Anda bisa melakukan ini:

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

dan / nfs akan menawarkan akses cache ke / fusefs.

Saya menggunakan pendekatan ini dengan sshfs sebagai back FS, ini berfungsi dengan baik.

(Sayangnya, ini hanya mempercepat akses konten file; metadata file tidak di-cache begitu statdan openmasih lambat).

Erik Carstensen
sumber