Created
April 20, 2015 14:54
-
-
Save bseib/be02153a05a8239f4126 to your computer and use it in GitHub Desktop.
Script to backup filesystems everyday with a unix 'dump' command.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/local/bin/perl -w | |
# | |
# $Id: system_backup,v 1.13 2006/09/15 02:48:23 bseib Exp $ | |
## | |
# 'system_backup' | |
# | |
# Description: Run the unix 'dump' command on various filesystems, using a different | |
# dump level depending on the day of the month. Day 1 always gets a full | |
# level zero dump. A "towers of hanoi"-ish pattern is used for dump levels. | |
# | |
# Author: Broc Seib | |
# | |
# Date: Thu Apr 1 21:21:12 EST 1999 | |
## | |
## | |
# This is a one month schedule | |
## | |
my @SCHED = qw ( | |
0 7 6 9 8 | |
2 7 6 9 8 | |
4 7 6 9 8 | |
1 7 6 9 8 | |
3 7 6 9 8 | |
5 7 6 9 8 9 | |
); | |
## | |
# These are the filesystems to backup. Add/remove filesystems as needed. | |
## | |
my @FS = qw ( | |
/ /var /usr /home /opt /xyz | |
); | |
my $BACKUP_TO = { | |
'/' => '/backup', | |
'/var' => '/backup', | |
'/usr' => '/backup', | |
'/home' => '/backup', | |
'/opt' => '/backup', | |
'/xyz' => '/backup', | |
'_default_' => '/backup', | |
}; | |
my $t = time; | |
my $opt_l = undef; | |
if ( @ARGV ) { | |
if ( $ARGV[0] eq '-l' and @ARGV >= 2 ) { | |
shift @ARGV; ## ditch -l | |
$opt_l = shift @ARGV; | |
if ( $opt_l =~ m/\d/ ) { | |
## must only be a single digit | |
print "forcing a level $opt_l backup.\n"; | |
} else { | |
$opt_l = undef; | |
} | |
} | |
if ( @ARGV ) { | |
@FS = @ARGV; | |
} | |
} | |
#for (0..1000) { ## for testing | |
my($d,$m,$y) = (localtime($t))[3,4,5]; ## months are zero-based | |
$y += 1900; | |
my $date = sprintf("%04d%02d%02d",$y,$m+1,$d); | |
my $is_leap = ($y%4)?0:($y%100)?1:($y%400)?0:1; | |
my @DPM = qw ( 31 28 31 30 31 30 31 31 30 31 30 31 ); | |
$DPM[1] += $is_leap; | |
$d -= 1; ## make day of month zero-based | |
my $i = $d; ## compute index into schedule. | |
my $level; | |
if ( defined($opt_l) ) { | |
$level = $opt_l; | |
print "did override of level\n"; | |
} else { | |
$level = $SCHED[$i]; | |
} | |
$level =~ s/\D//g; ## guarantee numbers only | |
print "$date index=$i, dumplevel=$level\n"; | |
my $filesystem; | |
for $filesystem (@FS) { | |
my $fsname = $filesystem; | |
$fsname = 'root' if ($fsname eq '/'); | |
$fsname =~ s#^/##; | |
my $backto; | |
if ( exists ($BACKUP_TO->{$filesystem}) ) { | |
$backto = $BACKUP_TO->{$filesystem}; | |
} else { | |
$backto = $BACKUP_TO->{'_default_'}; | |
} | |
my $file = "$backto/$fsname.$level"; | |
my $cmd = "/bin/rm -rf $file"; | |
print "$cmd\n"; | |
system($cmd); | |
$cmd = "/sbin/dump -${level}ua -L -f $file $filesystem"; | |
print "$cmd\n"; | |
system($cmd); | |
# $cmd = "/usr/bin/gzip -f $file"; | |
# print "$cmd\n"; | |
# system($cmd); | |
} | |
#$t+=86400; ## for testing | |
#} ## for testing | |
## | |
# EOF | |
## |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment