站长资讯网
最全最丰富的资讯网站

Linux工具rsync 和tar 命令对系统的全量和增量备份

Linux工具rsync 和tar 命令对系统的全量和增量备份

rsync命令语句格式类似于scp,功能强大,节省带宽和时间,适合备份重要不怎么变动的文件,,同时可以服务端和在灾备端,可以恢复,任意一方出现问题,都可以从对端恢复。但是只能够一个备份副本,不能多个,

tar可以备份很多内容,也可以备份不同时段的文件

————————————————————–

1)rsync备份

rsync由于本身的特性,在第一次rsync备份后,以后每次都只是传内容有改变的部分,而不是全部传。所以,rsync在做镜像方面是很不错的,只传增量,节省带宽、时间。

常规本地rsync备份命令可以是:

rsync -az –delete SRC DST

其中:

-z 压缩

-a 简单理解就是保持一致性

–delete 严格保证DST内容与SRC一致,即DST中SRC没有的文件会被删除掉 (–delete-before表示在进行同步之前,先将目标目录全部删除,然后再进行同步操作)

具体命令详解可以查看:http://man.linuxde.net/rsync

只用先配置好服务端可客户端机器对应的文件和服务即可操作

实例如下:

[root@linux-node3 mnt]# mkdir test

[root@linux-node3 mnt]# cd test/

[root@linux-node3 mnt]# ls

test

[root@linux-node3 test]# echo “a1” > a1.txt

[root@linux-node3 test]# echo “a2” > a2.txt

[root@linux-node3 test]# echo “a3” > a3.txt

[root@linux-node3 test]# ls

a1.txt a2.txt a3.txt aaa

现在使用rsync进行增量备份

[root@linux-node3 mnt]# rsync -az –delete test /opt/

[root@linux-node3 mnt]# ls /opt/

test

[root@linux-node3 mnt]# ls /opt/

test wang

[root@linux-node3 mnt]# rsync -az –delete test /opt/

[root@linux-node3 mnt]# ls /opt/

test wang

[root@linux-node3 mnt]# ls /opt/test/

a1.txt a2.txt a3.txt a4 aaa

10

注意:

–delete参数要放在源目录和目标目录前,并且两个目录结构一定要一致!不能使用./*。

如果目录结构不一致,则不会删除目标目录中的目录。如上,/opt/wang目录由于目录结构不一致,故它是多余的但不删除。

现在进行增量备份,rsync在第一次同步后,后面就只同步内容有改变的部分

温馨提示:

rsync使用–delete参数,在做增量方式的全备份可以说是最佳选择。但这样只有一个副本,也就是说如果你想查以前某个时间段的数据,是没法查到的。

2)tar打包备份

tar的备份就是把文件打包起来,保存到其他地方,可以满足查档要求,也即上面说到的。

再配合crontab,就可以实现定时增量备份

下面说说tar的三种增量备份方式:

a)第一种方式:tar -g snapshot方法

利用tar -g参数,在第一次备份时候生成时间戳文件,里面包含指定备份目录下的所有文件的一个时间戳,下次增量备份,tar会利用时间戳文件去比较,只有那些内容在这段时间有修改的文件,才会被打包。

实例说明:

[root@linux-node3 mnt]# ls

[root@linux-node3 mnt]# mkdir test

[root@linux-node3 mnt]# echo “123” > test/test1

[root@linux-node3 mnt]# echo “123123” > test/test2

[root@linux-node3 mnt]# mkdir test/aaa

[root@linux-node3 mnt]# ls test/

aaa test1 test2

先执行完整备份

[root@linux-node3 mnt]# tar -g snapshot -zcf backup_full.tar.gz test

[root@linux-node3 mnt]# ls

aaa backup_full.tar.gz snapshot test

[root@linux-node3 mnt]# cat snapshot

GNU tar-1.23-2

1490172505723210801014901724572030064696476940641test/aaa014901724572030064696476940639testDaaaYtest1Ytest2

接下来进行差异和增量备份操作:

增加数据

[root@linux-node3 mnt]# echo “aaaaa” >> test/test1

[root@linux-node3 mnt]# echo “aaaaa11111” >> test/test3

[root@linux-node3 mnt]# ls test/

aaa test1 test2 test3

执行第一次的增量备份 (注意tarball档名)

[root@linux-node3 mnt]# tar -g snapshot -zcf backup_incremental_1.tar.gz test

[root@linux-node3 mnt]# ls

aaa backup_full.tar.gz backup_incremental_1.tar.gz snapshot test

[root@linux-node3 mnt]# cat snapshot

GNU tar-1.23-2

1490172606339019504014901724572030064696476940641test/aaa014901725622320064796476940639testDaaaYtest1Ntest2Ytest3

再增加差异数据

[root@linux-node3 mnt]# echo “77777” > test/test1

[root@linux-node3 mnt]# echo “6666” >> test/test2

[root@linux-node3 mnt]# touch test/aaaa

[root@linux-node3 mnt]# ls test/

aaa aaaa test1 test2 test3

执行第二次的增量备份

[root@linux-node3 mnt]# tar -g snapshot -zcf backup_incremental_2.tar.gz test

[root@linux-node3 mnt]# ls

aaa backup_full.tar.gz backup_incremental_2.tar.gz backup_incremental_1.tar.gz snapshot test

[root@linux-node3 mnt]# cat snapshot

GNU tar-1.23-2

149017272274896944014901724572030064696476940641test/aaa014901726931200065246476940639testDaaaYaaaaYtest1Ytest2Ntest3

现在进行测试,删除测试数据test

[root@linux-node3 mnt]# rm -rf test/

[root@linux-node3 mnt]# ls

aaa backup_full.tar.gz backup_incremental_2.tar.gz backup_incremental_1.tar.gz snapshot

开始进行数据还原

恢复第一次全备份的数据

[root@linux-node3 mnt]# tar zxf backup_full.tar.gz

[root@linux-node3 mnt]# ls

aaa backup_full.tar.gz backup_incremental_2.tar.gz backup_incremental_1.tar.gz snapshot test

[root@linux-node3 mnt]# ls test/

aaa test1 test2

[root@linux-node3 mnt]# cat test/test1

123

恢复第一次增量备份的数据

[root@linux-node3 mnt]# tar zxf backup_incremental_1.tar.gz

[root@linux-node3 mnt]# ls test/

aaa test1 test2 test3

[root@linux-node3 mnt]# cat test/test1

123

aaaaa

[root@linux-node3 mnt]# cat test/test3

aaaaa11111

恢复第二次增量备份的数据

[root@linux-node3 mnt]# tar zxf backup_incremental_2.tar.gz

[root@linux-node3 mnt]# ls test/

aaa aaaa test1 test2 test3

[root@linux-node3 mnt]# cat test/test1

77777

[root@linux-node3 mnt]# cat test/test2

123123

6666

最后可以结合crontab实现定时增量备份

第一次手动进行全备份,生成snapshot时间戳文件,后面写增量备份脚本

[root@linux-node3 ~]# vim backup_incremental.sh

#!/bin/bash

DATE=`date +%Y%m%d%H%M%S`

/bin/tar -g /mnt/snapshot -zcf /mnt/backup_incremental_$DATE.tar.gz /mnt/test

进行定时增量备份操作

[root@linux-node3 ~]# crontab -e

每小时进行一次增量备份

0 * * * * /bin/bash -x /root/backup_incremental.sh > /dev/null 2>&1

从上面可以看出:

snapshot作为时间戳文件,它记录备份目录里面每个文件的一个当前修改时间,只要下次备份时候,再利用-g ~/snapshot指定上次生成的时间戳文件就可以实现增量备份!

可能出现下面两种问题:

–> snapshot时间戳文件是每次增量备份完成时候更新的,如果在两次备份间隔间,由于io问题,上次备份没完成,第二次增量备份就开始的话,

就有可能出现,第二次增量备份并不是一个备份间隔有修改过的文件,而是两次;如果IO问题一直存在,就会一直累积备份,最后系统超负载,性能变得极差

–> 上次备份失败(意外终止)

这样的情况,要看是在什么时候终止,因为tar命令在增量备份时候会先扫一遍文件,比较修改时间,因此,有可能备份进程意外终止后,导致时间戳文件清空,下次增量备份就变成全备了,严重影响备份策略!

b)第二种方式:tar -g tarinfo增量备份方法

只需要指定-g参数,tarinfo文件则是用来记录备份的一些信息

1)创建备份测试目录wang

[root@zabbix-server opt]# pwd

/opt

[root@zabbix-server opt]# echo “1111” > wang/1.txt

[root@zabbix-server opt]# echo “2222” > wang/2.txt

[root@zabbix-server opt]# echo “3333” > wang/3.txtwang

[root@zabbix-server opt]# ls wang/

1.txt 2.txt 3.txt

2)进行完整备份

[root@zabbix-server opt]# tar -g tarinfo -czf backup-full.tar.gz wang/

[root@zabbix-server opt]# ls

backup-full.tar.gz tarinfo wang

3)新增文件

[root@zabbix-server opt]# echo “4444” > wang/4.txt

[root@zabbix-server opt]# echo “12121” >> wang/1.txt

4)进行增量备份

[root@zabbix-server opt]# tar -g tarinfo -czf backup-incre1.tar.gz wang/

[root@zabbix-server opt]# ls

backup-full.tar.gz backup-incre1.tar.gz tarinfo wang

[root@zabbix-server opt]# cat tarinfo

GNU tar-1.23-2

1508989798794775692015089897819623314720538519682wangY1.txtN2.txtN3.txtY4.txt

5)删除wang目录,进行恢复(先全量恢复,再增量恢复)

[root@zabbix-server opt]# rm -rf wang

[root@zabbix-server opt]# ls

backup-full.tar.gz backup-incre1.tar.gz tarinfo

[root@zabbix-server opt]# tar -zvxf backup-full.tar.gz

wang/

wang/1.txt

wang/2.txt

wang/3.txt

[root@zabbix-server opt]# ls wang/

1.txt 2.txt 3.txt

[root@zabbix-server opt]# cat wang/1.txt

1111

[root@zabbix-server opt]# tar -zvxf backup-incre1.tar.gz

wang/

wang/1.txt

wang/4.txt

[root@zabbix-server opt]# ls wang/

1.txt 2.txt 3.txt 4.txt

[root@zabbix-server opt]# cat wang/1.txt

c)第三种方式:

还是觉得tar -g snapshot最大的问题就是不可控,而且稳定性较差,出现备份重叠时候很难处理好。

因此,可以利用find+tar来做增量备份的想法。利用find命令找出最近修改的文件名列表,然后再利用tar打包

实例如下:

[root@linux-node3 ~]# ls /mnt/

test

[root@linux-node3 ~]# ls /mnt/test/

aaa aaaa test1 test2 test3

备份/mnt/test目录下30分钟以内修改的文件

先使用find命令列出最近有修改的文件名列表,保存到文件

[root@linux-node3 ~]# find /mnt/test -mmin -30 -type f >> /mnt/listfile

[root@linux-node3 ~]# ls /mnt/

listfile test

[root@linux-node3 ~]# cat /mnt/listfile

/mnt/test/test2

/mnt/test/aaaa

/mnt/test/test1

然后使用tar命令对文件列表列出的文件名进行打包备份

[root@linux-node3 ~]# tar -zcf test.tgz -T /mnt/listfile

tar: Removing leading `/’ from member names

[root@linux-node3 ~]# ls /mnt

listfile test.tgz test

同理备份/mnt/test目录下1天之内修改的数据

[root@linux-node3 ~]# find /mnt/test -mtime -1 -type f >> /mnt/listfile2

[root@linux-node3 ~]# tar -zcf test2.tgz -T /mnt/listfile2

这样恢复的时候,需要恢复到哪个阶段的数据,就利用这个阶段备份的打包文件进行恢复即可!

这种方式来做增量备份,即使某个时间段机器性能很差,备份重叠,也不会影响到各自的备份进程。

此外,find命令生成的文件list,还可以方便以后查档,直接对list搜索指定文件,不用去tar查看。

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号