에 FUSE 클라이언트를 사용하여 클라우드 스토리지 (내 경우에는 Amazon Cloud Drive)를 마운트한다고 가정 해 보겠습니다 /mnt/cloud
. 그러나 /mnt/cloud
인터넷을 통해 이동해야하기 때문에 파일을 직접 읽고 쓰는 속도가 느리기 때문에 읽고있는 파일을 클라우드 저장소에 캐시하고 싶습니다. 한 번에 많은 데이터를 쓰고있을 수 있으므로 캐시는 RAM이 아닌 내 디스크에 있어야합니다. 그러나 디스크가 너무 작기 때문에 디스크에 전체 클라우드 저장소를 복제하고 싶지 않습니다.
캐싱 위치와 같은 다른 경로를 사용하는 에 /mnt/cloud
마운트 된 캐싱 된 뷰를 원합니다 ./mnt/cloud_cache
/var/cache/cloud
내가 지금 읽는다면 /mnt/cloud_cache/file
다음과 같은 일이 일어나기를 원합니다.
file
에 캐시되어 있는지 확인하십시오 /var/cache/cloud/file
.
- 캐시 된 경우 :
file
에서 modtime 및 / 또는 체크섬을 가져 와서 캐시 체크인 이 최신 상태입니다/mnt/cloud
. 최신 상태 인 경우 캐시에서 파일을 제공하고, 그렇지 않으면 2로 이동하십시오. - 캐시 나 캐시의 최신 밖으로없는 경우 복사
/mnt/cloud/file
에/var/cache/cloud/file
캐시에서를 제공합니다.
에 글을 쓸 때 /mnt/cloud_cache/file
이런 일이 일어나기를 원합니다.
- 에 쓰기
/var/cache/cloud/file
하는 저널에 기록file
요구가 다시 기록 할/mnt/cloud
- 작성하는 기다립니다
/var/cache/cloud/file
및 / 또는 이전 쓰기 백업 할 수 있습니다/mnt/cloud
완료 할을 - 복사
/var/cache/cloud/file
에/mnt/cloud
다음 요구 사항과 제약 조건이 있습니다.
- 무료 및 오픈 소스
- 캐시를 임의의 캐시 위치로 설정하는 기능
- 임의의 위치 (아마도 일부 FUSE 마운트 지점)를 캐시하는 기능
- 투명한 캐싱, 즉 사용
/mnt/cloud_cache
은 캐싱 메커니즘에 투명하며 다른 마운트 된 파일 시스템과 같이 작동합니다. - 다시 써야하는 것에 대한 기록 유지 (캐시에는 며칠 동안 원래 스토리지 위치에 다시 써야하는 많은 데이터가있을 수 있음)
- 다시 쓰여지거나 잠시 동안 액세스하지 않은 캐시 된 파일의 자동 삭제
/mnt/cloud
한 번에 한 명의 클라이언트 만 액세스/mnt/cloud
할 수 있기 때문에 일관성 (즉, 외부 변경 사항을에 반영 )은별로 중요하지 않습니다 .
기존 솔루션을 찾는 데 많은 시간을 보냈지 만 만족스러운 것을 찾지 못했습니다.
- FS-Cache 및 CacheFS ( https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt )는 파일 시스템
nfs
또는afs
파일 시스템 에서만 작동하는 것으로 보이며 다른 FUSE 파일을 캐시하는 방법을 모르겠습니다. 시스템 또는 일반 디렉토리. - bcache ( https://bcache.evilpiepirate.org/ )는 블록 장치에서만 작동하는 것으로 보입니다. 즉, 다른 FUSE 파일 시스템을 캐시 할 수 없습니다
- gcsfuse ( https://github.com/GoogleCloudPlatform/gcsfuse ) 이것이 내가 원하는 것을 정확하게 수행한다고 생각하지만 Google Cloud Storage와 통합되어 있습니다. 일반적으로 작동하려면 해킹하고 GCS에 대한 액세스를 지정된 마운트 포인트의 로컬 파일 액세스 또는 Amazon Cloud Drive에 대한 액세스로 변경해야합니다