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/cloud
yavaş 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/cloud
monte /mnt/cloud_cache
baş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:
file
Modtime 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/file
için/var/cache/cloud/file
ve önbellekten vermektedir.
Yazarken /mnt/cloud_cache/file
bunun olmasını istiyorum:
- Geri yazılması gereken
/var/cache/cloud/file
bir dergiye yazın ve kaydedinfile
/mnt/cloud
- Yazmaya bekleyin
/var/cache/cloud/file
ve / veya önceki yazma sırt yapılacak/mnt/cloud
tamamlanması - Kopya
/var/cache/cloud/file
iç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/cloud
bir 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
nfs
veyaafs
dosya 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