Tar 工具使用介绍

选项说明

常用选项:

    -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: (解)压缩过程显示文件处理过程,常用但不建议对大型文件使用

增量备份、还原说明

增量备份:

tar -g snapshot -zcf backup_full.tar.gz  test/          ## 完全备份
tar -g snapshot -zcf backup_incremental_1.tar.gz test/  ## 进行第一次的增量压缩
tar -g snapshot -zcf backup_incremental_2.tar.gz test/  ## 进行第二次的增量压缩

还原:

tar -zxf backup_full.tar.gz
tar -zxf backup_incremental_1.tar.gz
tar -zxf backup_incremental_2.tar.gz

使用示例

要求

  • 备份/tmp/data目录,但cache目录以及临时文件排除在外(使用--exclude选项)
  • 由于目录比较大(>4G),所以全备时分割备份的档案(如每个备份档案文件最大1G)(使用split命令)
  • 保留所有文件的权限和属性,如用户组和读写权限(使用-p选项)

做一次完全备份

cd /tmp/data
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实现。

备份文件系统说明

创建排除列表文件:

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

注意:
使用tar无论是备份数据还是文件系统,需要考虑是在原系统上恢复还是另一个新的系统上恢复。
tar备份极度依赖于文件的atime属性。
文件所属用户是根据用户ID来确定的,异机恢复需要考虑相同用户拥有相同USERID。
备份和恢复的过程尽量不要运行其他进程,可能会导致数据不一致。
软硬连接文件可以正常恢复。

脚本参考

全备:

#!/bin/bash
#
# please modify value of variables.
#
FILES='files.txt'
SNAP_FILE=/tmp/snapshot
FULL_BACKUP_FILE=/tmp/fullbackup-`date +%Y%m%d%H%M`.tar.gz

rm -f $SNAP_FILE
tar -g $SNAP_FILE -pzcf $FULL_BACKUP_FILE -T $FILES

增备:

#!/bin/bash
#
# please modify value of variables.
#
FILES='files.txt'
SNAP_FILE=/tmp/snapshot
INCRE_BACKUP_FILE=/tmp/increbackup-`date +%Y%m%d%H%M`.tar.gz

tar -g $SNAP_FILE -pzcf $INCRE_BACKUP_FILE -T $FILES
posted @ 2021-08-24 14:02  Varden  阅读(510)  评论(0)    收藏  举报