Herhangi bir dizini veya bağlı dosya sistemini okumak ve yazmak için nasıl şeffaf bir şekilde önbelleğe alabilirim?


22

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.

  1. Ö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.
  2. Ö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:

  1. Geri yazılması gereken /var/cache/cloud/filebir dergiye yazın ve kaydedinfile/mnt/cloud
  2. Yazmaya bekleyin /var/cache/cloud/fileve / veya önceki yazma sırt yapılacak /mnt/cloudtamamlanması
  3. 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 nfsveya afsdosya 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

2
Hiç bir çözüm buldunuz mu merak ediyorsunuz? Benzer bir önbellek katmanı ile benzer bir görünümde kendinizinki gibi gerektirir.
SS44,

1
bitbucket.org/nikratio/s3ql istediğimi çok yapıyor. Bununla birlikte, ne yazık ki, özellikle Amazon Cloud Drive ile çok iyi oynamıyor (özellikle ACD'nin iyi bir Linux istemcisinin olmaması nedeniyle suçu)
Flecto

Geçmişte s3ql kullandım, ancak dosyalarım için ACD'ye geçtim, bu sağlayıcı ile kullanımını sınırlıyor gibiydi. > 2TB veri toplamalarında s3ql ile veri tutarlılığı ile ilgili problemlerle karşılaştınız. RClone umut verici görünüyor ama bu hayati önbellek parçasını kaçırıyor.
SS44

Bununla ciddi olarak ilgileniyorsanız - C ++ 'a tmpfs ve stat kullanarak yazabiliriz.
GOST

Yanıtlar:


3

Şu anda üzerinde çalıştığım genel bir sigorta önbellek dosya sistemi olan catfs'i kullanmayı deneyin .


1
Şimdiye kadar gördüğümden beri bir cazibe gibi çalışıyor. Çok teşekkürler!
Alfe

2

Sigorta montajlı bir sistemi önbelleğe almak için FS-Cache / CacheFS kullanmak mümkündür, bunlar arasında NFS dolaylı bir ekleme ekleyin: Sigorta montajınız / fusefs üzerindeyse, / etc / exportfs:

/fusefs localhost(fsid=0)

Şimdi bunu yapabilirsiniz:

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

ve / nfs / fusefs dosyasına önbelleklenmiş erişim sunacak.

Bu yaklaşımı sshfs ile arka FS olarak kullanıyorum, iyi çalışıyor.

(Ne yazık ki, bu yalnızca dosya içeriğine erişimi hızlandırır; dosya meta verileri önbelleğe alınmaz statve openhala yavaş kalır).


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.