服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 5441|回复: 0

tar 完全备份 > 差异备份 > 增量备份

[复制链接]
dirtysea 发表于 2012-12-17 10:40:48 | 显示全部楼层 |阅读模式
差异备份和增量备份有何区别
差分备份是自上一次全备份以来变化文件的备份
增量备份是自上一次增量备份以来变化文件的备份



备份种类的介绍及组合备份方案
完全备份
备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。
( 在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。
差异备份
差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。
(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,既:备份后不标记为已备份文件,换言之,不清除存档属性)。
增量备份
增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。
(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,既:备份后标记文件,换言之,清除存档属性。)

不同备份类型组合的示例

完全备份和差异备份
在星期一进行完全备份,在星期二至星期五进行差异备份。如果在星期五数据被破坏了,则你只需要还原星期一完全的备份和星期四的差异备份。这种策略备份数据需要较多的时间,但还原数据使用较少的时间。
完全备份和增量备份
在星期一进行完全备份,在星期二至星期五进行增量备份。如果在星期五数据被破坏了,则你需要还原星期一正常的备份和从星期二至星期五的所有增量备份。这种策略备份数据需要较多的时间,但还原数据使用较少的时间。

linux下使用tar增量备份
linux下使用tar增量备份
使用 tar -g 参数进行增量备份实验
完整备份:
#建立测试路径与档案
mkdir kerryhu
touch kerryhu/{a,b,c}
在kerryhu下生成三个文件

#执行完整备份
tar -g king -zcvf  kerryhu_full.tar.gz kerryhu

cat king
1270531376
#查看 tarball 内容
tar -ztf kerryhu_full.tar.gz
kerryhu/
kerryhu/a
kerryhu/b
kerryhu/c

增量备份:
#新增一个档案
touch kerryhu/d

#执行第一次的增量备份
tar -g king -zcvf kerryhu_diff_1.tar.gz kerryhu
#查看第一次增量备份的内容
tar -ztf kerryhu_diff_1.tar.gz
kerryhu/
kerryhu/d

#新增一个档案, 并异动一个档案内容
touch kerryhu/e
echo "test" > kerryhu/a

#执行第二次的增量备份
tar -g king -zcvf kerryhu_diff_2.tar.gz kerryhu

cat king
1270532463
#查看第二次增量备份的内容
tar -ztf kerryhu_diff_2.tar.gz
kerryhu/
kerryhu/a
kerryhu/e

还原备份资料:
#清空测试资料
rm -rf #查看第一次增量备份的内容

#开始进行资料还原
tar -zxvf kerryhu_full.tar.gz
tar -zxvf kerryhu_diff_1.tar.gz
tar -zxvf kerryhu_diff_2.tar.gz

#查看测试资料
ls kerryhu
a b c d e


cat kerryhu/a
test
tar高级教程:增量备份、定时备份、网络备份一、概述备份与恢复对于系统维护而言是至关重要的事情。不合理的备份与还原会让你的数据面临丢失的风险。许多用户都在丢失重要数据后才意识到这种风险。而要从这种情况恢复数据将是非常耗时并且困难的。所以我们应该从别人的错误中吸取教训,并确保你的系统处于保护中。先考虑一些问题:

何时进行备份?如果你可以接受一个星期的数据丢失,那么每周备份一次就足够了。但是如果你只能容忍一天的数据损失,那么你就必须每天晚上进行备份。
备份到哪?显然备份到系统所在磁盘不是明智之举,用户应该备份到外接硬盘或者磁带上面。
为了让文章看上去更简单,本文所做的例子并没有备份到外接设备上,而是在/backup目录下。

要备份什么?我们要备份整个系统,因此这里需要考虑的是不必备份的目录:
  • /backup
  • /proc
  • /lost+found
  • /sys
  • /mnt
  • /media
  • /dev
  • /tmp
备份方式tar支持三种方式进行备份:
1.完整备份:备份指定的所有目标文件或文件夹
2.增量备份:仅备份atime与上次备份不同的文件或文件夹
3.差异备份:与增量备份差不多,只是增加了对Windows文件系统的支持

本文主要阐述如何用tar对系统进行增量备份,以及如何利用cron设置定时备份。
二、基础知识mtime, atime, ctimeLinux的文件系统会记录以下三种时间
mtime: 文件修改时间。当文件内容呢发生改变时更新。 ls -l默认显示mtime
atime: 文件访问时间。当文件被访问时自动更新。要查看文件的atime,执行ls -lu
    
/!\注意:atime可能在tar进行备份时可能发生变化(和文件系统和tar版本有关),可以用–atime-preserve防止这种更新。

ctime: 文件属性修改时间。当文件属性或权限发生变化时更新。要查看文件的ctime,执行ls -lc
三、开始增量备份GNU tar使用--listed-incremental选项(缩写为-g)进行增量备份:
tar -czvpf /backup/backup.tar.gz -g /backup/snapshot.snar \  --exclude=/backup --exclude=/proc --exclude=/lost+found \  --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev \  --exclude=/tmp /  三、需要了解的1.最后一个斜杠“/”告诉tar要从根目录进行备份。
2.tar非常依赖atime,以下情况会导致归档数据文件不一致:
 (1)备份期间对文件的任何访问
 (2)备份期间将系统时间调慢
3.tar假设待备份的文件所在磁盘设备ID是不变的,但NFS等某些文件系统并不属于这种情况,可以用--no-check-device阻止tar进行检查
4.除非情况紧急,并且你充分信任tar,否则你最好在备份时使用--verify选项(缩写为-W)以确保数据正确地进行备份。但不幸的是它并不支持所有的存储介质(比如磁带)。

5.–listed-incremental与–incremental(-g与-G)的区别–listed-incremental(缩写为-G)是该参数是–listed-incremental(缩写为-g)的快捷选项,不需要指定增量文件。它也是旧版本的tar增量备份遗留下来的。现在常常用于解压增量备份,或者列出增量备份的文件列表。
-G与-g相比,-g能通过复制snar文件的方式创建多层次的增量备份文件,而-G却只能用level0

四、列出备份文件列表tar -tGvvf backup.tar.gz  -t 等价于 –list
-Gvv 一种固定用法,列出文件属性的同时还显示备份属性:
Y – 该文件在归档文件中
N – 该文件不在归档文件中
D – 文件夹

五、数据恢复还原数据恢复无需为tar指定增量文件snar,因为tar所需的信息已经包含在打包的文件中了。
要恢复数据,以下三种方式都是可行的:

方法一:将增量文件指定为/dev/null
tar -xzvpf /backup/backup.tar.gz -g /dev/null -C /  方法二:使用--incremental参数(缩写为-G)
tar -xzvpGf /backup/backup.tar.gz -C /  方法三:某些情况下,你还可以省略-G选项,但这不是推荐的版本:
tar -xzvpf /backup/backup.tar.gz -C /  六、利用cron定时备份新建cron计划任务非常简单,以下方法都可以完成:
方法一:$ crontab -e方法二:# vi /etc/crontab在笔者的Linux上,方法一只能以当前用户的权限运行计划的任务;方法二可以指定程序以哪个用户执行,但是必须以root身份编辑该文件。
在此,因为要对整个文件系统进行备份,因此仅以/etc/crontab为例进行介绍:

# m h dom mon dow user  command   1 3 *  *  * root /root/scripts/daily_backup  这行配置表明,在每天3:01分执行/root/scripts/daily_backup这个脚本里的文件。
七、讨论tar, cpio, rsync, dump之前有人使用cpio进行备份,但是后来发现cpio格式无法提取单个文件。但是tar也有自己的缺点:
1.它过度依赖于atime
2.如果将归档文件恢复到一个新的文件系统中,所有文件的atime和ctime都被刷新。对于新系统,旧的增量备份文件不再适用,得重新做一遍。
相比之下,rsync似乎很好解决这个问题,而且具有较快的速度。
而dump是所有流行的备份软件中对文件完整性表现最好的[3]

八、Script(脚本)利用tar内置的增量备份功能进行备份本代码完成以下任务:
  • 找到备份数据库bkdb(记录当前备份的level),如果没有则从level 0开始备份
  • 以当前时间和level为备份文件以及snar文件命名
  • 复制旧版本的snar,从而提升level
  • 将新的snar指定给tar,进行备份
/!\注意:请将本脚本放置在/backup目录下运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
# system backup
# Sun Feb 19 00:34:42 CST 2012
# by lesca

# Read db file and config
if [ -f "bkdb" ]; then
    eval `grep VER bkdb`
    eval `grep NAME bkdb`
    OLD=$VER
    NEW=$((OLD+1))
else
    NEW=0
fi

DATE=`date +%Y%m%d-%H%M%S`
BKFILE=$DATE-$NEW.tar.gz
NEWSNAP=$DATE-$NEW.snar
OLDSNAP=$NAME.snar

# Create new snapshot
if [ -e "$OLDSNAP" ]; then
    cp $OLDSNAP $NEWSNAP
fi

tar -czvpf /backup/$BKFILE -g /backup/$NEWSNAP --exclude=/backup --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev --exclude=/tmp /

echo VER=$NEW > bkdb
echo NAME=$DATE-$NEW >> bkdb
echo Archived $BKFILE with snapshot $NEWSNAP



恢复增量备份文件本代码完成以下任务:
  • 找到备份数据库bkdb(记录当前备份的level),如果没有则结束
  • 根据bkdb指定的信息,找到备份文件和snar,进行还原
  • 检查排除备份的文件夹是否存在,不存在则创建
/!\注意:还原会刷新atime和ctime
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/bash

end() {
    echo $1
    exit
}

nameOf() {
    ls -1 | grep $1.tar.gz | cut -c1-15
}

if [ -f "bkdb" ]; then
        eval `grep VER bkdb`
if [ $# -eq "1" ] && [ $1 -le $VER ]; then
    VER=$1
fi
else
    end "Error: No backup archives."
fi

ver=0
while [ $ver -le "$VER" ]; do
    ARCHIVE=`nameOf $ver`-$ver.tar.gz
    echo $ARCHIVE
    tar -xzvpGf $ARCHIVE -C /
    ver=$((ver+1))
done
NAME=`nameOf $VER`-$VER
echo VER=$VER > bkdb
echo NAME=$NAME >> bkdb

if [ ! -e /proc ]; then
    mkdir /proc
fi

if [ ! -e /lost+found ]; then
    mkdir /lost+found
fi

if [ ! -e /sys ]; then
    mkdir /sys
fi

if [ ! -e /mnt ]; then
    mkdir /mnt
fi

if [ ! -e /media ]; then
    mkdir /media
fi

if [ ! -e /dev ]; then
    mkdir /dev
fi

if [ ! -e /tmp ]; then
    mkdir /tmp
fi



改进版本:利用find仅备份mtime更新的文件本代码[4]完成以下任务:
  • 载入当前日期到环境变量
  • 每周日进行一次完全备份,删除之前的增量备份
  • 平时进行增量备份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
#
# creates backups of essential files
#
DATA="/home /root /usr/local/httpd"
LIST="/tmp/backlist_$$.txt"
#
set $(date)
#
if test "$1" = "Sun" ; then
        # weekly a full backup of all data and config. settings:
        #
        tar -czvf "/backup/data/data_full_$6-$2-$3.tgz" $DATA
        rm -f /backup/data/data_diff*
else
        # incremental backup:
        #
        find $DATA -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
        tar -czTvf "backup/data/data_diff_$6-$2-$3.tgz" "$LIST"
        rm -f "$LIST"
fi



九、tar高级技巧1.档案分割创建时分割:
tar -cvpz <put options here> / | split -d -b 3900m - /name/of/backup.tar.gz  创建后分割:
split -d -b 3900m /path/to/backup.tar.gz /name/of/backup.tar.gz  2.通过netcat进行网络备份发送端
tar -czvp <all other options> / | nc -q 0 <receiving host> 1024  接收端
nc -l 1024 > backup.tar.gz  /!\注意:由于通过网络备份tar不再需要参数-f执行备份档案名称,该名称由接收端的nc重定向指定
{i}参数说明:
-q 0: wait 0 second on QUIT
-l 1024: Listen port 1024

3.通过netcat进行网络恢复发送端
cat backup.tar.gz | nc -q 0 <receiving host> 1024  接收端
nc -l 1024 | tar -xzvpf - -C /  4.通过SSH进行网络备份与恢复在安装了SSH服务的主机(SSH Server)上,客户端只需直接发起连接并传送命令到目标计算机(SSH Server),就能完成操作。所有数据通过“管道”传送,用户不需要了解通过哪个端口备份(当然您也可以自行指定),而且所有传输的数据都是加密的。因此通过SSH备份,更安全、更方便、只需一人就能完成备份工作。请在准备备份的计算机上执行以下命令:
tar -cvpz <all other options> / | ssh <backuphost> "( cat > ssh_backup.tar.gz )"  要恢复文件,请执行以下命令:
cat ssh_backup.tar.gz | ssh <receivinng host> "( tar -xzvp -C / )"  

------------------------------------------------------------------------------------------
-g  –listed-incremental F 建立新 GNU 格式的备份
-G   –incremental  建立老 GNU 格式的备份
-g 参数后所跟的文件名一定要和做完整备份时的一样,因为他会从里面读取相关的数据,否则增量备份不成功。使用 tar 命令实现增量备份使用 tar 实现差异备份的方法作一介绍,因此有必要在此之前将 备份的概念先讲清楚。
备份主要的目的是在系统发生故障的时候(如硬盘翘掉,文件系统崩溃)对用户最宝贵的部分(数据)不至于丢失。备份可以分为
全备份(所有数据都备份),
增量备份(备份与上一个备份的差异部分),
差异备份(备份与上一个全备份之间的差异部分)。
增量备份针对上一次备份,差异备份针对全备份。对于所需的恢复步骤而言,基于增量备份策略的恢复需要恢复全备份,第一个增量备份,…,最新的增量备份;
基于差异备份策略的恢复需要恢复 全备份,最新的差异备份。恢复起来差异备份所需的步骤简单一些。

一般的情况下,人们经常为关键的任务翘掉后恢复的时间定义一个很小的窗口。正是由于有这种约束,通常用于恢复的时间都不会太长,所以差异备份可能来的更实际一些。

tar 是 Unix/Linux 系统上常用的系统归档命令,它也支持差异备份的策略。 tar 的参数 -g 可以用于此选项,例如:
$ tar -cz -g home_snapshot -f home_full.tgz /home
$ tar -cz -g home_snapshot -f home_mon.tgz /home
以后每次用这种形式 ‘-g snapshot’ 就可以创建针对全备份的增量备份

用tar進行增量備份  
由于想要備份某個目錄,于是想到了tar命令.
具體操作過程如下:
1) 創建0級備份(--listed-incremental就是增量備份參數,後面是效驗文件,最後才跟要備份的目錄)
tar -czvf Linux_TIPS.tgz --listed-incremental /var/log/tips-1.snar /mnt/media/study/Linux_Tricks/

2) 創建1級備份,此時便只會備份有變更的文件。
tar -czvf Linux_TIPS-1.tgz --listed-incremental /var/log/tips-1.snar /mnt/media/study/Linux_Tricks/

3) 如果要還原備份的話,步驟是先還原0級,再1級,N級.
tar -xf Linux_TIPS.tgz -g /dev/null
tar -xf Linux_TIPS-1.tgz -g /dev/null
tar -xf Linux_TIPS-N.tgz -g /dev/null

當然這裏可以稍做修改,讓它們自動執行.






  


  备份无非就是全量备份与增量备份。linux下面的全量备份自然不用说,很多命令与软件都能实现;增量备份相对来说软件就要少些,我常用的就是rsync与tar。
rsync与tar相比,rsync的优点在于可以异机备份,缺点在用不能对文件进行压缩。tar的优点就是可以调用bzip2或者gzip进行压缩,但是只限于本机备份。rsync我这里就不多讲了,今天就来说说tar吧
开题不说闲话,其他参数格式我都不说了,说说我们今天要用的参数格式:
tar -g /path/to/info_file -zcvf /path/to/files_need_backup

在这里对info_file
info_file是一个纯文本文件,以UNIX时间记录备份的时间戳。这个文件一般是第一次全备时自动创建,也可以手动创建。如果你手动创建这个文件,那tar就只会备份在这个时间戳之后修改过的文件,所以严格意义上来说,tar的增量备份并不能算做是增量备份,而只是按时间戳备份而已。这点远远比不上rsync。
ok,了解了一下概念,我们正式开始:
$ mkdir dest
$ touch dest/{1,2,3}
$ tar -g /tmp/timestamp -zcvf backup0.tgz dest/
dest/
dest/1
dest/2
dest/3
$ cat /tmp/timestamp
1281096816

由于/tmp/timestamp原来是不存在的,所以这次备份下来的backup0.tgz就是一个全备份文件。备份之后的timestamp文件内容是1281096816。
然后我们继续。这个时候就要记得info_file要继续用上次全备文件之后文件:
$ tar -g /tmp/timestamp -zcvf backup1.tgz dest/
dest/
dest/4
dest/5
dest/6
$ cat /tmp/timestamp
1281097104

我们可以看到,这次生成的backup1.tgz并没有备份还在dest目录下面的文件1, 2, 3,而只备份了新生成的文件4, 5, 6。
然后,我们再来一个测试
$ touch dest/{7,8}
$ date +%s > /tmp/timestamp
$ touch dest/9
$ tar -g /tmp/timestamp -zcvf backup2.tgz dest/
dest/9
$ cat /tmp/timestamp
1281097553

我在创建文件7, 8之后,利用date命令手动刷新了一下info_file的内容,然后再创建了文件9,之后的备份,大家就可以很明显的看到,文件7, 8并没有被备份。
大家应该也就应该看出来了,这就存在一个问题,就是-g做增量备份时的这个info_file到底记录的是什么时刻的时间。大家可以通过实验得到,info_file的更新时间在在.tgz文件之后的,但究竟记录的时间是不是刚刚开始时间呢?
这个我们也可以通过一个小实验来得到:
$ for i in `seq 1 100`; do dd if=/dev/zero of=dest/test$i bs=1M count=10;done
$ date +%s && tar -g /tmp/timestamp -zcf backup3.tgz dest && cat /tmp/timestamp && date +%s
1281098446
1281098523
1281098524

怎么样,很明显了吧。如果直接用这种方式备份的话,那么从你备份开始到备份结束之间生成的文件是不会被备份的
不过,这也难不倒聪明的你吧。嘿嘿。


想给项目的CVS做个自动备份的脚本,一看目录大小,已经有近20个G。天天做完整备份太费资源了,增量备份是一个解决方案了。计划每周末做一次完 整备份,然后每天做增量备份。
Linux做增量备份还是很容易的,tar命令就可以。
在cron里设置,每周日晚执行(每周日全备份,其余时间增量备份)。下面是从网上找了两 个示例的脚本。
示例一: (http://jk.scanmon.com/wp/tar-inc-backup.html)
#!/bin/bash    # define  dayofweek=`date "+%u"`  today=`date "+%Y%m%d"`  source=/data/  backup=/backup/    # action  cd $backup    if [ $dayofweek -eq 1 ]; then    if [ ! -f "full$today.tar.gz" ]; then      rm -rf snapshot      tar -g snapshot -zcf "full$today.tar.gz" $source    fi  else    if [ ! -f "inc$today.tar.gz" ]; then      tar -g snapshot -zcf "inc$today.tar.gz" $source    fi  fi  示例二: (http://www.futuremedia.pl/pub/projekty/backup/backup)
#!/bin/bash  # simple backup script. intended to run daily from crontab  # called "biedacula" after "bieda", which is Polish word for "poor".    # implements poor man's GFS scheme, hence the name:)  # requires GNU tar, GNU gzip and ncftp    # these files must contain file/dir paths (one a line)  PATHFILE=/etc/backup-defs  SKIPFILE=/etc/backup-excludes  # this is a snapshot file auto-created by GNU tar  SNAPSHOT=/etc/backup-snapshot    # FTP host to send backups ( must allow anonymous RW access for me )  FTPHOST=192.168.2.2  FTPPORT=21    # when to do full, monthly/weekly  backups  FULL_MONTHDAY=1  # 1st day of month  FULL_WEEKDAY=7  # Sunday    # how many "tapes" for monthly backups  KEEP_MONTHLY=3  # how many "tapes" for weekly backups  KEEP_WEEKLY=4  # in total you will have ( KEEP_MONTHLY + KEEP_WEEKLY + 6 ) "tapes"    function biedump {    local TYPE=$1    local LABEL=$2    local start=`date +%Y%m%d%H%M`    echo "$start: Starting $TYPE dump to label $LABEL"    if [ "x$TYPE" == "xfull" ] ; then      rm -rf $SNAPSHOT    fi    tar -c -T$PATHFILE -X$SKIPFILE -g$SNAPSHOT -P -f - \     | gzip \     | ncftpput -c -S.tmp -P $FTPPORT $FTPHOST $LABEL    local res=$?    local end=`date +%Y%m%d%H%M`    if [ $res -eq 0 ]; then   echo "$end: $TYPE dump OK."    else      echo "$end: $TYPE dump FAILED with exit code $res."    fi  }    host=`hostname -f`  yyyy=`date +%Y`  mm=`date +%m`  dd=`date +%d`  ww=`date +%V`  day_of_week=`date +%u`  dayofweek=`date +%a`    echo "Hello. This is biedacula backup running at $host."  echo "Today is $yyyy/$mm/$dd, day $day_of_week ($dayofweek) of week $ww."    if [ $dd -eq $FULL_MONTHDAY ]; then    let " n = ( mm % $KEEP_MONTHLY ) + 1 "    biedump 'full' "$host-M-$n.tgz"  elif [ $day_of_week -eq $FULL_WEEKDAY ] ; then    let " n = ( ww % $KEEP_WEEKLY ) + 1 "    biedump 'full' "$host-W-$n.tgz"  else    biedump 'incr' "$host-D-$dayofweek.tgz"  fi  
shell实现文件增量备份到远程服务器
#!/bin/sh

02#copyright by mmxcq

03#差异备份

04#差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。

05#(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,既:备份后不标记为已备份文件,换言之,不清除存档属性)。  

06

07#增量备份

08#增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。

09#(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,既:备份后标记文件,换言之,清除存档属性。)

10if [ -f "/usr/local/crontablist/databack/lok" ]

11then

12   exit 1

13fi

14trap "rm -f /usr/local/crontablist/databack/lok" 0 1 2 3 4 12 15

15touch /usr/local/crontablist/databack/lok

16snapshotfile="/usr/local/crontablist/databack/snapshot"

17bakdir="/usr/local/crontablist/databack/"`date +%Y%m`"/"

18if [ ! -d "$bakdir" ]

19then

20   mkdir "$bakdir"

21fi

22sourcedir="/var/www/"

23if  [ $((`date +%m`%2)) = 0 ] && [ `date +%d` = '01' ]

24then

25  rm -rf $bakdir"snapshot"

26  bakfile=$bakdir"full_"`date +%Y%m%d`".tar.gz"

27  tar -g $snapshotfile -zcf $bakfile -C $sourcedir './'

28else

29  bakfile=$bakdir"incremental_"`date +%Y%m%d%H%M%S`".tar.gz"

30 tar -g $snapshotfile -zcf $bakfile -C $sourcedir './'

31fi

32### lftp

33ftp_host="*.*.*.*"

34ftp_user="*"

35ftp_pwd="*"

36ftp_port=21

37lftp $ftp_host -u $ftp_user,$ftp_pwd -p $ftp_port<< EOF

38set ftp:passive-mode false

39set ftp:list-empty-ok yes

40set file:charset utf8

41mirror -R $bakdir

42bye

43EOF

44rm -rf $bakdir

因为业务逻辑原因 选择的这种方案 看重的就是这种方案 在源数据有部分数据删除的情况下 目标备份的数据不会被删除
如果想一摸一样的备份 那就用rsync来同步
所以这种方式只适合部分情况 大家看情况选择

linux 差异备份 增量备份今晚想起来要备份自己的网站时想到了差异备份和增量备份。
以前只是把数据库导出然后再发送到自己的邮箱里。这倒是省了很多事。只不过网站就有点大了50多M 了呢。所以备份到邮箱有点吃力。
在搜索引擎(以前念引xing,知道读音不对。但是不好在百度上查,还好有和我读音一样的)输入差异备份 linux 。还能搜出好多。
用的最多的是tar 和rsync。我准备先用tar试试。这里有必要说一下差异备份和增量备份。
增量备份:备份上一次备份后变化的文件。
差异备份,全备份后变化的文件。
自己根据网上的例子也写了一个:
#!/bin/bash     if [ `date +%d` = "01"   then  bakdir="/www/back/month/"`date +%m%d`  zl="" #每月1号进行完全备份  else  bakdir="/www/back/month/"`date +%d`  zl="-N "`date +'%Y-%m-01 00:00:01'`;# 差异备份  #zl= "-N"`date -d '-1 day' +'%Y-%m-%d 00:00:01'`#日增量备份  fi     mkdir -p ${bakdir}  back_file_name="blog-`date +%Y%m%d`.tar.gz"  tar "${zl}" -czf ${bakdir}/${back_file_name}  /www/blog  7zip a ${bakdir}/${back_file_name}.7z -pPASSWORD -mhe -mx9 ${bakdir}/${back_file_name}  mutt -a ${bakdir}/${back_file_name}.7z -s "${back_file_name}.7z" XXX@qq.com /tmp/filelist.txt  #tar -cz -T /tmp/filelist.txt -f /www/back/xxx.tgz /www/blog  #tar -g 来差异备份  #先用-g snapshot 来创建当前的快照  #snapshot 文件就包含当前时间和要备份的文件列表  #tar -cf a.tar /home -g snapshot  #tar -g snapshot -cf a_incremen.tar /home

这里用到了几个命令的参数:
date +%m%d 当前月份和日子
tar -N  仅仅备份比这个参数后日期新的文件
date  -d  ‘-1 day’ 1天前
tar还有个g参数,先创建一个镜像,在备份时就增量备份。
上面的例子是以月为周期,也可以改为以周为周期。
今早收到QQ的邮件,说最近收到过量的大邮件。5天内不能接受超过5M的邮件了。
2011-03-30:今天突然发现上面的程序有点问题。-N 后面应该加全备份的时间。也就是从全备份后发生变化的文件以后才备份。这里用到date的另一个参数u,用数字表示的参数。
经修改后为:
bakdir="/www/back/week/"`date +%A`  uu=`date +%u`  let aa=$uu-1  zl="-N "`date -d "- $aa day"`;# 差异备份

英语不行,所以参数随便编。
ps:在调试的过程中比小心用tar创建了一个名为“-N”的文件,用rm -N没法删除就从网上搜了一下,找到了方法。
rm — -N 或者是rm ./-N
2011-04-07 0:16补充 又发现了一个问题啊。如果删除了某个文件,tar也不知道啊。-N 只有在修改后者添加新文件后才有效啊!-g这个好像 也是不太管用!

差异备份
备份 Linux 系统,推荐使用 tar。使用 archlinux-2008.06-core-i686 光盘启动系统[79],登录“作业平台”后,首先挂载文件系统
注意
备份、恢复、迁移等过程,都要先进行这一步

#首先将两个工作目录定义为环境变量,这样条理更清晰  export FROM="/mnt/from"  #定义变量 FROM,待备份的文件系统挂载于此  export TO="/mnt/to"      #定义变量 TO,备份文件存放路径  mkdir -p $FROM $TO       #创建工作目录  #假设待备份的系统位于 /dev/sda1 分区    mount /dev/sda1 $FROM  #如果将系统中的目录挂载到其它分区,例如将 /boot 挂载于 /dev/sda2 ,还要继续挂载此目录  mkdir $FROM/boot      mount /dev/sda2 $FROM/boot  mkdir $FROM/home      mount /dev/sda3 $FROM/home  ……    #假设将备份文件存放于 /dev/sda5 分区  mount /dev/sda5 $TO  
使用 tar(参见“压缩解压”一节) 命令备份:
cd $FROM  tar -zcvf $TO/backup.tgz         \          --exclude=backup.tgz     \          --exclude=mnt/*          \          --exclude=proc/*         \          --exclude=sys/*          \      *系统更新后,可以使用以下命令,在原来备份的基础上进行差异备份
#查找最近改动的文件,生成文件列表  find $FROM -mtime -1 -print> filelist  #根据文件列表进行差异备份  tar -zcv -T filelist -f $TO/backup.tgz  
恢复时,使用以下命令
tar zxvpf $TO/backup.tgz -C $FROM  在某一硬件架构中,Linux 中大部分文件与硬件无关。所以,将备份的系统迁移到其它机器上[80],是可行的
恢复后,有三个文件需要重新编辑:/boot/grum/menu.lst/etc/fstab/etc/X11/xorg.conf
使用 blkid,输出磁盘设备的 UUID,根据实际情况编辑这两个文件
blkid >> /etc/fstab  blkid >> /boot/grub/menu.lst失憶症患者的0 與1: [Linux] 使用tar 做完整(Full)備份、差異備份 ...

tar -zcvpf /home/full-backup.tar.gz / --exclude=/mnt/* --exclude=/proc/* --exclude=/sys/*

  这个命令是把根目录下的所有内容备份到full-bakup.tar.gz的备份文档中

  -z表示进行压缩gzip格式

  -c(建立一个备份文档

  -v显示压缩过程

  -p保留文件的权限

  --directory'指定不备份的文件夹

  增量备份

  1.首先创建完全备份:tar -czvf -g zeng aa.tar.gz /var

  待/var中的数据变化后

  2.再做增量备份 : tar -czvf -g zeng aa.tar.gz.1 /var

  差异备份

  1. find /var -mtime -1 -print> filelist

  产生要备份的档案的列表 -1表示是一天的时间

  2.tar -czv -T filelist -f /backup.tar.gz

  依据文件列表进行备份. -T选项可以指定包含要备份的档案的列表

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2024-4-20 19:11 , Processed in 0.239473 second(s), 15 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表