This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
snapshot_backup [2011/09/20 20:46] k2patel [C0D3s] |
snapshot_backup [2011/09/23 15:14] k2patel [bash config] |
||
---|---|---|---|
Line 32: | Line 32: | ||
</code> | </code> | ||
- | === db.pl === | + | ==== bash config ==== |
+ | <code bash | config_bash> | ||
+ | # this file contain what need to be backup. | ||
+ | # Follow the format of value | ||
+ | # instance<serial number must be unique> = <Volume ID> <Retention Freq.> <total Retention> | ||
+ | |||
+ | #instance1="vol-2222pqrs 7 2" | ||
+ | #instance2="vol-1111abcd 1 1" | ||
+ | </code> | ||
+ | |||
+ | ==== db.pl ==== | ||
<code perl | db.pl > | <code perl | db.pl > | ||
Line 97: | Line 107: | ||
} | } | ||
$dbh->disconnect; | $dbh->disconnect; | ||
+ | </code> | ||
+ | |||
+ | ==== backup.sh ==== | ||
+ | |||
+ | <code bash | backup.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # developed by k2patel | ||
+ | # k2patel@hotmail.com | ||
+ | |||
+ | ############# Read ME ############### | ||
+ | # this Script will do the Backup and remove old copy. | ||
+ | # This script work based on existing DB Entry. | ||
+ | # When you initialize it only create one copy rest of the dummy entry need to be entered by you. | ||
+ | ##################################### | ||
+ | |||
+ | source config_bash | ||
+ | |||
+ | BASE=$(pwd) | ||
+ | BASE="$( cd "$( dirname "$0" )" && pwd )" | ||
+ | cd $BASE | ||
+ | DATE=$(date +%Y%m%d) | ||
+ | perl=$(which perl) | ||
+ | |||
+ | |||
+ | for inst in instance{1..10} | ||
+ | do | ||
+ | eval var1=\$$inst | ||
+ | arry=($var1) | ||
+ | if [[ $1 == "init" ]]; then | ||
+ | if [ "$var1" != "" ] | ||
+ | then | ||
+ | vol=${arry[0]} | ||
+ | echo "Running backup for $vol stored in " | ||
+ | newsnp=`$perl create_snap.pl $vol $DATE` | ||
+ | $perl db.pl add $vol $newsnp $DATE | ||
+ | echo "waiting." | ||
+ | $perl snap_status.pl $newsnp | ||
+ | echo "done" | ||
+ | fi | ||
+ | else | ||
+ | if [ "$var1" != "" ] | ||
+ | then | ||
+ | freq=${arry[1]} | ||
+ | vol=${arry[0]} | ||
+ | iter=${arry[2]} | ||
+ | lookup=$(echo "$iter * $freq" | bc) | ||
+ | isit=`date -d "now -$lookup days" +%Y%m%d` | ||
+ | isit_nxt=`date -d "now -$freq days" +%Y%m%d` | ||
+ | lstnc=(`$perl $BASE/db.pl get "$vol" "$isit"`) | ||
+ | if [ "$isit" == "${lstnc[1]}" ];then | ||
+ | echo "Running backup for $vol stored in " | ||
+ | newsnp=`$perl create_snap.pl $vol $DATE` | ||
+ | $perl db.pl add $vol $newsnp $DATE | ||
+ | echo "waiting." | ||
+ | $perl snap_status.pl $newsnp | ||
+ | echo "done" | ||
+ | lstnx=(`$perl $BASE/db.pl get "$vol" "$isit_nxt"`) | ||
+ | if [ "${lstnx[0]}" == '' ]; then | ||
+ | echo "Notify Admin" | ||
+ | else | ||
+ | if [ "${lstnc[0]}" != '' ]; then | ||
+ | $perl delete_snap.pl ${lstnc[0]} | ||
+ | fi | ||
+ | fi | ||
+ | else | ||
+ | echo "backup is not needed" | ||
+ | fi | ||
+ | fi | ||
+ | fi | ||
+ | done | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== create snapshot ==== | ||
+ | |||
+ | <code perl | create_snap.pl> | ||
+ | #!/usr/bin/perl -w | ||
+ | # Created / written by k2patel@hotmail.com | ||
+ | # this script create snapshot for given volume. | ||
+ | |||
+ | use Data::Dumper; | ||
+ | use strict; | ||
+ | #use Date::Calc qw( :all ); | ||
+ | |||
+ | use lib "/usr/share/perl5/vendor_perl"; | ||
+ | use Net::Amazon::EC2; | ||
+ | |||
+ | # Configuration. | ||
+ | require "config"; | ||
+ | |||
+ | # our $ec2; | ||
+ | our $awsId; | ||
+ | our $awsKey; | ||
+ | our $awsinstance; | ||
+ | |||
+ | my($num_args) = $#ARGV + 1; | ||
+ | if ($num_args < 2) { | ||
+ | print "\nUsage: create_snap.pl <Volume_ID> <Today>\n"; | ||
+ | print "This will create Snapshot for given Volume\n"; | ||
+ | print "Format for today's Date must be \"YYYYMMDD\"\n"; | ||
+ | exit 1; | ||
+ | } | ||
+ | |||
+ | ## Define Access Keys for Amazon. | ||
+ | my $ec2 = Net::Amazon::EC2->new( | ||
+ | AWSAccessKeyId => $awsId, | ||
+ | SecretAccessKey => $awsKey | ||
+ | ); | ||
+ | |||
+ | my @result = $ec2->create_snapshot( | ||
+ | VolumeId => $ARGV[0], | ||
+ | Description => $ARGV[1] | ||
+ | ); | ||
+ | |||
+ | print $result[0]->{snapshot_id}; | ||
+ | #print Dumper \@result; | ||
</code> | </code> |