-->
什么是差分备份请参见备份技术及基本分类
本来想用于远程差分备份用的,可是搞不明白为什么服务器上的tar(Tape ARchive)不认-N选项而且fc5上的tar也不认,而我的fc6上的tar可以认,于是就简单的改一改用于本地备份了!
此脚本需要给定配置文件,配置文件的格式如下:
backup_dir=/home
cmp_time=2007-6-31 14:38
path=/root
project_dir=study
project_name=study
待备份的目录为/root/study 备份文件存放目录为/home差分备份的比较时间为 2007-6-31 14:38
在crontab中添加(backup.pl为脚本名,backup.conf为配置文件)
1 23 * * 1-5 /root/bin/backup.pl /etc/backup.conf
星期一到星期四执行差分备份,星期五执行一次全备份,并更改备份比较时间。
脚本内容如下:
#!/usr/bin/perl -w
use strict;
#读取配置文件
my $conf_file=shift;
print "文件$conf_file不存在!\n" unless $conf_file;
#定义关联数据%conf
#关键字有:project_name path project_dir backup_dir cmp_time
my %conf;
open CONF,$conf_file or die "打开文件失败\n";
while(<CONF>){
my $util=$_;
chomp $util;
$util =~ m/(.*)=(.*)/;
$conf{$1}=$2;
}
close CONF;
#获取当前时间
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime;
$year+=1900;
#定义存档文件名
my $archive_name=$conf{project_name}.$year."-".$mon."-".$mday."-".$hour.$min.".tgz";
my $log_date=$year."-".$mon."-".$mday." ".$hour.":".$min;
#开始备份
chdir $conf{path};
if(!($mday eq 5)){
#全备份
`tar zcvf $archive_name $conf{project_dir} `;
`mv $archive_name $conf{backup_dir}`;
open NEWCONF,'>',$conf_file;
$conf{cmp_time}=$log_date;
foreach (sort keys %conf){
print NEWCONF "$_=$conf{$_}\n";
}
close NEWCONF;
#print "world\n";
}else{
#差分备份
`tar zcvf $archive_name $conf{project_dir} -N "$conf{cmp_time}"`;
`mv $archive_name $conf{backup_dir}`;
#print "hello\n";
}
__DATA__
配置文件内容
project_name=
path=
project_dir=
cmp_time=
backup_dir=
____________________________________________
以后有时间了再继读更改!
常用备份工具有tar cpio pax dump/restore之前转贴了一篇dump/restore的用法:dump和restore,可是我还是没有搞明白怎么用,还得继续学习。
用tar进行差分备份时,只需用-N指定差分备份的比较时间就行, 在备份时tar将保持原目录结构,此处的差分备份对删除的文件无效,即使已删除了某些文件,备份中的文件仍会被保留,使用dump进行备份是也会有同样的问题。
网络备份系统可以参看 amanda

发表评论