User Tools

Site Tools


snapshot_backup

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
snapshot_backup [2011/09/20 20:44]
k2patel [C0D3s]
snapshot_backup [2011/09/23 15:14]
k2patel [C0D3s]
Line 20: Line 20:
   * delete_snap.pl ​    # Delete Snapshot which is out of retention.   * delete_snap.pl ​    # Delete Snapshot which is out of retention.
  
-==== C0D3s ====+===== C0D3s =====
  
-=== config ===+==== config ​====
  
 <code bash | config > <code 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 49: Line 59:
  print "​Creating Database...";​  print "​Creating Database...";​
  $dbh = DBI->​connect( "​dbi:​SQLite:​machine.db"​ ) || die "​Cannot connect: $DBI::​errstr";​  $dbh = DBI->​connect( "​dbi:​SQLite:​machine.db"​ ) || die "​Cannot connect: $DBI::​errstr";​
- $dbh->​do( "​CREATE TABLE TVR1 ( v_ID, s_ID, Dte )" );+ $dbh->​do( "​CREATE TABLE DESK ( v_ID, s_ID, Dte )" );
  $dbh->​disconnect;​  $dbh->​disconnect;​
  
Line 70: Line 80:
  exit 1;  exit 1;
  }else{  }else{
- $dbh->​do( "​INSERT INTO TVR1 VALUES ( '​$ARGV[1]',​ '​$ARGV[2]',​ '​$ARGV[3]'​ )" );+ $dbh->​do( "​INSERT INTO DESK VALUES ( '​$ARGV[1]',​ '​$ARGV[2]',​ '​$ARGV[3]'​ )" );
  }  }
  }  }
Line 78: Line 88:
  exit 1;  exit 1;
  }else{  }else{
- $dbh->​do( "​DELETE FROM TVR1 WHERE s_ID = '​$ARGV[2]'​ AND Dte = '​$ARGV[3]'"​ );+ $dbh->​do( "​DELETE FROM DESK WHERE s_ID = '​$ARGV[2]'​ AND Dte = '​$ARGV[3]'"​ );
  }  }
  }  }
  case "​get"​ {  case "​get"​ {
- $res = $dbh->​selectall_arrayref( "​SELECT s_ID, Dte FROM TVR1 WHERE v_ID = '​$ARGV[1]'​ AND Dte = '​$ARGV[2]'"​ );+ $res = $dbh->​selectall_arrayref( "​SELECT s_ID, Dte FROM DESK WHERE v_ID = '​$ARGV[1]'​ AND Dte = '​$ARGV[2]'"​ );
  foreach( @$res ) {  foreach( @$res ) {
  #print "​$_->​[0] $_->[1] $_->​[2]\n";​  #print "​$_->​[0] $_->[1] $_->​[2]\n";​
Line 90: Line 100:
  else  else
  {  {
- $res = $dbh->​selectall_arrayref( "​SELECT * FROM TVR1" );+ $res = $dbh->​selectall_arrayref( "​SELECT * FROM DESK" );
  foreach( @$res ) {  foreach( @$res ) {
  print "​$_->​[0] $_->[1] $_->​[2]\n";​  print "​$_->​[0] $_->[1] $_->​[2]\n";​
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>​
snapshot_backup.txt · Last modified: 2020/08/10 02:35 (external edit)