"लिनक्स पर जेडएफएस - आसान और सरल" लेख को पढ़ने के बाद, मैंने लिनक्स सर्वरों की एक जोड़ी पर इस एफएस का उपयोग करने में अपने मामूली अनुभव को साझा करने का फैसला किया।
पहले - एक विषयांतर। ZFS मस्त है। यह इतना अच्छा है कि यह एफएस की सभी कमियों को एक वैचारिक रूप से अलग मंच से कवर करता है। Solaris कर्नेल लिनक्स के अलावा अन्य प्राइमेटिव्स के साथ काम करता है, इसलिए, Solaris कोड का उपयोग करके ZFS को स्थानांतरित करना संभव बनाने के लिए, डेवलपर्स ने Solaris पोर्टिंग परत SPL संगतता परत बनाई। यह परत ठीक काम करने लगती है, लेकिन यह कर्नेल मोड में अतिरिक्त कोड है, जो अच्छी तरह से क्रैश का स्रोत हो सकता है।
ZFS लिनक्स VFS के साथ पूरी तरह से संगत नहीं है। उदाहरण के लिए, आप POSIX API और getfacl / setfacl कमांड के माध्यम से एक्सेस कंट्रोल लिस्ट को प्रबंधित नहीं कर सकते हैं, जो Samba को पसंद नहीं है, जो ACL में NTFS अनुमतियों को संग्रहीत करता है। इसलिए, सांबा फ़ोल्डर और फ़ाइलों के लिए सामान्य अनुमतियाँ सेट करना विफल हो जाएगा। सांबा, सैद्धांतिक रूप से, ZFS ACL का समर्थन करता है, लेकिन लिनक्स के लिए इस मॉड्यूल को अभी भी निर्मित करने की आवश्यकता है ... लेकिन लिनक्स पर ZFS में विस्तारित FS विशेषताएँ मौजूद हैं और ठीक काम करती हैं।
इसके अलावा, 32-बिट संस्करण में सोलारिस लिनक्स की तुलना में एक अलग मेमोरी आवंटन तंत्र का उपयोग करता है। इसलिए, यदि आप x86 आर्किटेक्चर पर लिनक्स पर ZFS की कोशिश करने का निर्णय लेते हैं, तो x86_64 नहीं, ग्लिट्स के लिए तैयार हो जाएं। आप प्राथमिक ऑपरेशन और dmesg में त्रुटियों के किलोमीटर के लिए एक सौ प्रतिशत CPU उपयोग की प्रतीक्षा कर रहे हैं। लिनक्स डेवलपर्स पर ZFS के रूप में लिखते हैं: “आप 64-बिट कर्नेल का उपयोग करने के लिए दृढ़ता से प्रोत्साहित होते हैं। फिलहाल zfs 32-बिट वातावरण में निर्मित होगा, लेकिन स्थिर रूप से नहीं चलेगा। ”
ZFS "अपने आप में एक चीज" है, और यह मेटाडेटा मापदंडों में संग्रहीत है जो लिनक्स के लिए विशिष्ट नहीं हैं। उदाहरण के लिए, FS के आरोह बिंदु का नाम इसकी सेटिंग में सेट किया गया है, और FS अपने आप zfs आरोह कमांड के साथ आरोहित होता है, जो स्वचालित रूप से / etc / fstab के साथ असंगत बना देता है और लिनक्स में FS को बढ़ाने के अन्य तरीके। आप निश्चित रूप से, माउंटपॉइंट = विरासत सेट कर सकते हैं और फिर भी माउंट का उपयोग कर सकते हैं, लेकिन यह, आपको मानना होगा कि यह ग्रेसलेस है। उबंटू में, समस्या को माउंट पैकेज द्वारा हल किया गया है, जिसमें जेडएफएस-विशिष्ट माउंट स्क्रिप्ट और पैच माउंट कमांड शामिल हैं।
अगली समस्या सिस्टम का स्नैपशॉट है, तथाकथित स्नैपशॉट। सामान्य तौर पर, ZFS में स्नैपशॉट का बहुत प्रभावी कार्यान्वयन होता है, जो आपको एक "टाइम मशीन" बनाने की अनुमति देता है - स्नैपशॉट का एक सेट, कहते हैं, एक महीने के लिए, 15 मिनट में 1 स्नैपशॉट का संकल्प। निश्चित रूप से उबंटू के रखरखावकर्ताओं ने इस सुविधा को zfs-auto-snapshot पैकेज में शामिल किया है, जो स्नैपशॉट का एक सेट बनाता है, हालांकि अधिक समय लेने वाली है। समस्या यह है कि प्रत्येक स्नैपशॉट को / dev निर्देशिका में ब्लॉक डिवाइस के रूप में प्रदर्शित किया जाता है। स्नैपशॉट बनाने का चक्र ऐसा है कि एक महीने में हमें पूल के प्रत्येक वॉल्यूम के लिए 4 + 24 + 4 + 31 + 1 = 64 ब्लॉक डिवाइस मिलते हैं। यही है, अगर हमारे पास, 20 वॉल्यूम (पूरी तरह से सामान्य मूल्य, यदि हम वर्चुअलाइजेशन के लिए एक सर्वर का उपयोग करते हैं), तो हमें प्रति माह 64 * 20 = 1280 डिवाइस मिलेंगे। जब हम रिबूट करना चाहते हैं, तो हमें एक बड़ा आश्चर्य होगा - डाउनलोड में बहुत देरी होगी। कारण - बूट पर, ब्लकिड उपयोगिता को निष्पादित किया जाता है, जो फ़ाइल सिस्टम की उपस्थिति के लिए सभी ब्लॉक डिवाइस को पोल करता है। या तो इसमें एफएस डिटेक्शन मैकेनिज्म को टेढ़ा-मेढ़ा तरीके से लागू किया जाता है, या ब्लॉक डिवाइसेस को धीरे-धीरे खोला जाता है, लेकिन किसी भी तरह ब्लकिड प्रोसेस को कर्नल द्वारा 120 सेकंड के बाद टाइमआउट से मार दिया जाता है। यह कहने की जरूरत नहीं है कि डाउनलोड पूरा होने के बाद भी ब्लकिड और उसके आधार पर सभी स्क्रिप्ट काम नहीं करती हैं?
गर्म खबर हैबस zfs-auto-stapshot पैकेज को स्थापित करने की कोशिश की और इसे पूरी तरह से परीक्षण किया। परिणाम - रोटेशन काम नहीं करता है, स्नैपशॉट के पुराने संस्करण हटाए नहीं गए हैं (त्रुटि 134)। तो एक महीने के लिए हमें 4 * 24 + 24 * 31 + 4 + 31 + 1 = 876 स्नैपशॉट एक वॉल्यूम के लिए या 20 वॉल्यूम के लिए 18,396 मिलते हैं। स्नैपशॉट के लिए जिम्मेदार स्क्रिप्ट शायद किसी तरह तय की जा सकती है ...
पैकेज संस्करण - 1.0.8-0ubuntu1 ~ oneric1, OS - डेबियन सिड x86_64
मान लीजिए कि हमने इन सभी समस्याओं को हरा दिया है, और iSCSI, FC, या कर्नेल में निर्मित
LIO-Target सिस्टम के माध्यम से किसी अन्य तरीके से नए सिरे से बनाई गई पार्टीशन को देना चाहते हैं। वहाँ यह था! बूट पर zfs मॉड्यूल, / dev निर्देशिका में ब्लॉक डिवाइस बनाने के लिए बेस नंबर 230 का उपयोग करता है। नवीनतम पैच के बिना LIO-Target (अधिक सटीक रूप से, targetcli उपयोगिता) निर्यात के लिए तैयार इस संख्या के साथ एक उपकरण पर विचार नहीं करता है। समाधान /usr/lib/python2.7/dist-packages/rtslib/utils.py फ़ाइल में एक पंक्ति को ठीक करने के लिए है, या /etc/modprobe.d.d.zfs.conf फ़ाइल में zfs मॉड्यूल लोड विकल्प जोड़ें:
options zfs zvol_major=240
और निष्कर्ष में: जैसा कि आप जानते हैं, कर्नेल में ZDL और GPL v2 जिसके तहत CDDL की असंगति कर्नेल में zfs मॉड्यूल को शामिल करने से रोकती है। इसलिए, हर बार जब कर्नेल को अपडेट किया जाता है, तो मॉड्यूल को DKMS के माध्यम से फिर से बनाया जाता है। कभी-कभी मॉड्यूल ऐसा करता है, कभी-कभी (जब कर्नेल बहुत नया होता है) - नहीं। इसलिए, नवीनतम गुठली से नवीनतम चिप्स (और केवीएम और एलआईओ-टारगेट बगफिक्स) आपको कुछ देरी से प्राप्त होंगे।
निष्कर्ष क्या है? सावधानी के साथ उत्पादन में ZFS का उपयोग करें। शायद उन कॉन्फ़िगरेशन जो अन्य एफएस पर समस्याओं के बिना काम करते थे, वे काम नहीं करेंगे, और उन आदेशों को जो आप सुरक्षित रूप से एलवीएम पर चले थे,
गतिरोध का कारण
बनेंगे ।
लेकिन लिनक्स के लिए उत्पादन में अब आपके पास सभी ZFS वॉल्यूम चिप्स तक पहुंच है। 28 - समर्पण, ऑन-लाइन संपीड़न, दोष सहिष्णुता, लचीली मात्रा प्रबंधक (जो, वैसे, अलग-अलग इस्तेमाल किया जा सकता है), आदि। सामान्य तौर पर, आपके लिए शुभकामनाएं और सफलता!