一个简单的linux备份脚本
发表于 : 2013-02-07 13:43
今天刚注册了论坛,和广大和我一样的新手朋友们分享一个我练习shell编程写的一个脚本,欢迎朋友们测试
。
说下这个脚本的使用方法和缺陷:假如脚本名为backup.sh,首先给它添加可执行属性:。 然后在终端中输入可以进行完整备份,会将根目录下除/proc,/media,/mnt,/lost+found,/sys,/tmp,/run以外的所有文件打包压缩到你存放备份的路径,路径可以通过修改第16行改成你理想中的位置。众所周知,完整备份的时间很久,因此可能一个月备份两次就已经足够了,因此在其他时候可以选择只备份那些新增加的重要文件,在终端中输入可以进行累积备份,只备份那些没有备份过的东西。说说List:当运行完完整备份后,会在备份文件夹下生成一个backup.list文件,在下次进行累计备份的时候,在add后加上backup.list的绝对路径,就可以排除完整备份中已经备份过的东西了。
当系统挂机了之后,若:
1.能进入命令行:使用还原系统;
2.连命令行都进不了:使用live-usb启动,手动解压备份包,然后逐个copy到系统分区下。(没有live-usb?好吧,我也不知到该怎么办了,嗯,可以借一个^_^)
这个脚本的缺陷是:1,系统中不能出现文件名中含有空格的文件;(不影响脚本运行)2,对于完整备份中备份过的,之后又经过修改但文件名未发生更改的文件,在累积备份时会跳过,以后有机会在完善。
脚本:

说下这个脚本的使用方法和缺陷:假如脚本名为backup.sh,首先给它添加可执行属性:
代码: 全选
sudo chmod +x backup.sh
代码: 全选
sudo ./backup.sh -full
代码: 全选
sudo ./backup.sh -add [List]
当系统挂机了之后,若:
1.能进入命令行:使用
代码: 全选
sudo tar -jxpvf backup-xxx.tar.bz2 -C /
2.连命令行都进不了:使用live-usb启动,手动解压备份包,然后逐个copy到系统分区下。(没有live-usb?好吧,我也不知到该怎么办了,嗯,可以借一个^_^)
这个脚本的缺陷是:1,系统中不能出现文件名中含有空格的文件;(不影响脚本运行)2,对于完整备份中备份过的,之后又经过修改但文件名未发生更改的文件,在累积备份时会跳过,以后有机会在完善。
脚本:
代码: 全选
#!/bin/bash
#Program:
# This script is used to backup the systems;
# Notice that to run this script correctly you should add extra
# arguments as other unix commands do:
# [-full] #make a full backup;
# [-add] [List] #make a incremental backup which will ex
# -clude the files in the List.
#Version:
#1.1 -exclude the /sys,/run,/tmp,/sys directory and caches directory.
#History:
#2013/02/05 version1.0
#2013/02/06 by Lodz
#################################################################
#Here is the varible of backup path that user can modify accordingly.
path_backup=/media/lodz/DWindows/ubackup
#################################################################
[ "$#" -lt 1 ] && echo\
-e "\n Arguments are necessary,please view the script first"\
&& exit 0
[ ! -d $path_backup ] && echo\
-e "\n Can't open $path_backup,make sure your backup path is correct"\
&& exit 0
#######################full backup###############################
if [ "$#" == 1 ];then
if [ "$1" != "-full" ];then
echo -e "\n Use '-full' to make a full backup"
exit 0
else
rm -f $path_backup/backup*
tar -jcpvf $path_backup/backup-full-`date +%Y-%m-%d`.tar.bz2\
--exclude=/proc --exclude=/lost+found --exclude=/media \
--exclude=/mnt --exclude=/run --exclude=/tmp\
--exclude=/sys --exclude-caches /\
> $path_backup/backup.list
#delete the directory including in List file.
sed -i '/.*\/$/d' $path_backup/backup.list
fi
#######################incremental backup#########################
elif [ "$#" == 2 ];then
if [ "$1" == "-add" ];then
if [ ! -f $2 ];then
echo -e "\n There must be a file to specify exclusions"
exit 0
else
sed -i '/.*\/$/d' $2
tar -jcpvf $path_backup/backup-add-`date +%Y-%m-%d`.tar.bz2\
--exclude=/media --exclude=/proc --exclude=/lost+found\
--exclude=/mnt --exclude=/run --exclude=/tmp\
--exclude=/sys --exclude-caches --exclude-from=$2 / \
> $path_backup/backup-add-`date +%Y-%m-%d`.list
cat $path_backup/backup-add-`date +%Y-%m-%d`.list >> $2
sed -i '/.*\/$/d' $2
fi
else
echo -e "\n Only '-full' and '-add' are supported"
exit 0
fi
else
echo -e "\n Argument list too long"
fi
#####################################################################