Linux tar命令高级用法——备份数据
Linux tar命令高级用法——备份数据
Linux上有功能强大的tar命令,tar最初是为了制作磁带备份(tape archive)而设计的,它的作用是把文件和目录备份到磁带中,然后从磁带中提取或恢复文件。现在我们可以使用tar来备份数据到任何存储介质上。它是文件级备份,不必考虑底层文件系统类别,并且支持增量备份。
1.部分常用选项
●-z, --gzip:使用gzip工具(解)压缩,后缀一般为.gz
●-c, --create:tar打包,后缀一般为.tar
●-f, --file=:后面立刻接打包或压缩后得到的文件名
●-x, --extract:解包命令,与-c对应
●-p:保留备份数据的原本权限和属性
●-g:后接增量备份的快照文件
●-C:指定解压缩的目录
●--exclude:排除不打包的目录或文件,支持正则匹配
其他
●-X, --exclude-from:在一个文件中列出要排除的目录或文件(在--exclude=较多时使用)
●-t, --list:列出备份档案中的文件列表,不与-c、-x同时出现
●-j, --bzip2:使用bzip2工具(解)压缩,后缀一般为.bz2
●-P:保留绝对路径,解压时同样会自动解压到绝对路径下
●-v:(解)压缩过程显示文件处理过程,常用但不建议对大型文件使用
2.增量备份(网站)数据
许多系统(应用或网站)每天都有静态文件产生,对于一些比较重要的静态文件如果有进行定期备份的需求,就可以通过tar打包压缩备份到指定的地方,特别是对一些总文件比较大比较多的情况,还可以利用-g选项来做增量备份。
备份的目录最好使用相对路径,也就是进入到需要备份的根目录下
具体示例方法如下。
备份当前目录下的所有文件
# tar -g /tmp/snapshot_data.snap -zcpf /tmp/data01.tar.gz .
在需要恢复的目录下解压恢复
# tar -zxpf /tmp/data01.tar.gz -C .
-g选项可以理解备份时给目录文件做一个快照,记录权限和属性等信息,第一次备份时/tmp/snapshot_data.snap不存在,会新建一个并做完全备份。当目录下的文件有修改后,再次执行第一条备份命令(记得修改后面的档案文件名),会自动根据-g指定的快照文件,增量备份修改过的文件,包括权限和属性,没有动过的文件不会重复备份。
另外需要注意上面的恢复,是“保留恢复”,即存在相同文件名的文件会被覆盖,而原目录下已存在(但备份档案里没有)的,会依然保留。所以如果你想完全恢复到与备份文件一模一样,需要清空原目录。如果有增量备份档案,则还需要使用同样的方式分别解压这些档案,而且要注意顺序。
下面演示一个比较综合的例子,要求:
●备份/tmp/data目录,但cache目录以及临时文件排除在外
●由于目录比较大(>4G),所以全备时分割备份的档案(如每个备份档案文件最大1G)
●保留所有文件的权限和属性,如用户组和读写权限
# cd /tmp/data
做一次完全备份
# rm -f /tmp/snapshot_data.snap
# tar -g /tmp/snapshot_data.snap -zcpf - --exclude=./cache ./ | split -b 1024M - /tmp/bak_data$(date -I).tar.gz_
分割后文件名后会依次加上aa,ab,ac,...,上面最终的备份归档会保存成
bak_data2014-12-07.tar.gz_aa
bak_data2014-12-07.tar.gz_ab
bak_data2014-12-07.tar.gz_ac
...
增量备份
可以是与完全备份一模一样的命令,但需要注意的是假如你一天备份多次,可能导致档案文件名重复,那么就会导致
备份实现,因为split依然会从aa,ab开始命名,如果一天的文件产生(修改)量不是特别大,那么建议增量部分不
分割处理了:( 一定要分割的话,文件名加入更细致的时间如$(date +%Y-%m-%d_%H) )
# tar -g /tmp/snapshot_data.snap -zcpf /tmp/bak_data2014-12-07.tar.gz --exclude=./cache ./
第二天增备
# tar -g /tmp/snapshot_data.snap -zcpf /tmp/bak_data2014-12-08.tar.gz --exclude=./cache ./
恢复过程
恢复完全备份的档案文件
可以选择是否先清空/tmp/data/目录
# cat /tmp/bak_data2014-12-07.tar.gz_* | tar -zxpf - -C /tmp/data/
恢复增量备份的档案文件
$ tar –zxpf /tmp/bak_data2014-12-07.tar.gz -C /tmp/data/
$ tar –zxpf /tmp/bak_data2014-12-08.tar.gz -C /tmp/data/
...
一定要保证是按时间顺序恢复的,像下面文件名规则也可以使用上面通配符的形式
如果需要定期备份,如每周一次全备,每天一次增量备份,则可以结合crontab实现。
3.备份文件系统
备份文件系统方法有很多,例如cpio, rsync, dump, tar,这里演示一个通过tar备份整个Linux系统的例子,整个备份与恢复过程与上面类似。
首先Linux(这里是CentOS)有一部分目录是没必要备份的,如/proc、/lost+found、/sys、/mnt、/media、/dev、/proc、/tmp,如果是备份到磁带/dev/st0则不必关心那么多,因为我这里是备份到本地/backup目录,所以也需要排除,还有其它一些NFS或者网络存储挂载的目录。
创建排除列表文件
# vi /backup/backup_tar_exclude.list
/backup
/proc
/lost+found
/sys
/mnt
/media
/dev
/tmp
$ tar -zcpf /backup/backup_full.tar.gz -g /backup/tar_snapshot.snap --exclude-from=/backup/tar_exclude.list /
4.注意
使用tar无论是备份数据还是文件系统,需要考虑是在原系统上恢复还是另一个新的系统上恢复。
●tar备份极度依赖于文件的atime属性,
●文件所属用户是根据用户ID来确定的,异机恢复需要考虑相同用户拥有相同USERID
●备份和恢复的过程尽量不要运行其他进程,可能会导致数据不一致
●软硬连接文件可以正常恢复
来自:Sean's Notes 小样儿の部落阁
链接:http://seanlook.com/2014/12/08/tar_backup_filesystem/
Linux tar命令高级用法——备份数据的更多相关文章
- linux中find命令高级用法
前言 在<Linux中的文件查找技巧>一文中,我们已经知道了文件查找的基本方法,今天我们介绍find命令的一些高级使用技巧.它能满足我们一些更加复杂的需求. 查找空文件或空目录 有时候需要 ...
- SQL Server中bcp命令的用法以及数据批量导入导出
原文:SQL Server中bcp命令的用法以及数据批量导入导出 1.bcp命令参数解析 bcp命令有许多参数,下面给出bcp命令参数的简要解析 用法: bcp {dbtable | query} { ...
- 学习Linux tar 命令:最简单也最困难
摘要:在本文中,您将学习与tar 命令一起使用的最常用标志.如何创建和提取 tar 存档以及如何创建和提取 gzip 压缩的 tar 存档. 本文分享自华为云社区<Linux 中的 Tar 命令 ...
- linux tar命令 压缩、打包、解压 详解
linux tar命令 压缩.打包.解压 详解 1.常用压缩命令 tar –czvf 压缩后的文件.tar.gz 要压缩的文件 2.常用解压命令 tar –xzvf 解压后的文件.tar.gz [要解 ...
- Linux tar命令之--exclude参数 排除指定的文件或目录
https://my.oschina.net/u/3285916/blog/1632552 参数: --exclude 打包时排除不需要处理的文件或目录 说明: tar -zcf a.tar.gz 打 ...
- [转帖]Linux date命令的用法(转)
Linux date命令的用法(转) https://www.cnblogs.com/asxe/p/9317811.html 1.命令:date 2.命令功能:date 可以用来显示或设定系统的日期与 ...
- Linux下mv命令高级用法
mv 也是 Linux 下一个使用频率非常高的命令,但除了一些基本用法,你还知道它的哪些高级用法呢? 1. 基本用法 移动一个/多个文件: 移动一个/多个目录: 重命名文件/目录. 这些都是很基本的用 ...
- Linux tar 命令用法
tar 命令可以为linux的文件和目录创建档案.利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar 最初被用来在磁带上创建档案,现在,用户 ...
- Linux find命令的用法实践
一.find命令简介 Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大 ...
随机推荐
- 一段处理json的C#代码
服务器端: using Newtonsoft.Json; using Newtonsoft.Json.Linq; public ActionResult GetGatherData() { IList ...
- python基础(二)----数据类型
Python基础第二章 二进制 字符编码 基本数据类型-数字 基本数据类型-字符串 基本数据类型-列表 基本数据类型-元组 可变.不可变数据类型和hash 基本数据类型-字典 基本数据类型-集合 二进 ...
- BitArray编写埃拉托斯特尼筛法(原书错误,学习更正)
刚开始代码无法运行,修改后原书代码可以运行了,可是书本的思想还是错的. 虽然接下来的都是讲错误的思想下的“错误”的修改. 原书缺了窗体控件的代码,虽然在VS下不需要手动写窗体的代码,但是刚开始确实也不 ...
- learn go random
package main // 参考文档: // go 基本类型和运算符 // https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/e ...
- 【剑指offer15】二进制中1的个数(位运算),C++实现
原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记 1.题目 # 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.例如,把9表示成二进制是1001,有两 ...
- 使用Percona Xtrabackup创建MySQL slave库
一.使用Percona Xtrabackup创建MySQL slave库 MySQL Server 版本: Server version: 5.7.10-log MySQL Community Ser ...
- 51Nod 1439:互质对(用莫比乌斯来容斥)
有n个数字,a11,a22,…,ann.有一个集合,刚开始集合为空.然后有一种操作每次向集合中加入一个数字或者删除一个数字.每次操作给出一个下标x(1 ≤ x ≤ n),如果axx已经在集合中,那么就 ...
- python(七):元类与抽象基类
一.实例创建 在创建实例时,调用__new__方法和__init__方法,这两个方法在没有定义时,是自动调用了object来实现的.python3默认创建的类是继承了object. class A(o ...
- python3.x 类和对象
python同样支持类和对象.在python3.x中没有了经典类,只有新式类,默认创建的就是新式类.具体的新式类与经典类的不同在python3.x中已经没有意义了. 类的定义和实例化 python定义 ...
- 《DSP using MATLAB》示例Example7.4
代码: h = [-4, 1, -1, -2, 5, 6, 5, -2, -1, 1, -4]; M = length(h); n = 0:M-1; [Hr, w, a, L] = Hr_Type1( ...