Làm thế nào tôi có thể lưu trữ trong suốt bất kỳ thư mục hoặc hệ thống tệp được gắn để đọc và ghi lại?


22

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/cloudchậ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/cloudgọ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.

  1. Nếu được lưu trong bộ nhớ cache: Kiểm tra filebộ 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.
  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/filevà 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:

  1. Viết /var/cache/cloud/filevà ghi lại trong một tạp chí filecần phải viết lại/mnt/cloud
  2. Đợi cho việc viết /var/cache/cloud/filehoàn thành và / hoặc viết lại trước đó /mnt/cloudđể hoàn thành
  3. Sao chép /var/cache/cloud/filevà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_cachelà 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/cloudtạ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 nfshoặc afshệ 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

2
Tò mò nếu bạn đã bao giờ tìm thấy một giải pháp? Tìm kiếm một lớp bộ đệm tương tự với yêu cầu tương tự như của riêng bạn.
SS44

1
bitbucket.org/nikratio/s3ql thực hiện khá nhiều thứ tôi muốn. Tuy nhiên, thật không may, cụ thể là nó không chơi quá độc đáo với Amazon Cloud Drive (chủ yếu là lỗi của ACD do thiếu ứng dụng khách Linux tốt)
Flecto

Trước đây tôi đã từng sử dụng s3ql, nhưng việc chuyển sang ACD cho các tệp của tôi dường như hạn chế sử dụng với nhà cung cấp đó. Đã gặp vấn đề với tính nhất quán dữ liệu với s3ql khi bộ sưu tập dữ liệu> 2TB. RClone có vẻ đầy hứa hẹn nhưng thiếu mảnh bộ nhớ đệm quan trọng đó.
SS44

Nếu bạn thực sự quan tâm đến điều đó - chúng ta có thể viết nó bằng C ++, sử dụng tmpfs và stat.
GOST

Câu trả lời:


3

Hãy thử sử dụng catfs , một hệ thống tập tin bộ nhớ đệm cầu chì chung mà tôi hiện đang làm việc.


1
Từ những gì tôi thấy cho đến bây giờ nó hoạt động như một bùa mê. Cảm ơn rất nhiều!
Alfe

2

Có thể sử dụng FS-Cache / CacheFS để lưu trữ hệ thống gắn với cầu chì, bằng cách thêm một phần bổ trợ NFS vào giữa: Nếu ngàm cầu chì của bạn được bật / fusefs, sau đó chia sẻ nó cho bạn trên nfs bằng cách viết cái này vào / etc / exportfs:

/fusefs localhost(fsid=0)

Bây giờ bạn có thể làm điều này:

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

và / nfs sẽ cung cấp quyền truy cập vào bộ nhớ cache vào / fusefs.

Tôi đang sử dụng phương pháp này với sshfs là FS phía sau, nó hoạt động độc đáo.

(Thật không may, điều này chỉ tăng tốc truy cập nội dung tệp; siêu dữ liệu tệp không được lưu trong bộ nhớ cache statopenvẫn còn chậm).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.