क्या एक ZFS मिरर एक ड्राइव के साथ ज्यादातर ऑफ़लाइन काम करेगा?


6

परिदृश्य: मेरे पास दो बाहरी हार्ड ड्राइव हैं, और मैं एक को दूसरे का बैकअप बनाना चाहूंगा। परंपरागत रूप से, मैं समय-समय पर किसी भी बदलाव के दौरान दूसरी ड्राइव और rsync को जोड़ता हूं। क्या ZFS ऐसा करने का एक बेहतर तरीका प्रदान करता है?

मुझे लगता है कि मैं एक 'zfs मिरर' सेटअप बनाना चाहूंगा, हालाँकि मैं बैकअप ड्राइव को सुविधा के लिए हर समय अपने साथ नहीं रखना चाहूंगा, बल्कि समय-समय पर किसी भी परिवर्तन को सिंक्रनाइज़ करूंगा। क्या ZFS ऐसा करने का एक तरीका प्रदान करता है, या यह एक उपयुक्त उपयोग नहीं है? यदि हां, तो ऐसा करने का विहित ZFS-तरीका क्या है? (मैं उदाहरण के लिए बैकअप ड्राइव को अद्यतन करने के लिए हर बार परिवर्तनों के लिए हर एक क्षेत्र की जाँच करने के द्वारा ड्राइव को कोस नहीं करना चाहता)

जवाबों:


8

थोड़ी देर के लिए ऑफ़लाइन होने के बाद ZFS के पास मिरर किए गए ड्राइव को बढ़ाने की सीमित क्षमता है। टीएल; डीआर: आप वह कर सकते हैं जो आप सुझाव दे रहे हैं जिस तरह से आप देख रहे हैं, लेकिन यह नहीं है कि दर्पण क्या करने के लिए हैं।

व्यवहार में, आप जो सुझाव दे रहे हैं, उसे लगभग निश्चित रूप से हर बार एक पूर्ण पुनर्विक्रेता की आवश्यकता होगी, क्योंकि अंतरिम परिवर्तनों से कई überblock संशोधन हो सकते हैं, इसलिए एक वृद्धिशील पुनरुत्थान के लिए कोई सामान्य आधार बिंदु नहीं होगा। यदि उस प्रक्रिया के दौरान कोई विफलता होती है, तो संभावना है कि आप गहरी परेशानी में होंगे जहां तक ​​आपका डेटा है। यह भी ध्यान रखें कि इसके मर्कल ट्री ऑन-डिस्क डेटा फॉर्मेट के कारण, ZFS रेज़लवर गैर-फ़ाइल-सिस्टम-आधारित RAID सिस्टमों की तरह क्रमिक रूप से बजाय "डेटा के महत्व को कम करने के क्रम में" किया जा सकता है। बेशक, यहां "डेटा महत्व" जहां तक ​​ZFS का संबंध है, जहां तक ​​आप महत्वपूर्ण या मूल्य रखने लायक नहीं समझ सकते हैं। परिणामी तलाश गतिविधि आसानी से विशेष रूप से एकल ड्राइव पर प्रमुख तनाव डाल सकती है।

सिंक में दो ZFS फाइल सिस्टम लाने के लिए विहित तरीका zfs send | zfs receiveउनके बीच का उपयोग करना है। यह दोनों फाइल सिस्टम उपलब्ध होने की आवश्यकता है (लेकिन आप कर सकते हैं उत्पादन की दुकान के ZFS भेजने के लिए और का उपयोग करें कि ZFS के लिए इनपुट बाद में मिलेगा, आप इतने इच्छुक होना चाहिए, लेकिन आप जानते हैं कि इस के साथ आता है होना चाहिए एक बड़ी चेतावनी : zfs receiveबनाता है कोई डेटा के एक आंशिक रूप से क्षतिग्रस्त धारा से उबरने का प्रयास, और यदि त्रुटियों का पता चलता है तो सिर्फ गर्भपात होता है)।

  • प्रत्येक बैकअप ड्राइव के लिए एक पूल रखें। चलो उन्हें टैंक और पाइप कहते हैं । मान लीजिए कि हमारे पास टैंक पर डेटा है जिसे हम पाइप पर कॉपी करना चाहते हैं ।
  • दोनों ड्राइव कनेक्ट करें, और टैंक और पाइपzpool import दोनों । आप इसे किसी भी फ़ाइल सिस्टम को माउंट नहीं करने के लिए ज़ूल आयात करने के लिए पास कर सकते हैं ।-N
  • स्रोत फ़ाइल सिस्टम, टैंक का एक स्नैपशॉट लें ।zfs snapshot tank@current1984 -r
  • सबसे हालिया स्नैपशॉट ढूंढें जिसमें टैंक और पाइप दोनों समान हैं। zfs list tank pipe -t snapshotकाम करने के लिए एक कच्ची सूची प्राप्त करने के लिए कुछ का उपयोग करें । मान लीजिए कि उनके पास हाल ही में सबसे अधिक स्नैपशॉट है current1948
  • कुछ की तरह चलाने के लिए zfs send -R -I tank@current1948 tank@current1984 | zfs receive pipeसंवर्द्धित के बीच का अंतर हस्तांतरण करने के लिए current1948और current1984से स्नैपशॉट टैंक के लिए पाइपzfsभेजने और प्राप्त करने के लिए अधिक विवरण के लिए मैन पेज पढ़ें ।
  • उसके समाप्त होने की प्रतीक्षा करें, फिर वैकल्पिक रूप से किसी भी स्नैपशॉट को हटा दें जिसकी अब आवश्यकता नहीं है। कम से कम एक स्नैपशॉट (उदाहरण के लिए, current1984) रखने के लिए सुनिश्चित करें कि दोनों पूल (फाइल सिस्टम, बल्कि) आम में हैं, अगली बार आधार के रूप में उपयोग करने के लिए।

इस बिंदु पर, दो पूल में एक ही सामग्री होगी, आपके द्वारा उपयोग किए गए स्नैपशॉट तक। यदि ठीक से किया जाता है, तो इसके लिए केवल मतभेदों को स्थानांतरित करने की आवश्यकता होनी चाहिए; मैं एक ऐसे परिदृश्य की कल्पना नहीं कर सकता, जिसमें एक वृद्धिशील zfs send | zfs receiveको पूर्ण दर्पण रेजिलवर की तरह कुछ भी करने की आवश्यकता होगी। यह आपको बाद में बैकअप पूल में अतिरेक जोड़ने की अनुमति देता है, क्या आपको ऐसा करने की इच्छा होनी चाहिए। यदि प्रतिलिपि बनाने की प्रक्रिया के दौरान स्रोत ड्राइव विफल हो जाता है, तो आपको अभी भी पुराना बैकअप आसानी से उपलब्ध होना चाहिए; केवल वे अंतर जिन्हें आप स्थानांतरित करने का प्रयास कर रहे थे वे खो जाएंगे।


आश्चर्यजनक रूप से गहराई से जवाब। आपके उत्तर के लिए बहुत बहुत धन्यवाद!
मैथ्यू

4
@ मैथ्यू ZFS प्रश्न सुपर यूजर के लायक प्यार की मात्रा के पास कहीं नहीं मिलते हैं। (ओह, और सुनिश्चित करें कि आप ECC RAM का उपयोग कर रहे हैं । इसके लिए मुझे धन्यवाद देने की कोई आवश्यकता नहीं है।)
एक CV

यदि ECC RAM उपलब्ध नहीं है, तो आप किस फाइलसिस्टम की सिफारिश करेंगे? लिंक यह ध्वनि करता है कि शायद 'डम्बर' फाइलसिस्टम उस उदाहरण में एक बेहतर विकल्प होगा?
मैथ्यू

1
@ मैथ्यू यदि ईसीसी रैम उपलब्ध नहीं है, तो केवल एक प्रमुख धारणा है कि जेडएफएस पूरी तरह से अलग हो जाता है। याद रखें, ZFS हाई-एंड सर्वर के लिए डिज़ाइन किया गया था, और उस वातावरण में, गैर-ईसीसी रैम मूल रूप से मौजूद नहीं है । यदि आपके सिस्टम में ECC RAM क्षमता नहीं है, तो आप शायद ZFS को स्क्रैप करने से बेहतर हैं और बजाय अपने प्लेटफॉर्म (ext4, UFS, HFS +, जो भी) के लिए एक नियमित फाइल सिस्टम देशी का उपयोग कर रहे हैं, जो स्वचालित रूप से सामना की गई त्रुटियों को सही करने का प्रयास नहीं करता है। आप तथ्य के बाद बिट रोट को पकड़ने के लिए नियमित रूप से हैशदीप जैसा कुछ चला सकते हैं, और बैकअप से एक अच्छी प्रतिलिपि को पुनर्स्थापित कर सकते हैं।
एक सीवी

1
@ मैथ्यू माइंड यू, नॉन-ईसीसी-रैम सिस्टम पर जेडएफएस विशेष रूप से उच्च गुणवत्ता वाली रैम के साथ काम कर सकता है। मैंने इसे कुछ समय के लिए दौड़ाया इससे पहले कि मैंने ईसीसी स्टिक के साथ रैम को बदल दिया। लेकिन आप वास्तव में ऐसा करके किनारे पर रह रहे हैं; कोई भी स्मृति त्रुटि लॉग फ़ाइल में केवल एक सूचना से डेटा को नष्ट करने की समस्या में बदल सकती है। यही कारण है कि सामान्य सिफारिश ईसीसी रैम के बिना जेडएफएस का उपयोग नहीं करना है; ZFS के स्वचालित मरम्मत व्यवहार के साथ, यह सिर्फ बहुत अधिक जोखिम है। अन्य फ़ाइल सिस्टम के साथ, एक रैम बिट फ्लिप स्वचालित रूप से डिस्क पर संग्रहीत डेटा और मेटाडेटा के हर टुकड़े के माध्यम से नहीं फैलता है, जबकि ZFS के साथ, यह कर सकता है।
बजे एक CVn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.