Jak mogę transparentnie buforować dowolny katalog lub podłączony system plików w celu odczytu i zapisu?


22

Załóżmy, że zamontowałem trochę pamięci w chmurze (w moim przypadku Amazon Cloud Drive) za pomocą klienta FUSE pod adresem /mnt/cloud. Ale ponieważ odczytywanie i zapisywanie plików bezpośrednio do nich /mnt/cloudjest powolne, ponieważ musi ono odbywać się przez Internet, chcę buforować pliki, z których czytam i zapisuję do pamięci w chmurze. Ponieważ mogę jednocześnie zapisywać wiele danych, pamięć podręczna powinna znajdować się na moim dysku, a nie w pamięci RAM. Ale nie chcę replikować całego magazynu w chmurze na moim dysku, ponieważ mój dysk może być za mały.

Chcę więc mieć /mnt/cloudzamontowany widok buforowany /mnt/cloud_cache, który używa innej ścieżki, powiedzmy /var/cache/cloudjako lokalizację buforowania.

Jeśli teraz czytam /mnt/cloud_cache/file, chcę, aby wydarzyło się:

Sprawdź, czy filejest buforowany w /var/cache/cloud/file.

  1. Jeśli buforowane: filePamięć podręczna odprawy jest aktualna, pobierając modtime i / lub sumę kontrolną z /mnt/cloud. Jeśli jest aktualny, podaj plik z pamięci podręcznej, w przeciwnym razie przejdź do 2.
  2. Jeśli nie jest w pamięci podręcznej lub pamięć podręczna jest nieaktualna: skopiuj /mnt/cloud/file/var/cache/cloud/filei udostępnij z pamięci podręcznej.

Kiedy piszę do /mnt/cloud_cache/file, chcę, aby tak się stało:

  1. Pisz /var/cache/cloud/filei pisz w dzienniku, filektóry należy odpisać/mnt/cloud
  2. Poczekaj na zakończenie /var/cache/cloud/filezapisu i / lub na wcześniejsze zapisywanie wstecz/mnt/cloud
  3. Skopiuj /var/cache/cloud/filedo/mnt/cloud

Mam następujące wymagania i ograniczenia:

  • Darmowe i otwarte oprogramowanie
  • Możliwość ustawienia pamięci podręcznej dowolnej lokalizacji pamięci podręcznej
  • Możliwość buforowania dowolnej lokalizacji (prawdopodobnie jakiś punkt montowania FUSE)
  • Przejrzyste buforowanie, tzn. Użycie /mnt/cloud_cachejest przezroczyste dla mechanizmu buforowania i działa jak każdy inny zamontowany system plików
  • Prowadzenie rejestru tego, co należy zapisać (pamięć podręczna może uzyskać wiele danych, które należy zapisać w pierwotnym miejscu przechowywania w ciągu kilku dni)
  • Automatyczne usuwanie zapisanych w pamięci podręcznej plików, do których wcześniej nie uzyskano dostępu
  • Spójność (tj. Odzwierciedlająca zmiany zewnętrzne /mnt/cloud) nie jest niezwykle ważna, ponieważ prawdopodobnie będę mieć dostęp tylko do jednego klienta /mnt/cloudna raz, ale byłoby miło mieć.

Spędziłem sporo czasu na poszukiwaniu istniejących rozwiązań, ale nie znalazłem nic satysfakcjonującego.


2
Ciekawe, czy kiedykolwiek znalazłeś rozwiązanie? Szukanie podobnej warstwy buforowania z podobnymi wymaga jak własnej.
SS44

1
bitbucket.org/nikratio/s3ql robi prawie wszystko, co chcę. Niestety, nie działa szczególnie ładnie z Amazon Cloud Drive (głównie wina ACD z powodu braku dobrego klienta Linux)
Flecto

Sam używałem s3ql w przeszłości, ale migracja do ACD dla moich plików zdawała się ograniczać jego użycie z tym dostawcą. Wystąpiły problemy z spójnością danych z s3ql, gdy kolekcje danych> 2 TB. RClone wydaje się obiecujący, ale brakuje mu niezbędnego fragmentu pamięci podręcznej.
SS44

Jeśli jesteś tym bardzo zainteresowany - możemy napisać to w C ++, używając tmpfs i stat.
GOST

Odpowiedzi:


3

Spróbuj użyć catfs , ogólnego systemu plików buforującego bezpieczniki, nad którym obecnie pracuję.


1
Z tego, co widzę do tej pory, działa jak urok. Wielkie dzięki!
Alfe

2

Możliwe jest użycie FS-Cache / CacheFS do buforowania systemu zamontowanego na bezpieczniku, poprzez dodanie pośrednictwa NFS pomiędzy: Jeśli twoje mocowanie bezpiecznika jest włączone / fusefs, to udostępnij je sobie na nfs, pisząc to w / etc / exportfs:

/fusefs localhost(fsid=0)

Teraz możesz to zrobić:

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

i / nfs zaoferuje dostęp do / fusefs w pamięci podręcznej.

Używam tego podejścia z sshfs jako back FS, działa to ładnie.

(Niestety, to tylko przyspiesza dostęp do zawartości pliku; metadane pliku nie są buforowane stati opennadal są wolne).


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.