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.
- 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. - 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:
- Menulis
/var/cache/cloud/filedan mencatat dalam jurnal yangfileperlu ditulis kembali/mnt/cloud - Tunggu penulisan untuk
/var/cache/cloud/filediselesaikan dan / atau penulisan kembali sebelumnya/mnt/cloudselesai - 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.
- FS-Cache dan CacheFS ( https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt ) tampaknya hanya berfungsi dengan sistem file
nfsatauafsdan saya tidak tahu cara membuatnya cache file FUSE lain sistem atau direktori umum apa pun. - bcache ( https://bcache.evilpiepirate.org/ ) tampaknya hanya berfungsi dengan perangkat blok, yaitu tidak dapat menembolok sistem file FUSE lain
- gcsfuse ( https://github.com/GoogleCloudPlatform/gcsfuse ) Saya pikir ini tepat seperti yang saya inginkan, tetapi terintegrasi dengan Google Cloud Storage. Untuk membuatnya berfungsi secara umum, saya harus meretasnya dan mengubah akses ke GCS ke akses file lokal di titik-mount yang diberikan atau akses ke Amazon Cloud Drive