Giả sử tôi gắn một số bộ lưu trữ đám mây (Amazon Cloud Drive trong trường hợp của tôi) với ứng dụng khách FUSE tại /mnt/cloud
. Nhưng vì đọc và ghi tệp trực tiếp đến /mnt/cloud
chậm vì phải truy cập internet, tôi muốn lưu trữ các tệp mà tôi đang đọc và ghi vào bộ nhớ đám mây. Vì tôi có thể đang viết rất nhiều dữ liệu cùng một lúc, bộ đệm sẽ nằm trên đĩa của tôi chứ không phải trong RAM. Nhưng tôi không muốn sao chép toàn bộ lưu trữ đám mây trên đĩa của mình, vì đĩa của tôi có thể quá nhỏ.
Vì vậy, tôi muốn có một chế độ xem được lưu trong bộ nhớ cache /mnt/cloud
được gắn kết /mnt/cloud_cache
, sử dụng một đường dẫn khác, /var/cache/cloud
gọi là vị trí bộ đệm.
Nếu bây giờ tôi đọc /mnt/cloud_cache/file
, tôi muốn điều sau đây xảy ra:
Kiểm tra xem có file
được lưu trữ tại /var/cache/cloud/file
.
- Nếu được lưu trong bộ nhớ cache: Kiểm tra
file
bộ nhớ cache được cập nhật bằng cách tìm nạp modtime và / hoặc tổng kiểm tra từ đó/mnt/cloud
. Nếu cập nhật, hãy phân phát tệp từ bộ đệm, nếu không, hãy chuyển đến 2. - Nếu không được lưu trữ hoặc bộ nhớ cache là out-of-date: Sao chép
/mnt/cloud/file
đến/var/cache/cloud/file
và phục vụ nó từ bộ nhớ cache.
Khi tôi viết thư /mnt/cloud_cache/file
, tôi muốn điều này xảy ra:
- Viết
/var/cache/cloud/file
và ghi lại trong một tạp chífile
cần phải viết lại/mnt/cloud
- Đợi cho việc viết
/var/cache/cloud/file
hoàn thành và / hoặc viết lại trước đó/mnt/cloud
để hoàn thành - Sao chép
/var/cache/cloud/file
vào/mnt/cloud
Tôi có các yêu cầu và ràng buộc sau:
- Nguồn mở và miễn phí
- Khả năng đặt bộ đệm một vị trí bộ đệm tùy ý
- Khả năng lưu trữ một vị trí tùy ý (có thể là một số điểm gắn kết FUSE)
- Bộ nhớ đệm trong suốt, tức là sử dụng
/mnt/cloud_cache
là trong suốt đối với cơ chế lưu trữ và hoạt động như mọi hệ thống tệp được gắn kết khác - Giữ một bản ghi về những gì cần ghi lại (bộ đệm có thể nhận được rất nhiều dữ liệu cần được ghi lại vào vị trí lưu trữ ban đầu trong nhiều ngày)
- Tự động xóa các tệp đã lưu trong bộ nhớ cache đã được ghi lại hoặc không được truy cập trong một thời gian
- Tính nhất quán (nghĩa là phản ánh các thay đổi bên ngoài
/mnt/cloud
) không quan trọng lắm, vì tôi có thể sẽ chỉ có một khách hàng truy cập/mnt/cloud
tại một thời điểm, nhưng sẽ rất tuyệt nếu có.
Tôi đã dành khá nhiều thời gian để tìm kiếm các giải pháp hiện có, nhưng không tìm thấy bất cứ điều gì thỏa đáng.
- FS-Cache và CacheFS ( https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt ) dường như chỉ hoạt động với
nfs
hoặcafs
hệ thống tệp và tôi không biết cách tạo bộ đệm cho tệp FUSE khác hệ thống hoặc bất kỳ thư mục chung. - bcache ( https://bcache.evilpiepirate.org/ ) dường như chỉ hoạt động với các thiết bị khối, tức là không thể lưu trữ hệ thống tệp FUSE khác
- gcsfuse ( https://github.com/GoogleCloudPl Platform / gcsfuse ) Tôi nghĩ rằng điều này thực hiện chính xác những gì tôi muốn, nhưng nó được tích hợp với Google Cloud Storage. Để làm cho nó hoạt động chung, tôi sẽ phải hack nó và thay đổi mọi quyền truy cập vào GCS thành quyền truy cập tệp cục bộ trong điểm gắn kết nhất định hoặc truy cập vào Amazon Cloud Drive