यह बैकअप रणनीति कैसे काम कर सकती है?


2

मैं एक बहुत ही सरल बैकअप रणनीति को स्क्रिप्ट करने की कोशिश कर रहा हूं। यहाँ सामान्य विचार है।

दैनिक - पिछले दिन के बैकअप को ओवरराइट करते हुए, rsync का उपयोग करके पूरे फाइल सिस्टम का बैकअप लें।

साप्ताहिक - पिछले सप्ताह के बैकअप को अधिलेखित करते हुए, सप्ताह में एक बार दैनिक बैकअप की प्रतिलिपि एक अलग फ़ोल्डर में रखें।

मासिक - महीने के पहले दिन पिछले महीने के बैकअप को अधिलेखित करने के लिए एक महीने के लिए रखने के लिए एक असंतुष्ट बैकअप फ़ोल्डर में दैनिक बैकअप की प्रतिलिपि बनाएँ।

यहां यह बताया गया है: हर दिन मैं साप्ताहिक बैकअप करता हूं, साप्ताहिक और दैनिक बैकअप समान होंगे, इसलिए मेरे पास कुछ दिन पुराना बैकअप नहीं होगा।

यदि यह दिन महीने के पहले दिन गिरता है तो सभी बैकअप समान होंगे, कई सारे बैकअप होने के पूरे बिंदु कम हो जाएंगे।

मैं अंतरिक्ष पर सीमित हूं और तीन बैकअप मेरे लिए सब कुछ है। मैं VMs और वेबसाइटों का समर्थन कर रहा हूं, इसलिए मुझे लंबी अवधि की आवश्यकता नहीं है, लेकिन मैं चाहता हूं कि कुछ दिनों के लिए कोई त्रुटि न होने पर बैकअप वापस आ जाए।

किसी को भी इस रणनीति को फिर से काम करने के लिए कुछ विचार हैं? इसलिए मेरे पास ऐसी अवधि नहीं है जहां सभी बैकअप समान हैं।


क्या आप पूर्ण बैकअप के बजाय अलग-अलग या वृद्धिशील बैकअप का उपयोग कर सकते हैं?
स्कॉट चैंबरलेन

1
एक समस्या जो मैंने rsync के साथ देखी है वह यह है कि यह VM इमेज में छोटे बदलावों को कॉपी नहीं कर सकती है। इसके बजाय, चूंकि img हमेशा अलग होता है, इसलिए पूरी फाइल कॉपी हो जाती है (बड़ी .img फाइलें)। मुझे लगता है कि अगर rdiff ने रोलबैक को अपने आसपास रखा, तो मैं बहुत तेज़ी से अंतरिक्ष से बाहर चला जाऊंगा।
डैन

1
अधिक हार्ड ड्राइव स्पेस खरीदें। इतना भी नहीं है कि किया जा सके। मैंने अपने आप में rdiff का बहुत उपयोग किया है, लेकिन VM के बारे में मुझे नहीं पता है कि यह बदलावों को चुनता है और उन चंक साइज़ को कॉन्फ़िगर करने योग्य है। यह डेटा साइज बनाम सिग्नेचर साइज का ट्रेड ऑफ होगा।
स्कॉट चैंबरलेन

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

2
बस गुरुवार को साप्ताहिक करें और दैनिक बैकअप हर रोज होता है। यह आपको कहना है पर बनाया करने के लिए बैकअप की अनुमति देता है Thursdayऔर Fridayवैसे ही मासिक अद्यतन पहले पर होना चाहिए MondayयाTuesday
Ramhound

जवाबों:


2

मैं एक स्क्रिप्ट लिखूंगा जो यह जांच करे कि क्या बैकअप 1,7 या 30 दिन से अधिक पुराना है और तदनुसार कार्य करता है। आपने ऐसा नहीं कहा है, लेकिन मुझे लगता है कि आप लिनक्स का उपयोग कर रहे हैं (मैंने आपके सवाल में टैग जोड़ा है ) और आप एक दूरस्थ सर्वर का समर्थन कर रहे हैं। पहला कदम यह होगा कि थोड़ी स्क्रिप्ट लिखी जाए जो आपकी rsyncकमांड को चलाए और बैकअप खत्म होने पर रिमोट सर्वर पर एक फाइल भी बनाए । इसका उपयोग दोनों को यह बताने के लिए किया जाएगा कि क्या कोई बैकअप वर्तमान में चल रहा है और बैकअप की आयु की जांच करने के लिए (मेरा मानना ​​है कि जब आप फ़ाइलों का बैकअप लेते हैं तो आप मूल टाइमस्टैम्प रख रहे हैं, इसलिए आप फ़ाइलों से स्वयं दिनांक प्राप्त नहीं कर सकते):

रुपी स्क्रिप्ट (यह मानता है कि आपके पास दूरस्थ सर्वर तक पासवर्ड-कम पहुंच है):

#!/usr/bin/env bash
ssh user@remote rm /path/to/daily/backup/backup_finished.txt
rsync /path/to/source/ user@remote:/path/to/daily/backup/
ssh user@remote touch /path/to/daily/backup/backup_finished.txt

पर स्थानीय मशीन, एक की स्थापना की क्रॉन जॉब कि दैनिक बैकअप करता है:

@daily rsync_script.sh

पर दूरस्थ मशीन, आप स्क्रिप्ट मैं हर कुछ घंटों के नीचे दे चलाने की आवश्यकता:

@hourly check_backup.sh

Check_backup.sh स्क्रिप्ट:

#!/usr/bin/env bash

daily=/path/to/daily;
weekly=/path/to/weekly;
monthly=/path/to/monthly;

## The dates will be measured in seconds since the UNIX epoch, 
## so we need to translate weeks and months (31 days) to seconds.
week=$((60*60*24*7));
month=$((60*60*24*31));  

## Make sure no backup is currently running
if [ ! -e $daily/backup_finished.txt ]; then 
 echo "A backup seems to be running, exiting." && exit;
fi

## Get the necessary dates
weekly_backup_date=$(stat -c %Y $weekly/backup_finished.txt)
monthly_backup_date=$(stat -c %Y $monthly/backup_finished.txt)
now=$(date +%s)
monthly_backup_age=$((now - monthly_backup_date))
weekly_backup_age=$((now - weekly_backup_date))

## Check the age of the daily backup and copy it accordingly
 if [[ "$monthly_backup_age" -gt "$month" ]]; then

    ## Copy unless the current $daily is identical to $weekly
    diff $daily $weekly > /dev/null ||
    ## Delete the previous backup and copy the new one over
    rm -rf $monthly && cp -rp $daily $monthly
fi
## Copy the weekly backup if it is older than a week but only
## if it is not identical to $monthly. The -r flag makes cp 
## recursive and the -p flag makes it preserve dates and permissions. 
if [[ "$weekly_backup_age" -gt "$week" ]]; then
    ## Copy unless the current $daily is identical to $monthly
    diff $daily $monthly > /dev/null ||
    rm -rf $weekly && cp -rp $daily $weekly
fi

तो, यह स्क्रिप्ट ( check_backup.sh) आपके बैकअप सर्वर पर हर घंटे चलाई जाएगी। चूँकि यह तब तक कुछ नहीं करता जब तक कि बैकअप पर्याप्त पुराना न हो, इसलिए इसे इतनी बार चलाने की कोई समस्या नहीं है। अब, हर बार एक दैनिक बैकअप 31 दिनों से अधिक पुराना है, इसे monthlyनिर्देशिका में कॉपी किया जाएगा और monthlyविल की सामग्री हटा दी जाएगी। इसी तरह साप्ताहिक के लिए जब बैकअप 7 दिन से अधिक पुराना हो।

मैं diffबैकअप की तुलना करने के लिए उपयोग कर रहा हूं । इसका मतलब यह है कि हम में कॉपी कर देंगे dailyकरने के लिए weeklyकरता है, तो वर्तमान weeklyएक सप्ताह से अधिक पुराना है , लेकिन केवल अगर बैकअप कॉपी कर दिए जाएंगे (वर्तमान daily) मौजूदा रूप में ही नहीं है weeklyऔर इसी के लिए monthly। उदाहरण के लिए, यदि स्क्रिप्ट अभी-अभी चली है और उसने देखा है कि मासिक बैकअप वर्तमान साप्ताहिक के समान ही है, तो यह मौजूदा को अधिलेखित नहीं करेगा monthly। हालांकि, एक सप्ताह बाद जब weeklyवसीयत बदल गई है, तब वह monthlyएक की नकल करेगा ।

इसका शुद्ध परिणाम यह है कि किसी भी समय आपके पास न्यूनतम दो अलग-अलग बैकअप होने चाहिए और आमतौर पर आपके पास तीन होंगे। सबसे खराब स्थिति यह है कि कुछ विफल रहता है और आपके पास एक सप्ताह पुराना बैकअप नहीं है, बस एक महीने पुराना है या इसके विपरीत , आपके पास एक महीने पुराना नहीं है, लेकिन आपके पास पिछले सप्ताह का है।


1

यह एक लंबी टिप्पणी है, जो दूसरों को पहले ही बता चुकी है।

सबसे पहले, उपयोग किए जाने वाले वास्तविक डिस्क स्थान की मात्रा को कम करने के लिए rsync के साथ हार्डलिंक और वृद्धिशील बैकअप का उपयोग करें: प्रत्येक अतिरिक्त बैकअप केवल फ़ाइलों के आकार को अलग करेगा। यदि आप बड़ी वीएम छवियों का बैकअप ले रहे हैं, तो मैं इमेज फ़ाइलों का बैकअप न लेने का सुझाव दूंगा, लेकिन वास्तव में उनकी फाइलसिस्टम सामग्री (जैसा कि @Michael ने पहले ही टिप्पणी की थी)। Rsnapshot जैसे उपकरण को ठीक काम करना चाहिए, हालांकि (अनुभव से) यह अपनी खुद की स्क्रिप्ट को रोल करने के लिए काफी आसान है।

फिर पुराने बैकअप को हटा दें, पुराने को अधिक लंबे अंतराल पर रखते हुए। मैंने एक बार इसे कॉन्फ़िगर करने की अनुमति देने के लिए एक कार्यक्रम लिखा था, यह यहां पाया जा सकता है (कहा जाता है bu-rmselect)।


1

मैं कमांड लाइन प्रोग्राम टाइमगैप का लेखक हूं , जो आपको समय-समय पर बनाए गए बैकअप को फ़िल्टर करने और पुराने लोगों को एक तरह से अस्वीकार करने (सूची हटाने, या स्थानांतरित करने) की अनुमति देता है ताकि स्वीकृत बैकअप के बीच "समय अंतराल" बढ़ती उम्र के साथ बड़ा हो जाए बैकअप।

निम्नलिखित स्थिति पर विचार करें: *.tar.gzवर्तमान कार्यशील निर्देशिका में सभी फाइलें किसी न किसी चीज की दैनिक स्नैपशॉट होती हैं। अब कार्य पिछले 20 दिनों में से प्रत्येक के लिए एक स्नैपशॉट को स्वीकार करना है, पिछले 8 सप्ताह में से प्रत्येक के लिए एक है, और पिछले 12 महीनों में से प्रत्येक के लिए एक है, और अन्य सभी को निर्देशिका में स्थानांतरित करना है notneededanymore। टाइमपास का उपयोग करना, यह एक सरल कार्य है:

$ mkdir notneededanymore
$ timegaps --move notneededanymore days20,weeks8,months12 *.tar.gz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.