그냥 새벽에 할 일도 없고, 심심해서 perl로 백업스크립트를 짜봤다.
다 짜놓고 보니.. 또 심심하군....-_-;
# 경로지정
$remove_date = "3";
$path = "/backup";
$backup_dir1 = "$path/sys_db";
$backup_dir2 = "$path/home_data";
# 백업하지 않을 디렉토리
$no_backup{"lost+found"}=1;
$no_backup{"test"}=1;
# 날짜 구하기
($day, $month, $year) = (localtime)[3,4,5];
$year = $year+1900;
$month = $month+1;
$date_dir = $year."-".$month."-".$day;
($D,$M,$Y) = (localtime(time - ($remove_date * 60 * 60 * 24)))[3,4,5];
$M++; $Y+=1900;
$old_date_dir = "$Y-$M-$D";
# Mount
system("mount /dev/sda1 $backup_dir1");
system("mount /dev/sdb2 $backup_dir2");
system("chattr -R -i $path");
# 지난 데이터 삭제
system("rm -rf $backup_dir1/$old_date_dir");
system("rm -rf $backup_dir2/$old_date_dir");
# 날짜에 맞는 디렉토리를 생성
system("mkdir -p $backup_dir1/$date_dir/db");
system("mkdir -p $backup_dir2/$date_dir");
# 시스템 디렉토리 백업
system("tar cfpz $backup_dir1/$date_dir/usr.local.tar.gz /usr/local 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/etc.tar.gz /etc 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/var.tar.gz /var 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/sys.tar.gz /sys 2>/dev/null");
# DB를 사용자별로 백업
system("ls /var/lib/mysql > /sys/crond/db_list");
open(FILES,"/sys/crond/db_list");
@array = <FILES>;
system("rm -f /sys/crond/db_list");
foreach $d_list(@array){
chomp($d_list);
system("tar cfpz $backup_dir1/$date_dir/db/$d_list.tar.gz /var/lib/mysql/$d_list 2>/dev/null");
}
# 홈데이터를 사용자별로 백업
system("ls /home > /sys/crond/ho_list");
open(FILES,"/sys/crond/ho_list");
@array = <FILES>;
system("rm -f /sys/crond/ho_list");
foreach $h_list(@array){
chomp($h_list);
next if $no_backup{$h_list};
system("tar cfpz $backup_dir2/$date_dir/$h_list.tar.gz /home/$h_list 2>/dev/null");
}
# 보안을 위해 퍼미션 조정
system("chmod -R 600 $backup_dir1 $backup_dir2");
#UnMount
system("chattr -R +i $path");
system("umount /dev/sdb1");
system("umount /dev/sdb2");