«

xfs文件系统备份及恢复

指尖二进制 • 1 年前 • 774 次点击 • LINUX


xfs文件系统的备份和恢复概述

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级别代表 增量备份

扩展:
完全备份:每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;
增量备份:每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;
差异备份:每次都将第一次完整备份以来有变化的文件进行备份;

实验环境:
系统centos7.4 添加一块虚拟硬盘(准备一个测试分区)
正常使用一块磁盘过程如下:
添加磁盘大小:20G ---> 分区 ---> 格式化 ---> 挂载

fdisk分区,对新添加的硬盘分区。

[root@localhost ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1

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

[root@localhost ~]# mkfs.xfs /dev/sdb1
[root@localhost ~]# mkdir /sdb1
[root@localhost ~]# mount /dev/sdb1 /sdb1/

准备备份测试文件

[root@localhost sdb1]# cp /etc/passwd .
[root@localhost sdb1]# mkdir test
[root@localhost sdb1]# touch test/a
[root@localhost sdb1]# tree /sdb1/
/sdb1/
├── passwd
└── test
    └── a

备份

1:备份整个分区。(这个功能就像是虚拟机的快照,服务器被黑后,进行快速恢复)
xfsdump -f 备份存放位置 要备份路径或设备文件
注意:备份的路径这里不能写成/sdb1/。 可以是/dev/sdb1 或 /sdb1 总之目录结尾不能有/

[root@localhost ~]# xfsdump -f /opt/dump_sdb1  /dev/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 foolcloud.cn:/sdb1
xfsdump: dump date: Wed Oct 17 10:15:11 2018
xfsdump: session id: d05fc7d4-a9c1-41ee-aed8-cd7e969a542b
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 25552 bytes
xfsdump: dump size (non-dir files) : 2592 bytes
xfsdump: dump complete: 313 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/dump_sdb1 OK (success)
xfsdump: Dump Status: SUCCESS

2:指定备份时免交互操作,方便后期做定时备份
-L :xfsdump 纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明
-M :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明

[root@localhost ~]# xfsdump -f /opt/dump_passwd /sdb1 -L dump_passwd -M media1

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

[root@localhost ~]# xfsdump -f /opt/dump_grub2 -s grub2/grub.cfg /boot -L dump_grub2 -M boot-sda1

4:查看备份信息与内容
备份成功后,我们就可以在/var/lib/xfsdump/inventory目录下看到生成的档案信息

[root@localhost ~]# xfsdump  -I(字母大写i)

测试恢复:先删除之前创建的内容

[root@localhost ~]# rm -rf /sdb1/*

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

[root@localhost opt]# xfsrestore -f /opt/dump_sdb1  /sdb1

查看恢复情况

[root@localhost ~]# ls /sdb1/

恢复单个文件如下:

[root@localhost ~]# mkdir /var/test/ 
[root@localhost ~]# xfsrestore -f /opt/dump_grub2 -s grub2/grub.cfg /var/test/
[root@localhost ~]# xfsrestore -f /opt/dump_grub2 -s grub2 /var/test/  #恢复目录

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

增量备份

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

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

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

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

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

[root@localhost sdb1]# xfsdump -f /opt/test-full /sdb1 -L test-full -M media0

增加一些内容,然后进行第1次增量备份

[root@localhost ~]# touch  /sdb1/1.txt /sdb1/2.txt
[root@localhost ~]# tree  /sdb1/
/sdb1/
├── 1.txt
├── 2.txt
├── passwd
└── test
    └── a 
[root@localhost sdb1]# xfsdump -l 1 -f /opt/test-back1 /sdb1 -L test-bak1 -M media0

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

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

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

现在进行恢复,要想恢复全部全部数据,包括新添加的文件,如何恢复?
步骤:
1:先恢复完全备份
2:情况1: 恢复最后一次增量备份(如果两次增量备份都是1级的,所以只需要恢复最后一个增量就可以了。
3:情况2:如果你做的是第一次是1级备,第二次是2级备,那么你在恢复的时候就需要先恢复完全备份,然后是1级备,最后是2级备)

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

到此,数据恢复成功了。

还没收到回复