บอกว่าผมติดบางส่วนการจัดเก็บเมฆ (Amazon Cloud ไดรฟ์ในกรณีของฉัน) /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-แคชและ 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