मैं किसी भी डायरेक्टरी या माउंटेड फाइल सिस्टम को पारदर्शी तरीके से कैसे पढ़ और लिख सकता हूँ?


22

मान लें कि मैं FUSE क्लाइंट के साथ कुछ क्लाउड स्टोरेज (मेरे मामले में अमेज़ॅन क्लाउड ड्राइव) माउंट करता हूं /mnt/cloud। लेकिन क्योंकि फ़ाइलों को सीधे पढ़ना और लिखना /mnt/cloudधीमा है क्योंकि इसे इंटरनेट पर जाना है, मैं उन फ़ाइलों को कैश करना चाहता हूं जो मैं पढ़ रहा हूं और क्लाउड स्टोरेज के लिए लिख रहा हूं। चूंकि मैं एक समय में बहुत अधिक डेटा लिख ​​रहा हूं, इसलिए कैश को मेरी डिस्क पर बैठना चाहिए, न कि रैम में। लेकिन मैं अपनी डिस्क पर संपूर्ण क्लाउड स्टोरेज को दोहराना नहीं चाहता, क्योंकि मेरी डिस्क बहुत छोटी हो सकती है।

इसलिए मैं एक कैश्ड दृश्य को /mnt/cloudमाउंटेड पर रखना चाहता हूं /mnt/cloud_cache, जो किसी अन्य पथ का उपयोग करता है, /var/cache/cloudकैशिंग स्थान के रूप में कहें ।

यदि मैं अब पढ़ता /mnt/cloud_cache/fileहूं, तो मैं चाहता हूं कि निम्नलिखित घटित हों:

जांचें कि क्या fileकैश किया गया है /var/cache/cloud/file

  1. यदि कैश किया गया है: fileकैश इन चेक -अप और अपडेट या / या चेकसम द्वारा अप-टू-डेट है /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-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 क्लाउड स्टोरेज के साथ एकीकृत है। इसे सामान्य रूप से काम करने के लिए, मुझे इसे हैक करना होगा और किसी भी पहुंच को जीसीएस में बदलकर स्थानीय फाइल एक्सेस को दिए गए माउंट-पॉइंट या अमेज़ॅन क्लाउड ड्राइव में एक्सेस करना होगा।

2
जिज्ञासु अगर आपको कभी कोई हल मिला? इसी तरह की कैशे की परत की तलाश करना आपके लिए आवश्यक है।
SS44

1
bitbucket.org/nikratio/s3ql मैं जो चाहता हूं, वह बहुत ज्यादा करता है। हालांकि, दुर्भाग्य से, यह विशेष रूप से अमेज़ॅन क्लाउड ड्राइव के साथ बहुत अच्छी तरह से नहीं खेलता है (मुख्यतः अच्छे लिनक्स क्लाइंट की कमी से एसीडी की गलती)
फेल्टो

मैंने स्वयं अतीत में s3ql का उपयोग किया है, लेकिन अपनी फ़ाइलों के लिए ACD से अधिक माइग्रेट होने के कारण ऐसा लगता है कि यह उस प्रदाता के साथ उपयोग करने के लिए सीमित है। जब डेटा संग्रह> 2TB के साथ डेटा संगति के साथ समस्याओं में चला गया। RClone होनहार लगता है लेकिन उस महत्वपूर्ण कैशिंग टुकड़े को गायब कर देता है।
एसएस 44

यदि आप इसमें गंभीरता से रुचि रखते हैं - हम इसे C ++ में लिख सकते हैं, tmpfs और stat का उपयोग कर सकते हैं।
GOST

जवाबों:


3

कैटफ़ का उपयोग करने का प्रयास करें , एक सामान्य फ्यूज कैशिंग फाइल सिस्टम जो मैं वर्तमान में काम कर रहा हूं।


1
अब मैं जो देख रहा हूं, वह एक आकर्षण की तरह काम करता है। आपका बहुत बहुत धन्यवाद!
एल्फ

2

एक फ्यूज-माउंटेड सिस्टम को कैश करने के लिए एफएस-कैश / कैशेफ़ का उपयोग करना संभव है, एनएफएस अप्रत्यक्ष इनबेटन को जोड़कर: यदि आपका फ्यूज़ माउंट / फ़्यूसेफ़्स पर है, तो इसे / etc / exportfs में लिखकर अपने आप को nfs पर साझा करें:

/fusefs localhost(fsid=0)

अब आप यह कर सकते हैं:

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

और / nfs / fusefs के लिए कैश्ड पहुँच प्रदान करेगा।

मैं पीछे FS के रूप में sshfs के साथ इस दृष्टिकोण का उपयोग कर रहा हूं, यह अच्छी तरह से काम करता है।

(दुर्भाग्य से, यह केवल फ़ाइल सामग्री तक पहुंच को गति देता है; फ़ाइल मेटाडेटा को कैश नहीं किया गया है statऔर openअभी भी धीमा है)।


1

यह एक अज्ञानी प्रकार का उत्तर है, क्योंकि मैंने अमेजन क्लाउड निर्देशिका तक पहुंच नहीं बनाई है जिसके साथ इसका परीक्षण किया जाए। लेकिन "यह कैसे करना है" भावना में: एनएफएस की सेवा के लिए अमेज़ॅन क्लाउड सेट करें , फिर उस एनएफएस सर्वर का उपयोग करके दूरस्थ रूप से लॉगिन करेंcachefilesd

"कहना आसान है करना मुश्किल..."

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.