एक डिस्क पर कई विभाजनों पर ZFS


4

मेरे पास एक बहुत बड़ी बाहरी ड्राइव है जिसे मैं बैकअप के लिए उपयोग करना चाहता हूं। बैकअप का एक हिस्सा विंडोज के विभाजन के लिए होता है, जिसे विंडोज से एक्सेस करने की आवश्यकता होती है, कुछ लिनक्स लिनक्स पार्ट का बैकअप होता है।

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

  • क्या यह सेटअप अनुशंसित है या संभव भी है?
  • क्या उपयोग किए गए डिस्क स्थान को कुछ हद तक फ्लेक्सिबल बनाने के लिए एक बेहतर तरीका है ?
  • यह नरक की तलाश में समाप्त होता है, या ZFS मात्रा एक डिस्क पर कई भागों से मिलकर बना सकती है बिना प्रदर्शन के (बिना अतिरिक्त प्रतियां)?
  • समस्या का वैकल्पिक हल?

अद्यतन: मैंने पूरी डिस्क को एन्क्रिप्टेड लूपबैक वॉल्यूम के रूप में उपयोग किया cryptsetup। मैंने तब इस पर एक बड़ा ZFS फाइल सिस्टम बनाया। यदि मैं सेट copies=2करता हूं , तो वह सीक-हेल में भी समाप्त होता है, या क्या कोई चतुर ZFS तंत्र है जो एक बफर का उपयोग करके एक ही डिस्क पर सभी फ़ाइलों की प्रतियां संग्रहीत करेगा [धारणा: नरक के रूप में अच्छी तरह से + केवल एक प्रति क्योंकि आप की आवश्यकता होगी कई प्रतियों के लिए कई उपकरण]।


यह निश्चित रूप से नरक की तलाश में होगा, क्योंकि ZFS स्ट्रिपिंग करता है। प्रत्यक्ष-संलग्न भंडारण का उपयोग न करें। नेटवर्क स्टोरेज का उपयोग करें।
डैनियल बी

1
क्या कोई अन्य विकल्प है कि भौतिक डिस्क पर किसी तरह का उपयोग किया जा सके? मुझे डर है कि मैं ड्राइव पर बहुत सारी जगह बर्बाद करने जा रहा हूं। मैंने LVM के बारे में सोचा, लेकिन मुझे यकीन नहीं है कि ZFS का आकार बदलना एक विकल्प है (जैसा कि आपने अनुमान लगाया होगा कि मैं ZFS के लिए बिल्कुल नया हूं)।
hochl

एक वैकल्पिक समाधान zfs sendउन्हें प्राप्त किए बिना बैकअप स्ट्रीम में हो सकता है । यह अनुशंसित नहीं है क्योंकि एक एकल बिट त्रुटि आपकी पूरी स्ट्रीम को नष्ट कर देती है, लेकिन आप इसका पता लगाने के लिए चेकसम का उपयोग कर सकते हैं। इस तरह, आप NTFS विभाजन पर एक बड़े टार संग्रह के अंदर अपने zfs फाइल सिस्टम का बैकअप ले सकते हैं और अतिरिक्त विभाजन की आवश्यकता नहीं होगी। बेशक, यह टेप नरक होगा , इसलिए शायद और भी बुरा ...;)
user121391

जवाबों:


3

क्या यह सेटअप अनुशंसित है या संभव भी है?

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

हालांकि, अनुशंसित? मैं कहूँगा बिल्कुल नहीं!

यह नरक की तलाश में समाप्त होता है, या ZFS मात्रा एक डिस्क पर कई भागों से मिलकर बना सकती है बिना प्रदर्शन के (बिना अतिरिक्त प्रतियां)?

ZFS अपने कॉपी-ऑन-राइट डिज़ाइन की वजह से शुरू करने के लिए भारी है। (यदि आप स्नैपशॉट का उपयोग करते हैं, तो यह समाप्त हो गया है। स्नैपशॉट एक ZFS सुविधा है जो बहुत से लोगों को वास्तव में पसंद है, भले ही वे वास्तव में ZFS की अन्य विशेषताओं में से किसी का भी उपयोग न करें, लेकिन वे जोखिम के संदर्भ में एक महत्वपूर्ण लागत पर आते हैं। डेटा विखंडन, खासकर यदि आप कई छोटे लिखते हैं।)

जब आप किसी मौजूदा पूल में अतिरिक्त संग्रहण जोड़ते हैं, जिसे आप अपनी प्रस्तावित योजना के साथ जोड़ते हैं, तो पहले से संग्रहीत डेटा स्वचालित रूप से पुन: असंतुलित नहीं होता है। इसके बजाय, ZFS उन vdevs के लिए नए डेटा ब्लॉक लिखता है जिनके पास सबसे अधिक रिक्त स्थान है , जो समय के साथ-साथ सभी डेटा को वितरित किए जाने के कारण डेटा को लिखा जाता है । आपके मामले में, इसका मतलब है कि डेटा मोटे तौर पर आपकी अपेक्षा के अनुसार वितरित किया जाएगा: नए लिखित डेटा, जिसमें मौजूदा फ़ाइलों में परिवर्तन शामिल हैं, पहले से मौजूद vdev (s) की तुलना में नए जोड़े गए vdev के लिखे जाने की अधिक संभावना है। चूंकि सभी vdevs एक ही भौतिक डिस्क पर हैं, इसलिए इससे कोई वास्तविक विश्वसनीयता प्राप्त नहीं होती है; यदि एकल डिस्क मर जाती है, तो आपका पूल मर जाता है, और आपके सभी डेटा को इसके साथ ले जाता है।

ZFS डेटा को समान रूप से vdev के भीतर वितरित करने की कोशिश करता है , इस धारणा पर कि यह सभी प्रतियों को प्रभावित करने वाले स्थानीयकृत भौतिक क्षति या तार्किक त्रुटियों के जोखिम को कम करता है। यह अपने मर्कल ट्री ऑन-डिस्क डिज़ाइन के पीछे एक ड्राइविंग कारण है, और एक संभावित कारण है कि यह copiesजहां तक ​​संभव हो सके, बिना किसी कारण के सहसंबद्ध vdevs पर जगह देने की कोशिश करता है ।

जहाँ तक मुझे पता है, वर्तमान में जेडएफएस में अतिरिक्त भंडारण जोड़ने के बाद vdevs के बीच डेटा के असंतुलन में कोई देशी समर्थन नहीं है। Btrfs के पास btrfs rebalanceकमांड है, लेकिन ZFS के पास ऐसा कुछ नहीं है। आप डेटा का उपयोग करके (उपयोग करके zfs send ... | zfs recv ...) कुछ हद तक पास हो सकते हैं लेकिन यह केवल एक साइड इफेक्ट है।

निचला रेखा, मुझे संदेह है कि आपके प्रस्तावित सेटअप डिस्क विभाजन के मामले में एक ही विभाजन पर ZFS के समान सेट की तुलना में काफी खराब होगा ।

मैंने तब इस पर एक बड़ा ZFS फाइल सिस्टम बनाया। अगर मैं प्रतियां = 2 सेट करता हूं, तो क्या वह तलाश-नरक में भी समाप्त होती है, या क्या कोई चतुर ZFS तंत्र है जो एक बफर का उपयोग करके एक ही डिस्क पर सभी फ़ाइलों की प्रतियां संग्रहीत करेगा [धारणा: नरक के रूप में अच्छी तरह से तलाश करें + केवल एक प्रति क्योंकि आपको कई प्रतियों के लिए कई उपकरणों की आवश्यकता होगी]।

सबसे पहले, कृपया ZFS पूल और ZFS फाइल सिस्टम के बीच अंतर को ध्यान में रखें। आपने एक पूल बनाया , जिसमें डिफ़ॉल्ट रूप से पूल के समान नाम वाला एक एकल फ़ाइल सिस्टम है । पूल भौतिक भंडारण के गुणों को निर्धारित करता है, जैसे कि vdev कॉन्फ़िगरेशन और न्यूनतम ब्लॉक आकार (ZFS में राख के रूप में जाना जाता है), और zpoolउपयोगिता का उपयोग करके प्रशासित किया जाता है । फाइल सिस्टम लॉजिकल स्टोरेज के गुणधर्मों को निर्धारित करता है, जैसे कि कम्प्रेशन, कोटा, माउंट पॉइंट्स, और चेकसमिंग, और zfsयूटिलिटी का उपयोग करके प्रशासित किया जाता है । यह उदाहरण के लिए Btrfs के विपरीत है, जो दोनों को एक साथ जोड़ देता है।

दूसरा, मैं आपको संक्षेप में बताता हूं कि copiesZFS फाइल सिस्टम प्रॉपर्टी कैसे काम करती है। भौतिक copiesअतिरेक के ऊपर और परे अतिरेक को निर्दिष्ट करता है, और एक फ़ाइल की कई उपयोगकर्ता-दृश्य प्रतियाँ बनाने के समान है (लेकिन फ़ाइल सिस्टम पर उपयोग में कमी होने पर उपयोगकर्ता के मानसिक मॉडल को नहीं तोड़ता)। हालांकि यह सभी vdev redundancy प्रकारों पर लागू होता है, दर्पणों के साथ यह वर्णन करना सबसे आसान है: दर्पण होने की साधारण संपत्ति द्वारा, दो-तरफा दर्पण vdev, आपके डेटा की दो समान प्रतियों को संग्रहीत करेगा। यदि आपने भी सेट किया है copies=2, तो दर्पण जोड़ी में प्रत्येक दो डिस्क भी होंगेबिट्स की कुल चार प्रतियों को संग्रहीत करने के लिए और लगभग 25% प्रयोग करने योग्य भंडारण की एक कुल कुल (जब उपलब्ध कच्चे भंडारण की मात्रा की तुलना में) के लिए अपने डेटा की दो प्रतियां रखें। सरल स्पष्टीकरण कुछ हद तक raidz N vdevs के साथ टूट जाता है , लेकिन परिणाम एक ही है: एक ही बिट्स की कई प्रतियां डिस्क पर संग्रहीत की जा रही हैं, जैसे कि एक खराब होने पर, दूसरे का उपयोग किया जा सकता है।

डिफ़ॉल्ट रूप से, उपयोगकर्ता डेटा की एक प्रतिलिपि संग्रहीत की जाती है, और फ़ाइल सिस्टम मेटाडेटा की दो प्रतियां संग्रहीत की जाती हैं। बढ़ते हुए copies, आप इस व्यवहार को ऐसे समायोजित करते हैं कि copiesउपयोगकर्ता डेटा (उस फ़ाइल सिस्टम के भीतर) की copiesप्रतियां संग्रहीत की जाती हैं, और सिस्टम मेटाडेटा की एक प्रतियां (उस फ़ाइल सिस्टम के भीतर) संग्रहीत की जाती हैं। सर्वोत्तम प्रभाव के लिए, यदि आप कॉपियों को एक से अधिक मूल्य पर सेट करना चाहते हैं, तो आपको ऐसा तब करना चाहिए जब आप पूल का उपयोग करके बनाते हैं zpool create -O copies=N, यह सुनिश्चित करने के लिए कि सभी रूट फाइल सिस्टम मेटाडेटा की अतिरिक्त प्रतियां संग्रहीत हैं।

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

हालाँकि, लिखने के दौरान , सभी प्रतियों को यह सुनिश्चित करने के लिए अद्यतन किया जाना चाहिए कि उन्हें सिंक में रखा गया है। क्योंकि ZFS का उद्देश्य है कि प्रतियां एक-दूसरे से बहुत दूर हों, इससे अतिरिक्त मांग होती है। इसके अलावा इसके मर्कल ट्री डिजाइन के बारे में मत भूलना, मेटाडेटा ब्लॉकों के साथ कुछ भौतिक दूरी को डेटा ब्लॉक से दूर रखा गया है (उदाहरण के लिए गार्ड के खिलाफ एक एकल लिखने की विफलता चेकसम और डेटा दोनों को भ्रष्ट करता है )। मेरा मानना ​​है कि ZFS का उद्देश्य copiesकम से कम 1/8 vdev को एक दूसरे से दूर रखना है, और डेटा ब्लॉक के लिए चेकसम युक्त मेटाडेटा ब्लॉक को हमेशा डेटा ब्लॉक से कुछ दूरी पर रखा जाता है।

नतीजतन, की स्थापना copies1 से अधिक काफी मदद नहीं करता है या चोट प्रदर्शन करते हुए पढ़ने , लेकिन प्रदर्शन को कम कर देता है, जबकि लेखन का अनुरोध किया प्रतियों की संख्या और अंतर्निहित भंडारण की IOPS (आई / प्रति सेकंड हे संचालन) प्रदर्शन के संबंध में।


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