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/cloud
jest 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/cloud
zamontowany widok buforowany /mnt/cloud_cache
, który używa innej ścieżki, powiedzmy /var/cache/cloud
jako lokalizację buforowania.
Jeśli teraz czytam /mnt/cloud_cache/file
, chcę, aby wydarzyło się:
Sprawdź, czy file
jest buforowany w /var/cache/cloud/file
.
- Jeśli buforowane:
file
Pamięć 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. - Jeśli nie jest w pamięci podręcznej lub pamięć podręczna jest nieaktualna: skopiuj
/mnt/cloud/file
ją/var/cache/cloud/file
i udostępnij z pamięci podręcznej.
Kiedy piszę do /mnt/cloud_cache/file
, chcę, aby tak się stało:
- Pisz
/var/cache/cloud/file
i pisz w dzienniku,file
który należy odpisać/mnt/cloud
- Poczekaj na zakończenie
/var/cache/cloud/file
zapisu i / lub na wcześniejsze zapisywanie wstecz/mnt/cloud
- Skopiuj
/var/cache/cloud/file
do/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_cache
jest 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/cloud
na 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.
- Wygląda na to, że FS-Cache i CacheFS ( https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt ) działają tylko z systemami plików
nfs
lubafs
nie wiem, jak sprawić, by buforował inny plik FUSE system lub dowolny katalog ogólny. - bcache ( https://bcache.evilpiepirate.org/ ) wydaje się działać tylko z urządzeniami blokowymi, tzn. nie może buforować innego systemu plików FUSE
- gcsfuse ( https://github.com/GoogleCloudPlatform/gcsfuse ) Myślę, że robi to dokładnie to, czego chcę, ale jest zintegrowane z Google Cloud Storage. Aby ogólnie działało, musiałbym go zhakować i zmienić dostęp do GCS na lokalny dostęp do plików w danym punkcie montowania lub dostęp do Amazon Cloud Drive
Odpowiedzi:
Spróbuj użyć catfs , ogólnego systemu plików buforującego bezpieczniki, nad którym obecnie pracuję.
źródło
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
stat
iopen
nadal są wolne).źródło
To jest ignorancka odpowiedź, ponieważ nie mam dostępu do katalogu chmury Amazon, z którym można by ją przetestować. Ale w duchu „Jak to zrobić” : skonfiguruj chmurę Amazon do obsługi NFS , a następnie zaloguj się zdalnie do tego serwera NFS przy użyciu
cachefilesd
."Łatwiej powiedzieć niż zrobić..."
źródło