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/cloud
lambat 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/cloud
di mount /mnt/cloud_cache
, yang menggunakan jalur lain, katakan /var/cache/cloud
sebagai 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-
file
in 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/file
ke/var/cache/cloud/file
dan sajikan dari cache.
Ketika saya menulis surat /mnt/cloud_cache/file
, saya ingin ini terjadi:
- Menulis
/var/cache/cloud/file
dan mencatat dalam jurnal yangfile
perlu ditulis kembali/mnt/cloud
- Tunggu penulisan untuk
/var/cache/cloud/file
diselesaikan dan / atau penulisan kembali sebelumnya/mnt/cloud
selesai - Salin
/var/cache/cloud/file
ke/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_cache
transparan 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/cloud
pada 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
nfs
atauafs
dan 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
Jawaban:
Coba gunakan catfs , sistem file caching sekering generik yang sedang saya kerjakan.
sumber
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
stat
danopen
masih lambat).sumber
Ini adalah semacam jawaban yang bodoh, karena saya tidak memiliki akses ke direktori cloud Amazon yang dapat digunakan untuk mengujinya. Tetapi dalam semangat "Bagaimana Melakukannya" : atur cloud Amazon untuk melayani NFS , lalu login dari jarak jauh ke server NFS yang menggunakan
cachefilesd
."Lebih mudah diucapkan daripada dilakukan ..."
sumber