কীভাবে রাখবেন: এক সপ্তাহের জন্য দৈনিক ব্যাকআপ, এক মাসের জন্য সাপ্তাহিক, এক বছরের জন্য মাসিক এবং তার পরে বার্ষিক


14

আমার এই সার্ভারে প্রতিদিন ডেটা এবং কনফিগার করা ফাইলের ব্যাকআপ নেওয়া দরকার। আমার রাখা দরকার:

  • এক সপ্তাহের জন্য দৈনিক ব্যাকআপ
  • এক মাসের জন্য সাপ্তাহিক ব্যাকআপ
  • এক বছরের জন্য মাসিক ব্যাকআপ
  • তার পরে বার্ষিক ব্যাকআপ

ক্রোন থেকে প্রতিদিন চালানো শেল স্ক্রিপ্টের মাধ্যমে এগুলি সবই সম্পাদিত।

10 বছর চলার পরে ব্যাকআপ ফাইলগুলি এভাবে দেখা উচিত:

blog-20050103.tar.bz2
blog-20060102.tar.bz2
blog-20070101.tar.bz2
blog-20080107.tar.bz2
blog-20090105.tar.bz2
blog-20100104.tar.bz2
blog-20110103.tar.bz2
blog-20120102.tar.bz2
blog-20130107.tar.bz2
blog-20130902.tar.bz2
blog-20131007.tar.bz2
blog-20131104.tar.bz2
blog-20131202.tar.bz2
blog-20140106.tar.bz2
blog-20140203.tar.bz2
blog-20140303.tar.bz2
blog-20140407.tar.bz2
blog-20140505.tar.bz2
blog-20140602.tar.bz2
blog-20140707.tar.bz2
blog-20140728.tar.bz2
blog-20140804.tar.bz2
blog-20140811.tar.bz2
blog-20140816.tar.bz2
blog-20140817.tar.bz2
blog-20140818.tar.bz2
blog-20140819.tar.bz2
blog-20140820.tar.bz2
blog-20140821.tar.bz2
blog-20140822.tar.bz2

9
... আমার সাধারণ পরামর্শটি হ'ল " বাকুলা ব্যবহার করুন " (বা অন্য কোনও ব্যাকআপ সফ্টওয়্যার যা আপনাকে ধরে রাখার এবং ঘূর্ণন পরিচালনা করতে পারে) :-)
ভোরেটাক 7

1
এই প্রশ্নটি আমাকে ক্রনিকল < github.com / ক্রেমার / ক্রোনিকাল > লিখতে বাধ্য করেছে কারণ গৃহীত উত্তরটিতে দৈনিক / সাপ্তাহিক / ইত্যাদি ফোল্ডারে নকল ব্যাকআপের স্পষ্ট ত্রুটি রয়েছে। ক্রোনিকাল সিমলিংকের উপর নির্ভর করে এবং ঘূর্ণনের যত্ন নেয়, অন্তর্নিহিত ফাইলগুলি মুছে ফেলা হয় যখন কোনও ফোল্ডারে এতে নির্দেশিত সিমনলিঙ্ক থাকে না।
ক্রেমার 18

উত্তর:


29

আপনি এটি গুরুতরভাবে ওভার ইঞ্জিনিয়ারিং করছেন। খারাপভাবে।

এখানে কিছু সিউডোকোড:

  • প্রতিদিন:
    • dailyডিরেক্টরিতে রেখে একটি ব্যাকআপ তৈরি করুন
    • সর্বশেষ 7 dailyব্যাকআপ ব্যতীত সমস্ত কিছু সরিয়ে ফেলুন
  • প্রতি সপ্তাহে:
    • weeklyডিরেক্টরিতে রেখে একটি ব্যাকআপ তৈরি করুন
    • শেষ 5 weeklyব্যাকআপ ব্যতীত সমস্ত কিছু সরিয়ে ফেলুন
  • প্রতি মাসে:
    • monthlyডিরেক্টরিতে রেখে একটি ব্যাকআপ তৈরি করুন
    • সর্বশেষ 12 monthlyব্যাকআপ ব্যতীত সমস্ত কিছু সরিয়ে ফেলুন
  • প্রত্যেক বছর:
    • yearlyডিরেক্টরিতে রেখে একটি ব্যাকআপ তৈরি করুন

আপনার যে পরিমাণ যুক্তি প্রয়োগ করতে হবে তা প্রায় একই, তাই না? চুমু খেতে হবে।

এটি সহজ দেখাচ্ছে:

s3cmd ls s3://backup-bucket/daily/ | \
    awk '$1 < "'$(date +%F -d '1 week ago')'" {print $4;}' | \
    xargs --no-run-if-empty s3cmd del

অথবা, বয়সের পরিবর্তে ফাইল গণনা দ্বারা:

s3cmd ls s3://backup-bucket/daily/ | \
    awk '$1 != "DIR"' | \
    sort -r | \
    awk 'NR > 7 {print $4;}' | \
    xargs --no-run-if-empty s3cmd del

আমার আসলে আলাদা ডিরেক্টরি নেই। এটি একটি এস 3 বালতিতে ফাইলগুলি ফেলে দেওয়ার জন্য লেখা হয়েছিল। সবকিছু যখন এক জায়গায় হয়ে যায়, আপনি যেভাবে যুক্ত হন তা বিবেচনা না করে আপনার মোট পরিমাণ যুক্তি প্রয়োগ করা দরকার need
ফ্লোরিন আন্দ্রেয়

5
স্পষ্টতই তা হয় না।
ম্যাডহ্যাটার

6

যদি আপনি কেবল রাখতে চান, উদাহরণস্বরূপ, 8 টি দৈনিক ব্যাকআপ এবং 5 সাপ্তাহিক (প্রতি রবিবার) ব্যাকআপ রাখে, এটি এটির মতো কাজ করে:

for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
echo ${!keep[@]}

আজ (2014-11-10) হিসাবে, এটি আউটপুট দেবে:

20141012 20141019 20141026 20141102 20141103 20141104
20141105 20141106 20141107 20141108 20141109 20141110

আপনার অনুশীলন হিসাবে, আপনাকে কেবলমাত্র সমস্ত ব্যাকআপ ফাইল মুছতে হবে যাদের নাম keep-আরেটিতে আসে না।

আপনি যদি 13 টি মাসিক ব্যাকআপ (প্রতিটি মাসের প্রথম রবিবার) এবং 6 বার্ষিক ব্যাকআপ (প্রতিটি বছরের প্রথম রবিবার) রাখতে চান তবে জিনিসগুলি কিছুটা জটিল হয়ে উঠবে:

for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
for i in {0..12}; do
        DW=$(($(date +%-W)-$(date -d $(date -d "$(date +%Y-%m-15) -$i month" +%Y-%m-01) +%-W)))
        for (( AY=$(date -d "$(date +%Y-%m-15) -$i month" +%Y); AY < $(date +%Y); AY++ )); do
                ((DW+=$(date -d $AY-12-31 +%W)))
        done
        ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
for i in {0..5}; do
        DW=$(date +%-W)
        for (( AY=$(($(date +%Y)-i)); AY < $(date +%Y); AY++ )); do
                ((DW+=$(date -d $AY-12-31 +%W)))
        done
        ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
echo ${!keep[@]}

আজ (2014-11-10) হিসাবে, এটি আউটপুট দেবে:

20090104 20100103 20110102 20120101 20130106 20131103
20131201 20140105 20140202 20140302 20140406 20140504
20140601 20140706 20140803 20140907 20141005 20141012
20141019 20141026 20141102 20141103 20141104 20141105
20141106 20141107 20141108 20141109 20141110

উপরের মতো একই, এই অ্যারেটিতে পাওয়া যায় না এমন সমস্ত ব্যাকআপ ফাইলগুলি মুছুন।


ভাল, এবং আমি কিভাবে করব rm /dir/*.* except keep[@]?
তাকেশিন

0

একটি মন্তব্যে উল্লিখিত হিসাবে, ব্যাকআপ পরিচালনার সফ্টওয়্যারটিতে ব্যাকআপ পরিচালনা করার কাজটি অর্পণ করা সাধারণত সর্বোত্তম।

আপনার প্রয়োজনীয়তা অনুসারে পুরানো ব্যাকআপগুলি মোছার জন্য এখানে ব্যাশে যুক্তি রয়েছে

#!/bin/sh

delete() {
    echo "Deleting $1"
}

DOW=$(date +%u)

if [ $DOW -eq 1 ]; then
    DATE_DAY=$(date -d "-28 days" +"%d")
    if [ $DATE_DAY -gt 7 ]; then
        DATE=$(date -d "-28 days" +"%Y-%m-%d")
        delete $DATE
    fi

    DATE_DAY=$(date -d "-364 days" +"%d")
    DATE_MONTH=$(date -d "-364 days" +"%m")
    if [ $DATE_DAY -le 7 ] && [ $DATE_MONTH -gt 1 ]; then
        DATE=$(date -d "-364 days" +"%Y-%m-%d")
        delete $DATE
    fi
else
    DATE=$(date -d "-7 days" +"%Y-%m-%d")
    delete $DATE
fi

পিএইচপি কোড দেখায় যে ফাইলগুলি 3520 দিন চলার পরে থাকবে

https://ideone.com/n2ymQy

Array
(
    [0] => 2005-01-03
    [1] => 2006-01-02
    [2] => 2007-01-01
    [3] => 2008-01-07
    [4] => 2009-01-05
    [5] => 2010-01-04
    [6] => 2011-01-03
    [7] => 2012-01-02
    [8] => 2013-01-07
    [9] => 2013-09-02
    [10] => 2013-10-07
    [11] => 2013-11-04
    [12] => 2013-12-02
    [13] => 2014-01-06
    [14] => 2014-02-03
    [15] => 2014-03-03
    [16] => 2014-04-07
    [17] => 2014-05-05
    [18] => 2014-06-02
    [19] => 2014-07-07
    [20] => 2014-07-28
    [21] => 2014-08-04
    [22] => 2014-08-11
    [23] => 2014-08-16
    [24] => 2014-08-17
    [25] => 2014-08-18
    [26] => 2014-08-19
    [27] => 2014-08-20
    [28] => 2014-08-21
    [29] => 2014-08-22
)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.