XFS 提供了xfsdump和xfsrestore 工具协助备份XFS文件系统中的数据。xfsdump inode顺序备份一个XFS文件系统。
centos7选择xfs格式作为默认文件系统,而且不再使用以前的ext,仍然支持xext4,xfs专为大数据所产生,每单个文件系统最磊可以支持8eb,单个文件可以支持16tb,不仅数据量磊,而且扩展性高。还可以通过xfsdump,xfsrestore来备份和恢复。原始备份数据方法:cp
与传统的UNIX文件系统不同,XFS不需要在备份前被卸载;对使用中的XFS文件系统做备份就可以保证镜像的一致性。 XFS的备份和恢复过程是可以被中断然后继续的,无须冻结文件系统。xfsdump甚至提供了高性能的多线程备份操作—–它把一次dump拆分成多个数据流,每个数据流可以被发往不同的目的地。
首先了解一下xfsdump的备份级别有以下两种,默认0(即完全备份)
0 级别代表: 完全备份
1到9级别代表:增量备份。
扩展:
完全备份:每次都把指定的备份目录完整复制一遍,不管目录下的文件有没有变化;
增量备份:每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;
差异备份:每次都将第一次完整备份以来有变化的文件进行备份。
实验环境:
centos7.4 添加一块虚拟硬盘(准备一个测试分区)
正常使用一块磁盘过程如下:
添加磁盘20G->分区->格式化->挂载
对新添加的磁盘进行格式化
[root@localhost ~]# fdisk /dev/vdb
[root@localhost ~]# fdisk /dev/vdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x89755df3 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x89755df3
设备 Boot Start End Blocks Id System
命令(输入 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/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x89755df3
设备 Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# ls /dev/vdb*
/dev/vdb /dev/vdb1
使用新的分区,格式化分区,并进行挂载
[root@localhost ~]# mkfs.xfs /dev/vdb1
[root@localhost ~]# mkdir /mnt/vdb1 #创建挂载点
[root@localhost ~]# mount /dev/vdb1 /mnt/vdb1 #挂载
准备备份测试文件
[root@localhost vdb1]# tree ./
./
├── passwd
└── test
└── a
备份
1 、备份整个分区 (这个功能就像是虚拟机的快照,服务器被黑后,进行快速恢复)
xfsdump -f 备份存放位置 要备份路径/或设备文件
注意:要备份的路径这里不能写成/vdb1/
[root@localhost vdb1]# xfsdump -f /opt/dump_vdb11 /mnt/vdb1
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)
-> vdb1
session label entered: "vdb1"
--------------------------------- end dialog ---------------------------------
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 localhost:/mnt/vdb1
xfsdump: dump date: Fri Dec 1 15:09:08 2017
xfsdump: session id: 2dff3d8e-e9a0-4ec0-b8e6-5c67e1ee58de
xfsdump: session label: "vdb1"
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)
-> vdb1
media label entered: "vdb1"
--------------------------------- 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: 5 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /opt/dump_vdb11 OK (success)
xfsdump: Dump Status: SUCCESS
2、指定备份时内容(免交互操作),方便后期做定时备份
[root@localhost vdb1]# xfsdump -f /opt/dump_passwd /dev/vdb1 -L dump_passed -M vdb1
-L : xfsdump 记录每次备份的session标头,这里可以填写针对此文件系统的简易说明
-M :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明
3、指定只备份分区中某个目录
参数:-s 文件路径 只对指定的文件进行备份,-s指定时,路径写的是相对路径(-s 可以是文件或目录)
[root@localhost vdb1]# xfsdump -f /opt/dump_grub2 -s grub2/grub.cfg /boot -L dump_grub2 -M boot-vda1
查看备份
[root@localhost vdb1]# xfsdump -I (字母大写i) #查看备份
file system 0:
fs id: c45cfd73-d6ae-4b1b-b80a-d04dd1553ae0
session 0:
mount point: localhost:/mnt/vdb2
device: localhost:/dev/vdb2
time: Fri Dec 1 11:04:07 2017
session label: "dump_sd"
session id: 9fced461-24c1-4b9a-9a33-ed60f71ddc5d
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: /opt/dump_vdb2
start: ino 67 offset 0
end: ino 70 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 25552
mfile start: ino 67 offset 0
mfile end: i"o 70 offset 0
media id:el: 5af0d876-442f-436f-b874-7298146ffdea
#后面省略
4、查看备份信息与内容
备份成功后,我们就可以在/var/lib/xfsdump/inventory目录下看到生成的档案信息
[root@localhost vdb1]# ls /var/lib/xfsdump/inventory/
45cd13b6-6e1d-4cd5-b882-b243f5a56d2e.StObj c45cfd73-d6ae-4b1b-b80a-d04dd1553ae0.InvIndex fstab
a013e140-ce3c-438d-b3d8-8177ff013e5c.StObj d9491be2-db16-4ba1-80de-21c97085365e.InvIndex
c153988b-a918-4379-a4ea-e941ec0d7ebe.StObj e5456685-aac2-43de-9b76-67f64b04cffb.InvIndex
5、测试:删除之前创建的内容
[root@localhost vdb1]# ls
passwd test
[root@localhost vdb1]# rm -rf ./*
[root@localhost vdb1]# ls
文件系统恢复
语法:xfsrestore -f 指定恢复文件的位置 指定存放恢复后的文件存放路径
[root@localhost ~]# xfsrestore -f /opt/dump_vdb1 /mnt/vdb1
恢复单个文件
[root@localhost ~]# xfsdump -f /opt/dump_grub2_grub.cfg -s grub2/grub.cfg /boot -L grub_cfg -M grub_cfg # 备份文件
[root@localhost ~]# xfsrestore -f /opt/dump_grub2_grub.cfg -s grub2/grub.cfg /var/test #恢复文件
[root@localhost ~]# xfsrestore -f /opt/dump_grub2_grub.cfg -s grub2 /var/test #恢复目录
使用xfsdump时,请注意下面几个限制
1、xfsdump 不支持不有挂载的文件系统备份! 所以只能备份已挂载的
2、xfsdump 必须使用root的权限才能操作(涉及文件系统的关系)
3、xfsdump 只能备份CFS文件txxy
4、xfsdump备份下来的数据(档案或储存媒体)只能让xfsrestore解析
5、xfsdump是通过文件系统的UUID来分辨各个备份档的,因些不能备份两个具有相同的UUID的文件系统
概念
增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需要备份与前一次相比增加或者被修必的文件。
这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量
备份后所产生的增加和修改的文件,以此类推。
优点:没有重复的备份数据,因此备份的数据量不大,备份所需要的时间很短。
缺点:数据恢复相对比较麻烦。它需要上一次全备份和的有增量备份的内容才能够完全恢复成功,并且它们必须沿着从全备份到依次增量备份的时间顺序逐个反推恢复,因此可能会延长恢复时间
准备一个备份目录进行备份
[root@localhost ~]# tree /mnt/vdb1
/mnt/vdb1
├── passwd
└── test
└── a
对上面的内容进行第一次全备
[root@localhost ~]# xfsdump -f /opt/dump_vdb1 /mnt/vdb1 -L vdb1 -M vdb1
增加内容,然后进行增量备份
[root@localhost vdb1]# touch 1.txt
[root@localhost vdb1]# touch 2.txt
[root@localhost vdb1]# tree ./
./
├── 1.txt
├── 2.txt
├── passwd
└── test
└── a
1 directory, 4 files
[root@localhost ~]# xfsdump -l 1 -f /opt/dump_vdb1_back1 /mnt/vdb1 -L vdb1 -M vdb1
-l 做一个等级为1的备份
再次增加内容,然后进行level 2增量备份
[root@localhost vdb1]# touch a.txt b.txt
[root@localhost vdb1]# tree ./
./
├── 1.txt
├── 2.txt
├── a.txt
├── b.txt
├── passwd
└── test
└── a
[root@localhost ~]# xfsdump -l 2 -f /opt/dump_vdb1_back2 /mnt/vdb1 -L vdb1 -M vdb1
删除数据
现在进行恢复,想要恢复全部数据,包括新添加的文件,如何恢复?
步骤:
1、先恢复完全备份
2、恢复最后一次增量备份(如果两次增量备份都是1级的,所以只需要恢复最后一个增量就可以了。如果第一次
是1级备份,第二次是2级备份,那么你在恢复的时候就需要先恢复全备,然后是1级备,最后是2级备)
[root@localhost ~]# xfsrestore -f /opt/dump_vdb1 /mnt/vdb1
[root@localhost vdb1]# tree ./
./
├── passwd
└── test
└── a
1 directory, 2 files
[root@localhost ~]# xfsrestore -f /opt/dump_vdb1_back2 /mnt/vdb1
[root@localhost vdb1]# tree ./
./
├── a.txt
├── b.txt
├── passwd
└── test
└── a
1 directory, 4 files
[root@localhost ~]# xfsrestore -f /opt/dump_vdb1_back1 /mnt/vdb1
[root@localhost vdb1]# tree ./
./
├── 1.txt
├── 2.txt
├── a.txt
├── b.txt
├── passwd
└── test
└── a
1 directory, 6 files
总结
Linux系统目录结构,相对/绝对路径
创建/复制/删除文件,rm -rf / 意外事故
查看文件内容的命令
实战:xfs文件系统的备份和恢复