क्या ZFS में गौ-प्रतियां बनाने का कोई तरीका है?


14

मैं कुछ फ़ाइलों / निर्देशिकाओं की गाय-प्रतियां बनाने की कोशिश कर रहा हूं, लेकिन मुझे जिन कई तरीकों के बारे में पता है, वे सभी उप-इष्टतम लगते हैं।

उदाहरण के लिए, btrfs cp --reflink=autoजल्दी से फाइलों की गाय-प्रतियों का उपयोग कर सकते हैं।

मैंने क्या कोशिश की है:

  1. सिम्बलिंक्स: नो गुड। नाम बदली गई फ़ाइल, टूटी लिंक।
  2. हार्डलिंक: बेहतर, लेकिन फिर भी अच्छा नहीं है। एक फ़ाइल में परिवर्तन दूसरे को बदल देगा, और मुझे जरूरी नहीं कि दूसरी फ़ाइल को बदलना चाहिए।
  3. डेटासेट का एक स्नैपशॉट बनाएं, फिर स्नैपशॉट को क्लोन करें: यह काम कर सकता है, लेकिन अच्छी तरह से नहीं। अक्सर मैं पूरे डेटासेट की कॉपी या किसी अन्य डेटासेट की तरह काम करने के लिए कॉपी की तलाश नहीं करता। तब क्लोन / स्नैपशॉट / मूल के बीच माता-पिता / बच्चे के रिश्ते होते हैं, जो कि जैसा कि मैं समझता हूं कि यह कठिन है, अगर तोड़ना असंभव नहीं है।
  4. zfs send/receiveएक नए डेटासेट में डेटासेट का उपयोग करना , और उसे सक्षम करना : यह माता-पिता / बच्चे के संबंधों को क्लोन का उपयोग करने से बचाता है, लेकिन फिर भी अनावश्यक रूप से एक और डेटासेट बनाता है, और अभी भी 100% पढ़ने के लिए फ़ाइलों में शामिल सुस्ती से ग्रस्त है। लिखित के बजाय ब्लॉक फिर से संदर्भित।
  5. फ़ाइलों को कॉपी करें और अपना काम करने दें: यह काम करता है, लेकिन धीमा है क्योंकि फ़ाइल (फाइलों) को 100% पढ़ा जाना है और फिर ब्लॉक को फिर से लिखने के बजाय संदर्भित किया जाता है।

ज़फ़्स की सुस्ती / प्राप्त करना और शारीरिक रूप से नकल या rsyncing को और तेज़ कर दिया जाता है क्योंकि अधिकांश चीजें संपीड़ित होती हैं, और पढ़ने के दौरान विघटित होना पड़ता है, फिर डुप्लिकेट किक से पहले डुप्लिकेट ब्लॉक को संदर्भित करने के लिए संपीड़ित किया जाता है।

मेरे सभी शोधों में, मुझे btrfs में --reflink की सादगी से मिलता-जुलता कुछ भी नहीं मिला है।

तो, क्या ZFS में गौ-प्रति बनाने का कोई तरीका है? या "शारीरिक रूप से" नकल करना और अपने काम को एकमात्र वास्तविक विकल्प देना है?

जवाबों:


4

मुझे लगता है कि विकल्प 3 जैसा कि आपने ऊपर वर्णित किया है, शायद आपकी सबसे अच्छी शर्त है। जो आप चाहते हैं, उसके साथ सबसे बड़ी समस्या यह है कि जेडएफएस वास्तव में इस कॉपी-ऑन-राइट को डेटासेट / स्नैपशॉट स्तर पर ही संभालता है।

जब तक आपने यह सत्यापित नहीं कर लिया है कि यह आपके सटीक वातावरण के साथ अच्छी तरह से काम करता है, तब तक मैं दृढ़ता से डिडअप का उपयोग करने से बचने का सुझाव दूंगा। मेरे पास व्यक्तिगत अनुभव है जब तक कि एक और उपयोगकर्ता या वीएम स्टोर को स्थानांतरित नहीं किया जाता है, तब तक यह बहुत अच्छा होता है, और फिर यह एक प्रदर्शन चट्टान से गिर जाता है और बहुत सारी समस्याओं का कारण बनता है। सिर्फ इसलिए कि ऐसा लगता है कि यह आपके पहले दस उपयोगकर्ताओं के साथ बहुत अच्छा काम कर रहा है, ग्यारहवें (या बारहवें, या तेरहवें, या जो कुछ भी) को जोड़ने पर आपकी मशीन गिर सकती है। यदि आप इस मार्ग पर जाना चाहते हैं, तो सुनिश्चित करें कि आपके पास एक परीक्षण वातावरण है जो आपके उत्पादन वातावरण की बिल्कुल नकल करता है और यह उस वातावरण में अच्छी तरह से काम करता है।

विकल्प 3 पर वापस, आपको फ़ाइल सिस्टम के प्रत्येक पेड़ को पकड़ने के लिए एक विशिष्ट डेटा सेट की आवश्यकता होगी जिसे आप इस तरह से प्रबंधित करना चाहते हैं। एक बार जब आप इसे स्थापित कर लेते हैं और शुरू में आबाद हो जाते हैं, तो अपना स्नैपशॉट लें (एक प्रति डेटासेट जो थोड़ा अलग होगा) और फिर क्लोन में बढ़ावा दें। मूल डेटासेट को फिर कभी न छुएं।

हां, इस समाधान में समस्याएं हैं। मैं यह नहीं कह रहा हूँ, लेकिन ZFS के प्रतिबंधों को देखते हुए, यह अभी भी शायद सबसे अच्छा है। मैंने किसी को क्लोन का उपयोग करने के लिए इस संदर्भ को प्रभावी ढंग से पाया: http://thegreyblog.blogspot.com/2009/05/sparing-disk-space-with-zfs-clones.html

मैं btrfs से परिचित नहीं हूँ, लेकिन अगर यह उन विकल्पों का समर्थन करता है जो आप चाहते हैं, तो क्या आपने इन सर्वरों का समर्थन करने के लिए एक अलग सर्वर स्थापित करने पर विचार किया है, उस सर्वर पर लिनक्स और btrfs का उपयोग कर रहे हैं?


यह विचार के लिए अच्छा भोजन है। यदि "मास्टर" (और इस प्रकार बच्चों) को पर्याप्त बड़े बदलावों की आवश्यकता होती है, तो मास्टर का एक क्लोन बनाया जा सकता है, सुधार किया जा सकता है, नए मास्टर पद पर पदोन्नत किया जा सकता है, फिर किसी भी सहायक क्लोन जो बहुत अधिक भिन्न हैं, उनमें rsync- निर्धारित विविधताएं हो सकती हैं एक तरफ, नए मास्टर से क्लोन नष्ट हो गए और पुन: व्यवस्थित हो गए, और परिवर्तनों ने आयोजित-अलग सामग्री से वापस खींच लिया। यह एक महान समाधान की तरह नहीं लग रहा है, लेकिन यह एक अच्छा समाधान की तरह दिखना शुरू कर रहा है, और ओवरडैप सक्षम होने के ओवरहेड को बचाता है। इस पर ज्यादा सोचना चाहिए।
हत्यारे

हाँ, यह एक महान समाधान नहीं है, लेकिन यह आपके द्वारा वर्णित कम से कम दर्दनाक लगता है और मैं किसी अन्य के बारे में सोचने में सक्षम नहीं था।
jlp

आपके बिंदु का सारांश github.com/zfsonlinux/zfs/issues/405 द्वारा सचित्र है , ZFS फ़ाइल-आधारित गाय का समर्थन नहीं करता है, केवल डाटासेट गाय, इसलिए BTRFS के बराबर नहीं है cp --reflink=auto
mtalexan

1

विकल्प 5 सबसे अच्छा है।

विकल्प 3 में माता-पिता / बाल डेटासेट के संबंध में, आप एक क्लोन को बढ़ावा दे सकते हैं और यह अब क्लोन किए गए डेटासेट का बच्चा नहीं होगा। यह अभी भी अतिरिक्त ब्लॉक का उपयोग नहीं करेगा। संपादित करें: यह ध्यान दिया जाता है कि यह केवल माता-पिता / बच्चे के रिश्ते को उलट देता है, इसे नष्ट नहीं करता है।

चीजों को संपीड़ित / एन्क्रिप्ट किया गया है और इससे कॉपी धीमी हो रही है, जो पूरी तरह से गलत है। आपका प्रोसेसर आपके ब्लॉक डिवाइस की तुलना में कहीं अधिक तेज है (भले ही एसएसडी का उपयोग कर रहा हो)। बस कुछ उदाहरण संख्याओं के लिए, मान लें कि किसी ब्लॉक को पढ़ने में 10 सेकंड लगते हैं, लेकिन इसे डिकम्प्रेस करने में केवल एक सेकंड और इसे डिक्रिप्ट करने में 2 सेकंड का समय लगता है। ब्लॉक 1 को 10 सेकंड में पढ़ा जाता है और सीपीयू को भेजा जाता है। सीपीयू डिस्क को पढ़ना शुरू कर देता है और डिक्रिप्ट करना शुरू कर देता है। 2. सीपीयू 3 सेकंड में अपना काम पूरा कर लेगा और फिर अगले 7 सेकंड डिस्क पर इंतजार करना होगा। इस बीच डिस्क ने उन दो ब्लॉकों (20 सेकंड) को पढ़ने के लिए एक ही राशि खर्च की है, भले ही ब्लॉक संपीड़ित हों या नहीं।

इसी तरह लिखते समय, केवल पहले ब्लॉक में देरी होती है। सीपीयू 1 को संकुचित / एन्क्रिप्ट करता है और इसे डिस्क पर भेजता है। जबकि डिस्क ब्लॉक 1 लिख रही है, सीपीयू बाद के ब्लॉक को संपीड़ित / एन्क्रिप्ट करना शुरू कर देगा। सीपीयू डिस्क की तुलना में बहुत तेजी से ब्लॉक के माध्यम से चबाना होगा, इसलिए यह एक मुद्दा नहीं है। (हां, यह इससे कहीं अधिक जटिल है, लेकिन यह बात है।)

आपके प्रश्न में एक मामूली बिंदु की अत्यधिक लंबी व्याख्या के लिए क्षमा करें, लेकिन मैं उस गलत धारणा को साफ करना चाहता था।


1
एक क्लोन का प्रचार सिर्फ स्विच करता है जिसे माता-पिता माना जाता है और जिसे बच्चा माना जाता है। बीच में स्नैपशॉट को नष्ट करना असंभव है क्योंकि मूल माता-पिता अब स्नैपशॉट का एक बच्चा है, जो अब पदोन्नत क्लोन का एक बच्चा है। उस के शीर्ष पर, यह अभी भी अनावश्यक रूप से डाटासेट जैसे निर्माण कर रहा है जहां मैं सिर्फ डेटासेट में फ़ाइलों को दोहराने के लिए देख रहा था।
हत्यारे

इसके अतिरिक्त, डिडअप सक्षम के साथ एक पूल पर, मुझे संपीड़न मंदी पर निष्कर्ष से असहमत होना होगा। संपीड़न के साथ डेटासेट में सक्षम संपीड़न वाले डेटासेट से प्रतिलिपि बनाना सक्षम किया गया, गति शायद ही कभी 5Mb / सेकंड से अधिक हो। यदि एक डाटासेट या दूसरे में संपीड़न अक्षम है, तो गति औसतन 10-15Mb / सेकंड तक कूद जाती है। दोनों पक्षों के संपीड़न के साथ, मैं 20Mb / सेक को आसानी से स्पाइक्स के साथ देख रहा हूं जो इससे अधिक है (शायद इसलिए कि भाग धीमे मीडिया से खींचने के बजाय डिडअप टेबल को राम में मार रहा है)।
हत्यारे

1
मैंने क्लोनिंग के संबंध में अपना जवाब अपडेट किया। कम्प्रेशन / एन्क्रिप्शन / डिडअप के रूप में, मंदी के कारण DDT को अपडेट करने से अधिक होता है क्योंकि वे संपीड़न या एन्क्रिप्शन हैं। मेरे अनुभव में संपीड़न और एन्क्रिप्शन का प्रभाव हमेशा नगण्य रहा है। मुझे लगता है कि YMMV।
बहमट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.