परिचय
एक प्रसिद्ध कहावत है कि सिस्टम प्रशासक तीन प्रकारों में विभाजित हैं: वे जो बैकअप नहीं लेते हैं; जो
पहले से बैकअप बनाते हैं और जो बैकअप बनाते हैं और वेरीफाई करते हैं, वे काम कर रहे हैं।
हालांकि, यह पर्याप्त नहीं है, और अब बैकअप सिस्टम के उपयोगकर्ता के लिए ऐसा पैरामीटर गति के रूप में महत्वपूर्ण है, और न केवल बैकअप की गति, अर्थात्, फ़ाइलों को संग्रहित करना, बल्कि पुनर्प्राप्ति भी है।
सहमत हूँ, एकल फ़ाइल निकालने के लिए आकार में 50-100-1000 गीगाबाइट के पूरे संग्रह को पढ़ना बेवकूफी है।
और अगर आपके पास ये अभिलेखागार वृद्धिशील हैं, तो वांछित तिथि के लिए एक फ़ाइल को पुनर्स्थापित करने के लिए, आपको क्रम में सभी अभिलेखागार को क्रमिक रूप से पढ़ने की आवश्यकता होगी। और सब कुछ बहुत खराब हो जाता है अगर संग्रह फ़ाइल दूरस्थ सर्वर पर स्थित है।
और अगर आप TAR संग्रह प्रारूप का उपयोग करते हैं तो आप क्या करेंगे। आखिरकार, यह अभिलेखागार के लिए उद्योग मानक है, और इसका उपयोग कई बैकअप उपयोगिताओं में किया जाता है।
और इस व्यवहार का कारण बहुत सरल है - अनुक्रमित की कमी, जिस पर आप संग्रह से एक फ़ाइल खींच सकते हैं।
TAR में आमतौर पर कई कमियां होती हैं, जिनमें से कई घातक होती हैं। मैं अध्ययन के दौरान मुझे मिली मुख्य कमियों की एक छोटी सूची दूंगा:
- एक सूचकांक की कमी, और परिणामस्वरूप, पूरे संग्रह को पढ़ने के बिना एक फ़ाइल को बाहर निकालने में असमर्थता।
- स्वरूपों का चिड़ियाघर: विभिन्न संस्करणों के GNU टार, BSD टार भी विभिन्न संस्करणों के हैं, जो कभी-कभी एक दूसरे के साथ अभिलेखागार की असंगति का मतलब है।
- अंतर्निहित एन्क्रिप्शन की कमी।
- चयनात्मक संपीड़न की असंभावना (हम क्यों, उदाहरण के लिए, JPEG सेक?) करना चाहिए।
- संग्रह और पुनर्प्राप्ति के दौरान बिल्कुल अक्षम्य त्रुटियां (एक विशिष्ट त्रुटि संदेश "संग्रह का अनपेक्षित EOF" है, जिसका अर्थ कुछ भी हो सकता है)।
- उदाहरण के लिए, यह केवल एक संग्रह नहीं बना सकता है, क्योंकि संग्रह के दौरान फ़ाइलों का हिस्सा हटा दिया गया था, और टार इस स्थिति को नहीं संभालता है।
और यह सिर्फ वही है जो मुझे इस कदम पर याद आया।
मैंने अभिलेखागार (ज़िप, आरएआर, 7zip) और यहां तक कि बैकअप के लिए राक्षसी प्रणालियों के सभी प्रकार का व्यापक अध्ययन किया: खुला स्रोत (या सशर्त रूप से खुला) जैसे बेकुला, और मालिकाना।
और उन्होंने पुरालेख प्रारूप पाया, जिसने कमोबेश मुझे और कंपनी को सभी मामलों में व्यवस्थित किया और मेरे कार्य को अनुकूल बनाया।
मेरा सुझाव है कि आप
डार अभिलेखागार पर ध्यान दें और इसके फायदे और नुकसान के बारे में संक्षेप में बात करें (वे मौजूद हैं, लेकिन उनमें से कुछ हैं, और आप उनके साथ रह सकते हैं), और फिर मैं व्यावहारिक उदाहरणों की ओर रुख करूंगा।
गौरव
- संग्रह फ़ाइल में एक इंडेक्स है, और इससे भी अधिक - इंडेक्स को स्वयं अलग से रखा जा सकता है और बैकअप लिया जा सकता है, जो आपको क्षतिग्रस्त इंडेक्स होने पर आर्क को पुनर्स्थापित करने की अनुमति देगा।
- न केवल सामान्य अंतर और वृद्धिशील बैकअप, बल्कि वृद्धिशील भी।
- एन्क्रिप्शन (ब्लोफिश, एन्स, ट्वोफिश, सर्प, कैमलिया)।
- आप कुछ एक्सटेंशन के साथ फ़ाइलों को संपीड़ित कर सकते हैं।
- आप कुछ एक्सटेंशन के साथ फ़ाइलों को संपीड़ित नहीं कर सकते।
- आप लचीले ढंग से संग्रह और अनज़िपिंग की प्रक्रिया को नियंत्रित कर सकते हैं (फ़ाइलों को हटाने, बदलने, स्थानांतरित करने आदि के लिए कैसे प्रतिक्रिया करें)।
- एक संग्रह प्रबंधक है, जो डार के साथ आपूर्ति करता है, यह आपको एक पंक्ति में सभी अभिलेखागार को पुनर्स्थापित करने की अनुमति नहीं देता है, जब फ़ाइल की खोज होती है, स्वचालित रूप से केवल आवश्यक लोगों का चयन करते हुए।
ये केवल इसके मुख्य फायदे हैं, सामान्य तौर पर, डार सुविधाओं में बहुत समृद्ध है और आदमी से बोली यह सबसे अच्छा कहती है: "... लेकिन कमांड लाइन विकल्पों के लिए उपलब्ध अप्रयुक्त पत्र की कमी के कारण ..."।
परियोजना सक्रिय रूप से विकसित हो रही है और डेवलपर द्वारा अच्छी तरह से समर्थित है। मुझे कुछ दिनों के भीतर अपने सवालों का जवाब मिल गया, और जवाब हमेशा बहुत जानकारीपूर्ण होते हैं। मैं केवल एक ही परियोजना को समर्थन के समान स्तर के साथ जानता हूं -
libguestfs , वैसे, मैंने
पहले ही इसके बारे में
लिखा था ।
कमियों
- विकल्पों में से एक अवास्तविक राशि, और यदि आप गंभीरता से खुदाई / संग्रह के दौरान विभिन्न फ़ाइल परिवर्तनों पर प्रतिक्रिया करने के लिए खोदते हैं, तो आप पागल हो सकते हैं।
- पाइप के माध्यम से एक पूरी तरह से अव्यावहारिक बैकअप / पुनर्स्थापना प्रक्रिया (उदाहरण के लिए, ssh के माध्यम से)।
- कुछ स्थितियों में, डार को उपयोगकर्ता की प्रतिक्रिया की आवश्यकता हो सकती है (यह कमांड में तर्क जोड़कर किया जाता है, लेकिन एक नियम के रूप में, यह अन्तरक्रियाशीलता बहुत अप्रत्याशित है, खासकर जब आप अपनी पहली डार स्क्रिप्ट लिख रहे हैं)।
ऐसा नहीं है कि यह एक दोष है, लेकिन डार बहुत ही क्रियात्मक है। यदि टार ऑपरेशन के बाद एक पंक्ति लिखता है, तो डार बहुत कुछ और महान विस्तार से लिखता है। और हां, इसे बंद किया जा सकता है (अभी तक कोई नहीं बचा है
>/dev/null 2>&1
)।
व्यावहारिक काम
मैं शर्त लगाता हूं कि दर्शकों का हिस्सा पहले से ही अपने पसंदीदा वितरण में डार स्थापित करने के लिए चला है और आदमी को अपने दम पर पढ़ा है। जो रुके थे, उनके लिए मैं आपको बताऊंगा कि इसका उपयोग कैसे किया जाए। और जब उत्साही वापस लौटते हैं, तो मैं आपको दिखाऊंगा कि इस अद्भुत उपयोगिता का उपयोग कैसे करें, और कुछ बुनियादी अवधारणाओं के बारे में बात करें जो आपको
man dar
पन्नों पर
man dar
।
संग्रह
पहला उदाहरण, सबसे सरल:
dar -R $HOME -c /mnt/backup/archive
अभिलेखागार / घर निर्देशिका।
आइए कुछ निर्देशिकाओं को छोड़ दें (~ / फिल्में, ~ / डाउनलोड):
dar -R $HOME -c /mnt/backup/archive -P movies -P downloads
मुझे लगता है कि सभी ने पहले ही देखा है कि संग्रह के नाम में .dar फ़ाइल एक्सटेंशन का उल्लेख नहीं है। और आंकड़ा 1 फ़ाइल नाम में कहीं से आया है। यह सब इसलिए है क्योंकि डार मूल रूप से हटाने योग्य मीडिया (सीडी, डीवीडी, या, उदाहरण के लिए, टेप ड्राइव) के लिए बैकअप के लिए अभिप्रेत था, इसलिए यह
स्लाइस में संग्रहीत करता
है , और संख्या 1 दिखाई देती है क्योंकि यह टुकड़ा
पहला है । और चूंकि हमने कुंजी
-s 100M
निर्दिष्ट नहीं की है - और केवल एक। डार के पास कुछ संचालन करते समय स्क्रिप्ट चलाने की कुंजी भी होती है (टार में भी ऐसी कुंजी होती है)। उदाहरण के लिए, जब एक स्लाइस रिकॉर्ड की जाती है, तो आप एक स्क्रिप्ट निष्पादित कर सकते हैं और माध्यम को बदल सकते हैं, और फिर से और इतने पर।
सामान्य तौर पर, संग्रह को कई भागों में तोड़ना किसी को आश्चर्यचकित नहीं करेगा।
डिफ़ॉल्ट रूप से, संपीड़न के बिना dar अभिलेखागार, और संपीड़न को सक्षम करने के लिए आपको
-z algo:level
पास करना होगा
-z algo:level
स्विच। समर्थित gzip, bzip2, lzo हैं। और आउटपुट में हमें समान .N.dar फ़ाइल मिलती है, बिना किसी .gz और अन्य को जोड़े। संग्रहकर्ता खुद जानता है कि उसके अंदर क्या है।
आइए निम्नलिखित अच्छाइयों पर जाएं - संग्रह के दौरान संपीड़न के अपवाद:
dar -R $HOME -c /mnt/backup/archive -Y "*.txt" "*.fb2" -Z "*.mp4"
-Y
स्विच इंगित करता है कि किन फाइलों में संपीड़न शामिल है, और
-Z
इंगित करता है कि किन फाइलों की जरूरत नहीं है। इसके अलावा, डिफ़ॉल्ट रूप से, एक अपवाद की एक उच्च प्राथमिकता है (लेकिन यदि आवश्यक हो तो इस व्यवहार को बदला जा सकता है)।
और अब चलो अंतर, वृद्धिशील और सबसे स्वादिष्ट - वृद्धिशील बैकअप शुरू करते हैं।
अगर किसी को पता नहीं है कि इसका क्या मतलब है - निडर, मैं बताऊंगा:
- विभेदक: पहले एक पूर्ण प्रतिलिपि बनाई जाती है, और प्रत्येक बाद के दिन केवल इस प्रतिलिपि और फ़ाइलों की वर्तमान स्थिति के बीच का अंतर बचाया जाता है।
- वृद्धिशील: एक पूर्ण प्रतिलिपि बनाई जाती है, अगले दिन पूर्ण और वर्तमान स्थिति के बीच का अंतर बचाया जाता है, तीसरे पर - दूसरे दिन और तीसरे के बीच का अंतर।
- विकृतीकरण: प्रति दिन एक पूर्ण प्रतिलिपि सहेजी जाती है और वर्तमान स्थिति और कल के बीच का अंतर बचाया जाता है।
उसी समय, कोई भी आपको एक ही समय में वृद्धिशील और डिक्रीमेंटल बैकअप दोनों को लागू करने के लिए परेशान नहीं करता है। इसलिए दो सप्ताह में एक बैकअप इस तरह दिख सकता है (सप्ताह के दिन शीर्ष पर हैं, बैकअप प्रकार d- नीचे दशमलव में वृद्धि है, + मैं वृद्धिशील है):
MTWTFSSMTWTFS
d- d- d- d- d- d- f +i +i +i +i +i +i
यह एक पूर्ण कॉपी करने के लिए संभव बनाता है, अंतरिक्ष की एक महत्वपूर्ण राशि की बचत करेगा।
आपको यह भी पता होना चाहिए कि वृद्धिशील संग्रह बनाने के लिए आपको केवल एक चीज की आवश्यकता होगी जो एक सूचकांक है। Dar के संदर्भ में, एक सूचकांक को एक निर्देशिका कहा जाता है, और किसी फ़ाइल में सूचकांक को संग्रहीत करने को निर्देशिका अलगाव कहा जाता है। इसके अलावा, मैं केवल शब्दों के वृद्धिशील / घटाव का उपयोग करूंगा क्योंकि अंतर संग्रह वृद्धिशील का एक विशेष मामला है।
तो, एक वृद्धिशील संग्रह बनाएँ:
dar -R $HOME -c /mnt/backup/archive_monday -A /mnt/backup/archive
अब एक और करते हैं:
dar -R $HOME -c /mnt/backup/archive_tuesday -A /mnt/backup/archive_monday
क्या आप इस विचार को समझते हैं? बढ़िया, चलिए आगे बढ़ते हैं। अब, इंडेक्स को अलग से सहेजें (ध्यान दें कि हम इसे आर्काइव से नहीं काटेंगे, लेकिन बस इसे कॉपी कर लें, यह मलब बैकअप के साथ है। आखिरकार, आप अपने बूटलोडर का बैकअप लेते हैं?) ताकि आपको केवल एक वृद्धिशील संग्रह बनाने के लिए बहु-गीगाबाइट बैकअप को चालू न करना पड़े। हम अब "फ्लाई पर अलगाव" कर रहे हैं, लेकिन कैटलॉग को किसी भी सुविधाजनक समय पर तैयार संग्रह से ले जाकर बचाया जा सकता है।
dar -R $HOME -c /mnt/backup/archive_wednesday -A /mnt/backup/archive_tuesday -@ /mnt/backup/CAT_archive_wednesday
और अब चलो केवल CAT
आर्काइव वेडनेसडे इंडेक्स का उपयोग करते हुए एक बार एक बैकअप बनाएं:
dar -R $HOME -c /mnt/backup/archive_thursday -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday
ठीक है, हमने परिचित वृद्धिशील बैकअप को छाँट लिया है, लेकिन किस प्रकार का जानवर घटता हुआ बैकअप है?
शुरू करने के लिए, हमें एक कल के संपूर्ण संग्रह की आवश्यकता है, जिसमें से हम दशमलव में वृद्धि करेंगे, और आज का पूरा।
dar -R $HOME -c /mnt/backup/archive_sunday
dar -R $HOME -+ /mnt/backup/archive_saturday_decremental -A /mnt/backup/archive_saturday -@ /mnt/backup/archive_sunday -ad
सामान्य तौर पर, यहां सब कुछ थोड़ा भ्रमित है (इसके लिए उपयोग किया जाता है), क्योंकि
-+
प्रलेखन के अनुसार दो अभिलेखागार को
संयोजित करने के लिए बनाया गया था, और
-@
, जैसा कि हमने पहले ही कहा है, मक्खी पर निर्देशिका को अलग करने का कार्य करता है, और
-ad
लागू करने के लिए इन कुंजियों के व्यवहार को बदलता है। घटती। एक तरह से, यह तर्कसंगत है। शायद।
ठीक है, हम सत्य के क्षण को प्राप्त हुए - डेटा रिकवरी। सब के बाद, हर कोई समझता है कि एक बैकअप जिसे बहाल नहीं किया जा सकता है, वह एक अनमैन्ड बैकअप के लिए एक समान है?
बहाल करने से पहले, संग्रह की जांच करना अच्छा होगा:
dar -t /mnt/backup/archive_sunday
यदि dar ने एक त्रुटि कोड नहीं दिया है (man'a के अंत में सभी संभावित निकास कोड सूचीबद्ध हैं जो dar वापस आ सकते हैं), तो आप पुनर्स्थापित कर सकते हैं:
mkdir sunday
dar -x /mnt/backup/archive_sunday -R sunday
रिमोट मशीन संचालन
फ़ाइल वसूली
मैंने पहले ही उल्लेख किया है कि पाइप के माध्यम से दूरस्थ मशीनों से फ़ाइलों को पुनर्स्थापित करना (उदाहरण के लिए, ssh के माध्यम से) एक गैर-तुच्छ कार्य है।
मैं विस्तार से बताने की कोशिश करूंगा कि यह कैसे काम करता है।
सभी कठिनाइयों को इस तथ्य से जोड़ा जाता है कि आपको एक डीएआर फ़ाइल को पुनर्स्थापित करने के लिए सूचकांक को पढ़ने की आवश्यकता है। यदि आप इसे रीडिंग मोड (- परिणामी-रीड स्विच) स्ट्रीमिंग में टार के रूप में उपयोग करते हैं, तो ऐसी समस्याएं उत्पन्न नहीं होती हैं।
सूचकांक को पढ़ने के साथ समस्या को हल करने के लिए, dar के दो संस्करण बनाए गए थे:
- प्राथमिक: डार, जो कहता है कि आपको पुनर्प्राप्त करने की आवश्यकता है।
- हेल्पर: dar_slave, जो कमांड प्राप्त करता है और डार को रिस्टोर किए गए डेटा को पास करता है, जो dar तब डिस्क को लिखता है।
इसलिए, कार्य की योजना (वसूली के लिए) इस तरह दिखती है:
(2) --> dar --> (1) --> dar_slave archive --> (2)
- dar with पाइप का कहना है dar_slave: "मैं फ़ाइल A को पुनर्स्थापित करना चाहता हूं"।
- dar_slave आर्काइव फ़ाइल के इंडेक्स को पढ़ता है, यह पता लगाता है कि फ़ाइल किस ऑफसेट पर स्थित है, और इसे stdout में पास करता है, जो dar पढ़ता है और परिणामस्वरूप फाइल को डिस्क पर लिखता है।
कठिनाई फ़ाइल को dar_slave से dar में स्थानांतरित करना है। इस तरह के "रिंग" डेटा ट्रांसफर के लिए हमें mkfifo का उपयोग करके एक छोटी बैसाखी बनानी होगी:
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .