मान लें कि मैं FUSE क्लाइंट के साथ कुछ क्लाउड स्टोरेज (मेरे मामले में अमेज़ॅन क्लाउड ड्राइव) माउंट करता हूं /mnt/cloud
। लेकिन क्योंकि फ़ाइलों को सीधे पढ़ना और लिखना /mnt/cloud
धीमा है क्योंकि इसे इंटरनेट पर जाना है, मैं उन फ़ाइलों को कैश करना चाहता हूं जो मैं पढ़ रहा हूं और क्लाउड स्टोरेज के लिए लिख रहा हूं। चूंकि मैं एक समय में बहुत अधिक डेटा लिख रहा हूं, इसलिए कैश को मेरी डिस्क पर बैठना चाहिए, न कि रैम में। लेकिन मैं अपनी डिस्क पर संपूर्ण क्लाउड स्टोरेज को दोहराना नहीं चाहता, क्योंकि मेरी डिस्क बहुत छोटी हो सकती है।
इसलिए मैं एक कैश्ड दृश्य को /mnt/cloud
माउंटेड पर रखना चाहता हूं /mnt/cloud_cache
, जो किसी अन्य पथ का उपयोग करता है, /var/cache/cloud
कैशिंग स्थान के रूप में कहें ।
यदि मैं अब पढ़ता /mnt/cloud_cache/file
हूं, तो मैं चाहता हूं कि निम्नलिखित घटित हों:
जांचें कि क्या file
कैश किया गया है /var/cache/cloud/file
।
- यदि कैश किया गया है:
file
कैश इन चेक -अप और अपडेट या / या चेकसम द्वारा अप-टू-डेट है/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/ ) केवल ब्लॉक डिवाइस के साथ काम करने लगता है, यानी किसी अन्य फ़ाइल सिस्टम को कैश नहीं कर सकता है
- gcsfuse ( https://github.com/GoogleCloudPlatform/gcsfuse ) मुझे लगता है कि यह वही है जो मैं चाहता हूं, लेकिन यह Google क्लाउड स्टोरेज के साथ एकीकृत है। इसे सामान्य रूप से काम करने के लिए, मुझे इसे हैक करना होगा और किसी भी पहुंच को जीसीएस में बदलकर स्थानीय फाइल एक्सेस को दिए गए माउंट-पॉइंट या अमेज़ॅन क्लाउड ड्राइव में एक्सेस करना होगा।