`cp -al` स्नैपशॉट जिसकी हार्ड लिंक को एडिट करने पर एक नई फाइल को निर्देशित किया जाता है


11

मैं नियमित रूप से एक बड़े फ़ोल्डर का स्नैपशॉट लेने की कोशिश कर रहा हूं।

मैं यहाँ पढ़ लिया है: http://www.mikerubel.org/computers/rsync_snapshots/#Incremental
कि cp -alबस हार्ड लिंक को कॉपी करके एक फ़ोल्डर का एक स्नैपशॉट लेता।

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

मैं उसे कैसे प्राप्त कर सकता हूं?

पी एस मैंने कोशिश की rsync -a --delete --link-dest=../backup.1 source_directory/ backup.0/, लेकिन यह एक ही समस्या है।

जवाबों:


7

इसी तरह हार्डलिंक काम करती है। लेकिन, इसके आसपास तरीके हैं:

विकल्पों में से कुछ दिमाग में आते हैं:

  • कॉपी-ऑन-राइट फ़ाइलों के लिए समर्थन के साथ एक फाइल सिस्टम का उपयोग करें, जैसे btrfs। बेशक, क्या आप btrfs का उपयोग कर रहे थे, आप केवल इसके मूल स्नैपशॉट का उपयोग करेंगे ... यदि आपका फाइल सिस्टम इसका समर्थन करता है, तो आप उपयोग कर सकते हैं cp --reflink=always। दुर्भाग्य से, ext4 इसका समर्थन नहीं करता है।
  • केवल अपने स्नैपशॉट में हार्डलिंक साझा करें, मूल के साथ नहीं। यही है, पहली बार जब आप किसी फ़ाइल का दिया गया संस्करण देखते हैं, तो उसे स्नैपशॉट पर कॉपी करें। लेकिन अगली बार, इसे पिछले स्नैपशॉट में एक से लिंक करें। (यह निश्चित नहीं है कि मैं एक दशक पहले क्या कार्यक्रम करता था - लेकिन खोज में परिवर्तन, ओबनम, स्टोरबैकअप, और rsnapshot शामिल हैं)
  • आपकी फ़ाइलों को कैसे बदला जा रहा है, इस पर निर्भर करते हुए, आप यह गारंटी दे सकते हैं कि उन्हें बदलने के लिए एक लिखित अस्थायी / नाम का उपयोग किया जाता है, फिर वह हार्डलिंक को तोड़ देगा - इसलिए स्नैपशॉट में संस्करण प्राचीन रहेगा। यह कम सुरक्षित है, हालाँकि, बग्स आपके स्नैपशॉट को दूषित कर सकता है।
  • संपूर्ण फाइलसिस्टम का LVM स्नैपशॉट लें।

बेशक, एक अन्य विकल्प है- एक उचित बैकअप सिस्टम का उपयोग करें। उनमें से अधिकांश केवल बैकअप परिवर्तित फ़ाइलों का प्रबंधन कर सकते हैं।


बड़े पैमाने पर फ़ोल्डर का बैकअप लेने के लिए आप क्या सलाह देते हैं?
हरमन इंग्लैड्ससन

मैं एक सर्वर के लिए rsync का उपयोग करने के बारे में सोच रहा था, जिसमें स्नैपशॉट के लिए नियमित रूप से cp -al करने के लिए एक cronjob है .. rsync के साथ-साथ और भी अधिक प्रतियों के लिए। वह कैसा लगता है?
हरमन इंग्लैड्ससन

@HermannIngjaldsson अच्छी तरह से, यह इस बात पर निर्भर करता है कि आप अपना बैकअप कैसे करते हैं। निजी तौर पर, मैं इसे अपने बकुला सेटअप में शामिल करूंगा - लेकिन मैं यह सलाह नहीं दूंगा कि जब तक आपके पास मशीनों का एक गुच्छा नहीं है, या पहले से ही बकुला को नहीं जानते हैं। तो, मुझे लगता है कि मैं आपको पहले rsnapshot का प्रयास करने का सुझाव दूंगा।
derobert

rsnapshotअच्छा है
developerbmw

4

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

प्रतिस्थापन रणनीति का उपयोग करने के लिए कुछ अनुप्रयोगों को कॉन्फ़िगर किया जा सकता है। कुछ एप्लिकेशन डिफ़ॉल्ट रूप से प्रतिस्थापन रणनीति का उपयोग करते हैं, लेकिन ओवरराइट रणनीति का उपयोग तब करते हैं जब वे एक फ़ाइल को कई हार्ड लिंक के साथ देखते हैं, ठीक उसी प्रकार जैसे कि हार्ड लिंक को तोड़ना नहीं है। यदि आप अपने एप्लिकेशन को ओवरराइट करने के बजाय बदलने के लिए कॉन्फ़िगर कर सकते हैं तो आपकी वर्तमान स्नैपशॉट तकनीक काम करेगी।

फ़्लो-गाय कई हार्ड लिंक के साथ फ़ाइलों पर प्रतिस्थापन रणनीति को व्यवस्थित रूप से उपयोग करने के लिए कार्यक्रमों को संशोधित करता है।

वैकल्पिक रूप से, आप अपनी फ़ाइलों को एक फाइल सिस्टम पर संग्रहीत कर सकते हैं जो कॉपी-ऑन-राइट या डिडुप्लीकेशन करता है, या इसमें स्नैपशॉट सुविधा होती है, और हार्ड लिंक के बारे में चिंता न करें: Btrfs या Zfs । आपकी विभाजन योजना के आधार पर, LVM स्नैपशॉट का उपयोग करना एक विकल्प हो सकता है।

मेरी सिफारिश उचित स्नैपशॉट उपकरण का उपयोग करना है। विश्वसनीय बैकअप बनाना आश्चर्यजनक रूप से कठिन है। आप शायद rsnapshot चाहते हैं ।


2

निम्नलिखित एक रूबी स्क्रिप्ट है जिसे मैंने लिखा था कि "cp -al" और rsync को एक अच्छी स्क्रिप्ट में लपेटता है जिसे मैन्युअल रूप से या क्रॉन के माध्यम से चलाया जा सकता है। गंतव्य स्थानीय या दूरस्थ (ssh के माध्यम से) हो सकता है:

घेटो टिमेमाचिन

आपके प्रश्न का मूल उत्तर, जैसा कि पिछली टिप्पणी में बताया गया है, स्रोत को कड़ी से अलग रखने की आवश्यकता है। पूर्व, अपने घर निर्देशिका का दैनिक बैकअप ग्रहण करें:

स्रोत:

  • / घर / flakrat

गंतव्य:

  • / डेटा / बैकअप / दैनिक
    • /सोमवार
    • /मंगलवार
    • / बुधवार
    • /गुरूवार
    • ...

कल के बैकअप के खिलाफ "cp -al" चलाकर हार्ड लिंक बनाए गए हैं। कहो कि यह मंगलवार की सुबह है जब आप इसे चलाते हैं:

cd /data/backup/daily

rm -rf tuesday

cp -al monday tuesday

rsync -a --delete /home/flakrat /data/backup/daily/tuesday/


0

rdiff-backup आपको जो करना चाहता है, करता है, उसे देखें।

Rsync का उपयोग करके आपको पहले हार्ड लिंक का उपयोग न करके एक पूर्ण बैकअप बनाना होगा। अगला बैकअप पिछले बैकअप और इसके हार्ड लिंक को इंगित कर सकता है। इस तरह से आपके बैकअप आपके काम करने वाली फ़ाइलों (जिन्हें आप संशोधित कर रहे हैं) से लिंक नहीं हैं। उदाहरण। अगर मेरा पिछला बैकअप इतना फोल्डर backup.01 था तो मेरी बैकअप स्क्रिप्ट पहले फोल्डर को बढ़ाकर उन्हें एक नाम बदलकर बैकअप ले सकती है। तब स्क्रिप्ट एक नया खाली फ़ोल्डर बनाता है जिसे backup.01 कहा जाता है। इसके बाद नए फोल्डर में नए बैकअप rscync करेगा और backup.02 के लिए हार्ड लिंक होगा ताकि केवल नई फाइलें बैकअप में कोई स्थान ले सकेंगी। Rsync आदेश कुछ इस तरह दिखाई देगा: rsync-surt sourcepath backuppath / backup.01 --link-dest = backuppath / backup.02

तो आप देख सकते हैं, बैकअप पथ पर सभी हार्ड लिंकिंग हो रही है। इस तरह आपको अपने स्रोत पथ में फ़ाइलों को संशोधित करते समय लिखने पर कॉपी के बारे में चिंता करने की ज़रूरत नहीं है।

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