tar高级教程:增量备份、定时备份、网络备份
2013-07-21 10:11
232 查看
原文:http://lesca.me/archives/how-to-incrementally-backup-linux-with-gnu-tar.html
为了让文章看上去更简单,本文所做的例子并没有备份到外接设备上,而是在/backup目录下。
/proc
/lost+found
/sys
/mnt
/media
/dev
/tmp
1.完整备份:备份指定的所有目标文件或文件夹
2.增量备份:仅备份atime与上次备份不同的文件或文件夹
3.差异备份:与增量备份差不多,只是增加了对Windows文件系统的支持本文主要阐述如何用tar对系统进行增量备份,以及如何利用cron设置定时备份。
mtime: 文件修改时间。当文件内容呢发生改变时更新。
atime: 文件访问时间。当文件被访问时自动更新。要查看文件的atime,执行
/!\注意:atime可能在tar进行备份时可能发生变化(和文件系统和tar版本有关),可以用–atime-preserve防止这种更新。
ctime: 文件属性修改时间。当文件属性或权限发生变化时更新。要查看文件的atime,执行
2.tar非常依赖atime,以下情况会导致归档数据文件不一致:
(1)备份期间对文件的任何访问
(2)备份期间将系统时间调慢
3.tar假设待备份的文件所在磁盘设备ID是不变的,但NFS等某些文件系统并不属于这种情况,可以用
4.除非情况紧急,并且你充分信任tar,否则你最好在备份时使用
-G与-g相比,-g能通过复制snar文件的方式创建多层次的增量备份文件,而-G却只能用level0
-Gvv 一种固定用法,列出文件属性的同时还显示备份属性:
Y – 该文件在归档文件中
N – 该文件不在归档文件中
D – 文件夹
要恢复数据,以下三种方式都是可行的:
在此,因为要对整个文件系统进行备份,因此仅以/etc/crontab为例进行介绍:
1.它过度依赖于atime
2.如果将归档文件恢复到一个新的文件系统中,所有文件的atime和ctime都被刷新。对于新系统,旧的增量备份文件不再适用,得重新做一遍。
相比之下,rsync似乎很好解决这个问题,而且具有较快的速度。
而dump是所有流行的备份软件中对文件完整性表现最好的[3]
以当前时间和level为备份文件以及snar文件命名
复制旧版本的snar,从而提升level
将新的snar指定给tar,进行备份
/!\注意:请将本脚本放置在/backup目录下运行
根据bkdb指定的信息,找到备份文件和snar,进行还原
检查排除备份的文件夹是否存在,不存在则创建
/!\注意:还原会刷新atime和ctime
每周日进行一次完全备份,删除之前的增量备份
平时进行增量备份
{i}参数说明:
-q 0: wait 0 second on QUIT
-l 1024: Listen port 1024
一、概述
备份与恢复对于系统维护而言是至关重要的事情。不合理的备份与还原会让你的数据面临丢失的风险。许多用户都在丢失重要数据后才意识到这种风险。而要从这种情况恢复数据将是非常耗时并且困难的。所以我们应该从别人的错误中吸取教训,并确保你的系统处于保护中。先考虑一些问题:何时进行备份?
如果你可以接受一个星期的数据丢失,那么每周备份一次就足够了。但是如果你只能容忍一天的数据损失,那么你就必须每天晚上进行备份。备份到哪?
显然备份到系统所在磁盘不是明智之举,用户应该备份到外接硬盘或者磁带上面。为了让文章看上去更简单,本文所做的例子并没有备份到外接设备上,而是在/backup目录下。
要备份什么?
我们要备份整个系统,因此这里需要考虑的是不必备份的目录:/backup/proc
/lost+found
/sys
/mnt
/media
/dev
/tmp
备份方式
tar支持三种方式进行备份:1.完整备份:备份指定的所有目标文件或文件夹
2.增量备份:仅备份atime与上次备份不同的文件或文件夹
3.差异备份:与增量备份差不多,只是增加了对Windows文件系统的支持本文主要阐述如何用tar对系统进行增量备份,以及如何利用cron设置定时备份。
二、基础知识
mtime, atime, ctime
Linux的文件系统会记录以下三种时间mtime: 文件修改时间。当文件内容呢发生改变时更新。
ls -l默认显示mtime
atime: 文件访问时间。当文件被访问时自动更新。要查看文件的atime,执行
ls -lu。
/!\注意:atime可能在tar进行备份时可能发生变化(和文件系统和tar版本有关),可以用–atime-preserve防止这种更新。
ctime: 文件属性修改时间。当文件属性或权限发生变化时更新。要查看文件的atime,执行
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/nulltar -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目录下运行
恢复增量备份文件
本代码完成以下任务:找到备份数据库bkdb(记录当前备份的level),如果没有则结束根据bkdb指定的信息,找到备份文件和snar,进行还原
检查排除备份的文件夹是否存在,不存在则创建
/!\注意:还原会刷新atime和ctime
改进版本:利用find仅备份mtime更新的文件
本代码[4]完成以下任务:载入当前日期到环境变量每周日进行一次完全备份,删除之前的增量备份
平时进行增量备份
九、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 / )"想了解更多关于SSH的内容,请参看SSH端口转发(本地端口转发、远程端口转发、动态端口转发)工作原理、应用详解
相关文章推荐
- Windows 2008 R2 2012 R2服务器备份高级应用之---增量备份到网络
- tar的高级用法_增量备份_SSH远程归档传送
- linux 下tar的增量备份
- Linux中tar命令高级用法——备份…
- linux下rsync和tar增量备份梳理
- 无限互联iOS学习资料之UI高级(网络与多线程)视频教程
- tar命令使用及tar实现全备份和增量备份
- tar命令高级用法——备份数据
- Linux SVN服务器做定时增量备份脚本
- TAR 实现增量备份
- tar 的应用--全备份,增量备份
- tar 高级应用 (差异备份和档案分割备份)
- 使用教程 - BestSync同步软件 - SQL2008R2 数据库定时备份解决方案
- Tar 实现增量备份
- tar 实现增量备份
- tar 增量备份
- tar增量备份实例
- WordPress网站利用WP2PCS-SY插件定时、增量网站备份至百度网盘
- linux下使用tar增量备份
- 用tar命令简单实现数据的全备份、增量备份、差量备份