XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据。xfsdump 按inode顺序备份一个XFS文件系统。

centos7选择xfs格式作为默认文件系统,而且不再使用以前的ext,仍然支持ext4,xfs专为大数据产生,每个单个文件系统最大可以支持8eb,单个文件可以支持16tb,不仅数据量大,而且扩展性高。还可以通过xfsdump,xfsrestore来备份和恢复。

与传统的UNIX文件系统不同,XFS不需要在备份前被卸载;对使用中的XFS文件系统做备份就可以保证镜像的一致性。XFS的备份和恢复的过程是可以被中断然后继续的,无须冻结文件系统。xfsdump 甚至提供了高性能的多线程备份操作——它把一次dump拆分成多个数据流,每个数据流可以被发往不同的目的地

首先了解一下xfsdump的备份级别有以下两种,默认为0(即完全备份)

0 级别代表:           完全备份

1  到9级别代表:      增量备份

扩展:

完全备份:每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;

增量备份:每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;

差异备份:每次都将第一次完整备份以来有变化的文件进行备份。

4.4.1 环境准备

实验环境:

        系统CENTOS7.2 添加一块虚拟硬盘(准备一个测试分区)

正常使用一块磁盘过程如下:

添加磁盘大小:20G à分区à格式化à挂载进行使用

 

对新添加的硬盘进行格式化:

[root@xuegod63 ~]# fdisk /dev/sdb指定需要分区的设备
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x06d5a427 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n创建一个新的分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)   #主分区
   e   extended                                 #扩展分区       
Select (default p): p创建一个主分区
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):p打印分区表
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x06d5a427
   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
命令(输入 m 获取帮助):w保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@xuegod63 ~]# ls  /dev/sdb* 查看第二块磁盘
/dev/sdb  /dev/sdb1

 

使用新的分区,格式化分区,并进行挂载

[root@xuegod63 ~]# mkfs.xfs /dev/sdb1     #格式化分区
[root@xuegod63 ~]# mkdir /sdb1     #创建挂载点
[root@xuegod63 ~]# mount /dev/sdb1 /sdb1   #挂载
准备备份测试文件
[root@xuegod63 ~]# cd /sdb1/  进入到/目录下的sdb1
[root@xuegod63 sdb1]# cp /etc/passwd ./复制/etc/passwd文件到当前目录下
[root@xuegod63 sdb1]# mkdir test创建一个新的文件夹        
[root@xuegod63 sdb1]# touch test/a在test目录下创建一个文件
[root@xuegod63 sdb1]# tree /sdb1/查看sdb1目录下的内容
[root@xuegod63 sdb1]# tree /sdb1/
/sdb1/
├── passwd
└── test
    └── a

4.4.2 备份

1、备份整个分区。 (这个功能就像是虚拟机的快照,服务器被黑后,进行快速恢复)

xfsdump  -f 备份存放位置 要备份路径或设备文件

注意:备份的路径这里不能写成/sdb1/   可以是/dev/sdb1 或/sdb1(刚挂载的目录)

[root@xuegod63 sdb1]# xfsdump -f /opt/dump_sdb1  /dev/sdb1
                        xfs拷贝备份 -f /opt/dump_adb1(直接创建的文件)
[root@xuegod63 sdb1]# xfsdump -f /opt/dump_sdb1  /dev/sdb1    #把/dev/下的sdb1或者是之前把/dev/sdb1挂载到根目录下的/sdb1 备份到/opt/目录下的新建的文件dump_sdb1都可以
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control
========== dump label dialog ==============================
please enter label for this dump session (timeout in 300 sec)
dump_sdb1  指定备份会话标签
session label entered: "dump_sdb1"
 --------------------------------- end dialog ---------------------------------
xfsdump: level 0 dump of xuegod63.cn:/sdb1
xfsdump: dump date: Fri Nov 17 12:24:53 2017
xfsdump: session id: b5a25fcd-d43d-4308-bf29-142066f89d9a
xfsdump: session label: "dump_sdb1"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 25856 bytes
============== media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
sdb1指定设备标签,就是对要备份的设备做一个描述
media label entered: "sdb1"
 --------------------------------- end dialog --------------------------------
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 24544 bytes
xfsdump: dump size (non-dir files) : 2592 bytes
xfsdump: dump complete: 46 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/dump_sdb1 OK (success)
xfsdump: Dump Status: SUCCESS   # 显示success表示成功
2、 指定备份时免交互操作,方便后期做定时备份
[root@xuegod63 sdb1]# xfsdump -f /opt/dump_passwd /sdb1 -L dump_passwd -M media1

-L  :xfsdump  纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明

-M  :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明

[root@xuegod63 opt]# xfsdump -f /opt/dump_passwd /sdb1或(/dev/sdb1) -L dump_passwd -M sdb1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: WARNING: most recent level 0 dump was interrupted, but not resuming that dump since resume (-R) option not specified
xfsdump: level 0 dump of xuegod63.cn:/sdb1
xfsdump: dump date: Sat Jun 15 13:55:04 2019
xfsdump: session id: f5ee3040-8655-4a69-9f26-bead841eb49e
xfsdump: session label: "dump_passwd"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 25856 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 24544 bytes
xfsdump: dump size (non-dir files) : 2592 bytes
xfsdump: dump complete: 20 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/dump_passwd OK (success)
xfsdump: Dump Status: SUCCESS  # 显示success表示成功
[root@xuegod63 opt]# ls /opt/dump_passwd   #查看已经备份成功
/opt/dump_passwd

3、指定只备份分区中某个目录

参数:-s 文件路径  只对指定的文件进行备份,-s指定时,路径写的是相对路径(-s可以是文件或目录)

[root@xuegod63 sdb1]# ls /boot/grub2/grub.cfg
/boot/grub2/grub.cfg
[root@xuegod63 sdb1]# xfsdump -f /opt/dump_grub2 -s grub2/grub.cfg /boot -L
dump_grub2 -M boot-grub2

:文件位置在grub2    grub2本来就在根目录下所以不用再加/boot,

:要备份的文件目录位置是在/boot    #绝对路径

#指定备份会话标签

#指定设备标签,就是对要备份的设备做一个描述

[root@xuegod63 boot]# ls /opt
dump_grub2  dump_passwd  dump_sdb1  rh
[root@xuegod63 boot]#ll -hl /0pt

总用量 76K

-rw-r--r--  1 root root 28K 6月  15 14:40 dump_grub2
-rw-r--r--  1 root root 24K 6月  15 13:55 dump_passwd
-rw-r--r--  1 root root 24K 6月  15 12:53 dump_sdb1
drwxr-xr-x. 2 root root  6  9月   7  2017  rh

4、查看备份信息与内容

备份成功后,我们就可以在/var/lib/xfsdump/inventory目录下看到生成的档案日志信息

[root@xuegod63 boot]# ls /var/lib/xfsdump/inventory/
0a7b7b70-a7c0-45d8-b116-f219b15ba91a.InvIndex  69bf6c3d-2d25-48d3-b73c-1a987bbec173.StObj  b60e1056-d4f6-4683-b486-72cf8fe6aee4.InvIndex
0e52cdd2-37ff-4213-9432-38f0dfba46b6.StObj     
[root@xuegod63 opt]# xfsdump  -I(字母大写i)这个可以查看备份的更详细
测试恢复:先删除之前创建的内容
[root@xuegod63 sdb1]# ls
passwd  test
[root@xuegod63 sdb1]# pwd
/sdb1
[root@xuegod63 sdb1]# rm -rf ./*


4.4.3 文件系统恢复

语法:xfsrestore -f 指定恢复文件的位置 指定存放恢复后的文件的路径

[root@xuegod63 opt]# xfsrestore -f /opt/dump_sdb1  /sdb1
查看恢复情况
[root@xuegod63 ~]# ls /sdb1/

恢复单个文件如下:

[root@xuegod63 ~]# mkdir /var/test/ 
[root@xuegod63 ~]# xfsrestore -f /opt/dump_grub2 -s grub2/grub.cfg /var/test/#恢复文件
                                之前备份再/opt/的文件  只恢复一个文件  恢复到/var/test/文件夹下
[root@xuegod63 ~]# xfsrestore -f /opt/dump_grub2 -s grub2 /var/test/恢复目录
                                之前备份再/opt/的文件  恢复一个目录  恢复到/var/test/文件夹下

注:

使用 xfsdump 时,请注意下面下面的几个限制:
1、xfsdump 不支持没有挂载的文件系统备份!所以只能备份已挂载的!
2、xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)
3、xfsdump 只能备份 XFS 文件系统
4、xfsdump 备份下来的数据 (档案或储存媒体) 只能让 xfsrestore 解析
5、xfsdump 是透过文件系统的 UUID 来分辨各个备份档的,因此不能备份两个具有相同 UUID 的文件系统

4.4.4 增量备份

概念

       增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,以此类推。

优缺点

优点:没有重复的备份数据,因此备份的数据量不大,备份所需的时间很短。

缺点:数据恢复相对比较麻烦,它需要上一次全备份和所有增量备份的内容才能够完全恢复成功,并且它们必须沿着从全备份到依次增量备份的时间顺序逐个反推恢复,因此可能会延长的恢复时间


实战: 增量备份文件系统

准备一个备份目录进行备份

[root@xuegod63
sdb1]# tree  /sdb1
/sdb1/
├──
passwd
└── test
    └── a

对上面的内容进行第一次全备

[root@xuegod63
sdb1]# xfsdump -f /opt/test-full /sdb1 -L test-full -M media0
增加一些内容,然后进行第1次增量备份
[root@xuegod63
~]# touch  /sdb1/1.txt /sdb1/2.txt
[root@xuegod63
~]# tree  /sdb1/
/sdb1/
├── 1.txt
├── 2.txt
├──
passwd
└── test
└── a 
[root@xuegod63
sdb1]# xfsdump -l 1 -f /opt/test-back1 /sdb1 -L
test-bak1 -M media0

-l <level>做一个等级为1的备份

再次增加内容,然后进行level 2级别的增量备

[root@xuegod63
sdb1]# touch  /sdb1/test/a.txt  /sdb1/test/b.txt
[root@xuegod63
~]# tree /sdb1/
/sdb1/
├──
1.txt
├──
2.txt
├──
passwd
└── test
    ├── a
    ├── a.txt
└── b.txt 
[root@xuegod63 sdb1]# xfsdump -l 2 -f /opt/test-back2 /sdb1 -L test-bak2 -M media0
[root@xuegod63
~]# rm -rf /sdb1/*删除所有数据

现在进行恢复,要想恢复全部全部数据,包括新添加的文件,如何恢复?

步骤:

       1、先恢复完全备份   

       2、情况1: 恢复最后一次增量备份(如果两次增量备份都是1级的,所以只需要恢复最后一个增量就可以了。

3、情况2:如果你做的是第一次是1级备,第二次是2级备,那么你在恢复的时候就需要先恢复完全备份,然后是1级备,最后是2级备)

[root@xuegod63
~]# xfsrestore -f /opt/test-full /sdb1/
[root@xuegod63
~]# xfsrestore -f /opt/test-back2 /sdb1/故意先恢复back2,查看
[root@xuegod63
~]# tree /sdb1/查看,发现没有1.txt ,2.txt 
/sdb1/
├── passwd
└── test
    ├── a
    ├── a.txt
└── b.txt 
[root@xuegod63
~]# xfsrestore -f /opt/test-back1 /sdb1/   
[root@xuegod63
~]# tree /sdb1/

到此,数据恢复成功了。