一、概述

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

何时进行备份?

如果你可以接受一个星期的数据丢失,那么每周备份一次就足够了。但是如果你只能容忍一天的数据损失,那么你就必须每天晚上进行备份。

备份到哪?

显然备份到系统所在磁盘不是明智之举,用户应该备份到外接硬盘或者磁带上面。

为了让文章看上去更简单,本文所做的例子并没有备份到外接设备上,而是在/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/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目录下运行

[bash]

#!/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

[/bash]

恢复增量备份文件

本代码完成以下任务:

找到备份数据库bkdb(记录当前备份的level),如果没有则结束

根据bkdb指定的信息,找到备份文件和snar,进行还原

检查排除备份的文件夹是否存在,不存在则创建

/!\注意:还原会刷新atime和ctime

[bash]

#!/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

[/bash]

改进版本:利用find仅备份mtime更新的文件

本代码[4]完成以下任务:

载入当前日期到环境变量

每周日进行一次完全备份,删除之前的增量备份

平时进行增量备份

[bash]

#!/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

[/bash]

九、tar高级技巧

1.档案分割

创建时分割:

tar -cvpz / | 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 / | nc -q 0 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 1024

接收端

nc -l 1024 | tar -xzvpf - -C /

4.通过SSH进行网络备份与恢复

在安装了SSH服务的主机(SSH Server)上,客户端只需直接发起连接并传送命令到目标计算机(SSH Server),就能完成操作。所有数据通过“管道”传送,用户不需要了解通过哪个端口备份(当然您也可以自行指定),而且所有传输的数据都是加密的。因此通过SSH备份,更安全、更方便、只需一人就能完成备份工作。请在准备备份的计算机上执行以下命令:

tar -cvpz / | ssh "( cat > ssh_backup.tar.gz )"

要恢复文件,请执行以下命令:

cat ssh_backup.tar.gz | ssh "( tar -xzvp -C / )"

linux tar 增量备份,tar高级教程:增量备份、定时备份、网络备份相关推荐

  1. Linux 的 微微 微微 微微 高级 教程 | web nginx 1

    Web: 去家里看剩下的nginx 查看数据库 查询数据 .org表示非盈利组织 .com表示商业公司 Nginx是一个做网站服务器的软件,是静态的网站 html 写前端静态页面的语言 python ...

  2. 【Android取证篇】华为手机OTG备份密码重置教程

    [Android取证篇]华为手机OTG备份密码重置教程 ​ 提取华为设备遇到OTG备份出来的数据信息软件无法正常解析时,排除数据提取不完整.软件设备等问题,可考虑重置华为的备份密码,重新备份数据再分析 ...

  3. NBU网络备份大全之oracle系统冷备份

    学习和掌握如何使用NBU备份文件系统,对于一个数据管理员来说,仅仅是一个开始.因为对于大部分企业来说,买来NBU主要是为了备份企业数据库的数据, 保护数据库的数据安全,进而保证企业应用的安全运行.因此 ...

  4. [转帖]tar高级教程:增量备份、定时备份、网络备份

    tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...

  5. linux 增量备份文件,Linux下最容易的增量备份,tar增量备份

    Linux备份真是太方便了,其实我们常用的tar就是很好的增量备份软件 使用 tar -g 参数进行增量备份实验 完整备份: #建立测试路径与档案 mkdir test touch test/{a,b ...

  6. linux查分自动备份tar,linux 下tar的增量备份

    #执行完整备份tar -g snapshot -zcf backup_full.tar.gz test #执行第一次的增量备份 (注意 tarball 档名) tar -g snapshot -zcf ...

  7. linux安装oracle tar,在linux as4上用tar方式安装oracle 10g步骤教程-Oracle

    今天在linux as4上用tar方式安装oracle 10g,下面简单那记录步骤及安装过程中出现的问题. 原数据库所在服务器信息: [oracle@haoc2008 data]$ more /etc ...

  8. linux tar.7z如何解压,Linux下解压:tar、rar、7z命令简单易懂的教程

    Linux下的解压于压缩确实有点小复杂神马7z啊,gz2啊,bz2啊,rar啊--不过看完此文,你就不会以为复杂了.嘻嘻~~html tar命令常见参数与实例: ------------------- ...

  9. linux解压7z包命令,Linux下解压:tar、rar、7z命令简单易懂的教程(含实例)

    Linux下的解压于压缩确实有点小复杂神马7z啊,gz2啊,bz2啊,rar Linux下的解压于压缩确实有点小复杂神马7z啊,gz2啊,bz2啊,rar啊--不过看完此文,你就不会觉得复杂了.嘻嘻~ ...

最新文章

  1. NHibernate从入门到精通系列(7)——多对一关联映射
  2. WCF 4.0 Issues with IIS 7.0 on x86 and x64 bit Machines(转载)
  3. 【Cocos2D-X 学习笔记】Node父类的方法和属性
  4. Spring Boot入门(11)实现文件下载功能
  5. 机器学习多元线性回归_过度简化的机器学习(1):多元回归
  6. win下php的memcached的安装与使用
  7. synthesize和dynamic
  8. python图像几何变换_Python 图像处理 OpenCV (5):图像的几何变换
  9. 从java代码获取类名_java代码获取当前类类名、方法名
  10. 报错日常——Tomcat45秒超时问题
  11. Excel向数据库插入数据(执行一次只需连接一次)-batch简单使用
  12. Matplotlib 中文用户指南 4.2 基本的文本命令
  13. 逻辑表达式是否合法_Linux shell 逻辑运算符、逻辑表达式详解
  14. 谷歌发布 XS-Leaks 漏洞知识库
  15. Entity Framework 学习高级篇2—改善EF代码的方法(下)(转)
  16. 导出excel文件,若在一台PC端无法正常导出,闪退,进程还存在时(以下方法也许对你有用)
  17. matlab求解多元函数的偏导数diff
  18. H106OJ | 第二次练习(查找)
  19. Win10怎么关闭smartscreen筛选器检测功能?
  20. synergy服务器未响应,请问synergy启动不了怎么回事???

热门文章

  1. 浙江×××文网文的时间和办理周期
  2. 一文详解 TCP与UDP区别
  3. bxSlider使用
  4. 谈招聘:一个对的人,是对整个团队的救赎
  5. 转移熵matlab,转移熵
  6. 开通快手磁力金牛遇到这些问题怎么解决?
  7. 3w+深度盘点:机器学习面试知识点梳理!
  8. FJNU2019级第二场排位赛D题Nim题解
  9. mac终端 git常用命令
  10. 太阳能光伏材料行业调研报告 - 市场现状分析与发展前景预测