Diyelim ki bir FUSE istemcisiyle biraz bulut depolama alanı oluşturdum (benim durumumda Amazon Bulut Sürücüsü) /mnt/cloud. Ancak dosyaları okumak ve doğrudan yazmak /mnt/cloudyavaş olduğundan, internet üzerinden gitmek zorunda olduğundan, okuduğum ve yazdığım dosyaları bulut depolama alanına önbelleğe almak istiyorum. Bir seferde çok fazla veri yazıyor olabileceğimden, önbellek RAM’e değil diskime oturmalı. Ancak diskimdeki tüm bulut depolamayı kopyalamak istemiyorum, çünkü diskim çok küçük olabilir.
İçine bir önbelleğe görünüme sahip istiyorum Yani /mnt/cloudmonte /mnt/cloud_cachebaşka bir yol kullanan, demek /var/cache/cloudönbelleğe alma yeri olarak.
Şimdi okursam /mnt/cloud_cache/file, aşağıdakilerin olmasını istiyorum:
fileÖnbelleğe alınmış olup olmadığını kontrol edin /var/cache/cloud/file.
- Önbelleğe alınmışsa:
fileModtime ve / veya checksum öğesinden getirilerek önbellekte kontrol edin/mnt/cloud. Güncelse, dosyayı önbellekten sunun, aksi takdirde 2'ye gidin. - Önbelleğe veya önbellek güncelliğini dışarı Değilse: Kopyala
/mnt/cloud/fileiçin/var/cache/cloud/fileve önbellekten vermektedir.
Yazarken /mnt/cloud_cache/filebunun olmasını istiyorum:
- Geri yazılması gereken
/var/cache/cloud/filebir dergiye yazın ve kaydedinfile/mnt/cloud - Yazmaya bekleyin
/var/cache/cloud/fileve / veya önceki yazma sırt yapılacak/mnt/cloudtamamlanması - Kopya
/var/cache/cloud/fileiçin/mnt/cloud
Aşağıdaki gereksinimler ve kısıtlamalar var:
- Ücretsiz ve açık kaynak
- Önbelleği keyfi bir önbellek konumu belirleme yeteneği
- İsteğe bağlı bir yeri önbelleğe alma yeteneği (muhtemelen bazı FUSE bağlama noktaları)
- Şeffaf önbellekleme, yani kullanma
/mnt/cloud_cacheönbellekleme mekanizmasına karşı saydamdır ve diğer monte edilmiş dosya sistemleri gibi çalışır - Nelerin geri yazılması gerektiğinin kaydını tutmak (önbellek, günlerce orijinal saklama yerine geri yazılması gereken çok fazla veri alabilir)
- Geri yazılmış veya bir süre içinde erişilmemiş önbellek dosyalarının otomatik olarak silinmesi
- Tutarlılık (dış değişiklikleri yansıtmak gibi
/mnt/cloud) o kadar önemli değil, çünkü muhtemelen/mnt/cloudbir seferde yalnızca bir müşteriye erişeceğim , ancak olması güzel olurdu.
Mevcut çözümleri aramak için oldukça zaman harcadım, ancak tatmin edici bir şey bulamadım.
- FS-Cache ve CacheFS ( https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt ) yalnızca sistemle
nfsveyaafsdosya sistemleriyle çalışıyor gibi görünüyor ve başka bir FUSE dosyasını nasıl önbelleğe alacağımı bilmiyorum sistem veya herhangi bir genel dizin. - bcache ( https://bcache.evilpiepirate.org/ ) sadece blok cihazlarla çalışıyor gibi görünüyor, yani başka bir FUSE dosya sistemini önbelleğe alamıyor
- gcsfuse ( https://github.com/GoogleCloudPlatform/gcsfuse ) Sanırım tam olarak istediğim şeyi yapıyor ama Google Cloud Storage ile entegre. Genel olarak çalışmasını sağlamak için, hacklemem ve verilen bağlama noktasındaki yerel dosya erişimleri ile GCS'ye olan erişimleri veya Amazon Cloud Drive'a erişmeleri gerekecek