ฉันจะล้างแคชไดเร็กทอรีหรือระบบไฟล์ที่เมาท์เพื่ออ่านและเขียนกลับได้อย่างไร?


22

บอกว่าผมติดบางส่วนการจัดเก็บเมฆ (Amazon Cloud ไดรฟ์ในกรณีของฉัน) /mnt/cloudกับลูกค้าที่ แต่เนื่องจากการอ่านและเขียนไฟล์โดยตรง/mnt/cloudนั้นช้าเพราะต้องผ่านอินเทอร์เน็ตฉันต้องการแคชไฟล์ที่ฉันกำลังอ่านและเขียนไปยังที่เก็บข้อมูลบนคลาวด์ เนื่องจากฉันอาจจะเขียนข้อมูลจำนวนมากในแต่ละครั้งแคชจึงควรอยู่บนดิสก์ของฉันไม่ใช่ใน RAM แต่ฉันไม่ต้องการจำลองที่เก็บข้อมูลคลาวด์ทั้งหมดบนดิสก์ของฉันเพราะดิสก์ของฉันอาจเล็กเกินไป

ดังนั้นฉันต้องการให้มีมุมมองแคชในการ/mnt/cloudติดตั้งที่/mnt/cloud_cacheใช้เส้นทางอื่นพูด/var/cache/cloudเป็นตำแหน่งแคช

ถ้าฉันอ่านตอนนี้/mnt/cloud_cache/fileฉันต้องการสิ่งต่อไปนี้เกิดขึ้น:

ตรวจสอบว่ามีการใช้แคชที่file/var/cache/cloud/file

  1. หากเก็บไว้: ตรวจสอบfileในแคชขึ้นไปวันโดยเรียก modtime และ / /mnt/cloudหรือการตรวจสอบจาก หากเป็นปัจจุบันให้บริการไฟล์จากแคชมิฉะนั้นไปที่ 2
  2. หากไม่มีแคชหรือแคชล้าสมัย/mnt/cloud/fileให้คัดลอกไปยัง/var/cache/cloud/fileและให้บริการจากแคช

เมื่อฉันเขียนถึง/mnt/cloud_cache/fileฉันต้องการสิ่งนี้เกิดขึ้น:

  1. เขียน/var/cache/cloud/fileและบันทึกลงในบันทึกประจำวันที่fileจำเป็นต้องเขียนกลับไป/mnt/cloud
  2. รอการเขียนที่/var/cache/cloud/fileจะทำและ / หรือการเขียนก่อนหน้ากลับไป/mnt/cloudที่จะแล้วเสร็จ
  3. คัดลอก/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

2
อยากรู้อยากเห็นถ้าคุณเคยพบวิธีแก้ปัญหา? กำลังมองหาเลเยอร์แคชที่คล้ายกันที่มีความต้องการคล้ายกันเป็นของคุณเอง
SS44

1
bitbucket.org/nikratio/s3qlทำสิ่งที่ฉันต้องการได้มากทีเดียว อย่างไรก็ตามโชคไม่ดีที่มันไม่เล่นกับ Amazon Cloud Drive โดยเฉพาะอย่างยิ่ง (ส่วนใหญ่เป็นความผิดของ ACD เนื่องจากไม่มีไคลเอ็นต์ Linux ที่ดี)
Flecto

ฉันเคยใช้ s3ql มาก่อน แต่การย้ายไปยัง ACD สำหรับไฟล์ของฉันดูเหมือนจะ จำกัด การใช้งานกับผู้ให้บริการนั้น พบปัญหาเกี่ยวกับความสอดคล้องของข้อมูลกับ s3ql เมื่อรวบรวมข้อมูล> 2TB RClone ดูเหมือนจะมีแนวโน้ม แต่ขาดชิ้นส่วนแคชที่สำคัญ
SS44

หากคุณสนใจอย่างจริงจัง - เราสามารถเขียนเป็น C ++ โดยใช้ tmpfs และ stat
GOST

คำตอบ:


3

ลองใช้catfsระบบไฟล์แคชฟิวส์ทั่วไปที่ฉันกำลังใช้งานอยู่


1
จากสิ่งที่ฉันเห็นจนถึงตอนนี้มันทำงานเหมือนมีเสน่ห์ ขอบคุณมาก!
Alfe

2

เป็นไปได้ที่จะใช้ FS-Cache / CacheFS เพื่อแคชระบบที่ติดตั้งฟิวส์โดยการเพิ่ม NFS ในทางอ้อมระหว่าง: หากฟิวส์เมาท์ของคุณอยู่บน / fusefs จากนั้นแบ่งปันให้กับตัวเองใน nfs โดยเขียนสิ่งนี้ใน / etc / exportfs:

/fusefs localhost(fsid=0)

ตอนนี้คุณสามารถทำได้:

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

และ / nfs จะเสนอการเข้าถึงแคช / ฟิวส์

ฉันใช้วิธีนี้กับ sshfs เป็น FS ด้านหลังมันใช้งานได้ดี

( แต่น่าเสียดายที่ความเร็วนี้เท่านั้นถึงการเข้าถึงเนื้อหาของแฟ้ม; เมตาดาต้าไฟล์ไม่ได้เก็บไว้ชั่วคราวเพื่อให้statและopenยังคงช้า)


1

นี่เป็นคำตอบที่โง่เขลาเพราะฉันไม่สามารถเข้าถึงไดเรกทอรีคลาวด์ของ Amazon ที่ใช้ทดสอบได้ แต่ใน"วิธีการทำมัน"จิตวิญญาณ: การตั้งค่าอะเมซอนคลาวด์ที่จะให้บริการ NFSแล้วเข้าสู่ระบบจากระยะไกลที่ใช้เซิร์ฟเวอร์ NFScachefilesd

"พูดง่ายกว่าทำ..."

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.