分页: 1 / 1

一个简单的linux备份脚本

发表于 : 2013-02-07 13:43
艾徳庄
今天刚注册了论坛,和广大和我一样的新手朋友们分享一个我练习shell编程写的一个脚本,欢迎朋友们测试 :em02
说下这个脚本的使用方法和缺陷:假如脚本名为backup.sh,首先给它添加可执行属性:

代码: 全选

sudo chmod +x backup.sh
。 然后在终端中输入

代码: 全选

sudo ./backup.sh -full
可以进行完整备份,会将根目录下除/proc,/media,/mnt,/lost+found,/sys,/tmp,/run以外的所有文件打包压缩到你存放备份的路径,路径可以通过修改第16行改成你理想中的位置。众所周知,完整备份的时间很久,因此可能一个月备份两次就已经足够了,因此在其他时候可以选择只备份那些新增加的重要文件,在终端中输入

代码: 全选

sudo ./backup.sh -add [List]
可以进行累积备份,只备份那些没有备份过的东西。说说List:当运行完完整备份后,会在备份文件夹下生成一个backup.list文件,在下次进行累计备份的时候,在add后加上backup.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
#####################################################################

Re: 一个简单的linux备份脚本

发表于 : 2013-02-07 13:57
枫叶饭团
厉害啊,不过我不喜欢备份。。。
小建议,可以多用function

Re: 一个简单的linux备份脚本

发表于 : 2013-02-07 14:22
艾徳庄
枫叶饭团 写了:厉害啊,不过我不喜欢备份。。。
小建议,可以多用function
其实我也不喜欢备份,以前系统有问题了就用u盘启动盘进入系统copy下/var/cache/apt中的更新包,然后重装系统的。只是最近编译了个openfoam,觉得不备份重装太费时间,于是就开始备份了 :em03

Re: 一个简单的linux备份脚本

发表于 : 2013-02-07 15:04
iamfbi
先mark后看

Sent from my Ubuntu Phone using Tapatalk 2

Re: 一个简单的linux备份脚本

发表于 : 2013-02-07 18:23
YeLee
厉害,支持一个。 :em11

Re: 一个简单的linux备份脚本

发表于 : 2013-02-07 22:08
艾徳庄
YeLee 写了:厉害,支持一个。 :em11
谢谢,说的我怪不好意思的,其实很简单,只用到了正规表达式,if语句,tar和sed,目前仍处于菜鸟级别,献丑了

Re: 一个简单的linux备份脚本

发表于 : 2013-02-08 17:36
NewUserFF
一直用rsync备份,另外说句题外话,如果有几十个G的免费网盘给我备份一下整个系统就好了 :em06

Re: 一个简单的linux备份脚本

发表于 : 2013-02-08 17:42
442449076
现在也不备份了,有网络不怎么担心这个问题

Re: 一个简单的linux备份脚本

发表于 : 2013-02-08 20:43
艾徳庄
NewUserFF 写了:一直用rsync备份,另外说句题外话,如果有几十个G的免费网盘给我备份一下整个系统就好了 :em06
几十个G?还免费?我也想要一个 :em04

Re: 一个简单的linux备份脚本

发表于 : 2013-02-08 20:46
艾徳庄
442449076 写了:现在也不备份了,有网络不怎么担心这个问题
是啊,尤其是校园网ipv6,下载个镜像10分钟都不到

Re: 一个简单的linux备份脚本

发表于 : 2013-02-08 22:02
NewUserFF
艾徳庄 写了:
NewUserFF 写了:一直用rsync备份,另外说句题外话,如果有几十个G的免费网盘给我备份一下整个系统就好了 :em06
几十个G?还免费?我也想要一个 :em04
其实还是有的,百度网盘搞活动的时候就送了100G,我还领了,但是至今没怎么用,一是没linux版,只能用网页端,再就是对国内的网盘很不放心

Re: 一个简单的linux备份脚本

发表于 : 2013-02-08 22:14
shinery
我喜欢用用rsync备份到移动硬盘。

一个简单的linux备份脚本

发表于 : 2013-02-09 9:45
k9288k
学习一下