RHCE8学习过程 特别篇(一)xfs文件系统的备份和恢复

一、XFS文件系统

1.1、XFS简介

XFS 提供了xfsdumpxfsrestore工具协助备份XFS文件系统中的数据。xfsdump按inode顺序备份一个XFS文件系统。
centos7开始选择xfs格式作为默认文件系统,而且不再使用以前的ext,仍然支持ext4,xfs专为大数据产生,每个单个文件系统最大可以支持8eb,单个文件可以支持16tb,不仅数据量大,而且扩展性高。还可以通过xfsdump,xfsrestore来备份和恢复。
与传统的UNIX文件系统不同,XFS不需要在备份前被卸载;对使用中的XFS文件系统做备份就可以保证镜像的一致性。XFS的备份和恢复的过程是可以被中断然后继续的,无需冻结文件系统。xfsdump甚至提供了高性能的多线程备份操作——它把一次dump拆分成多个数据流,每个数据流可以被发往不同的 目的地

首先了解一下xfsdump的备份级别有以下两种,默认为 0(即完全备份)
0级别代表: 完全备份
1到9级别代表: 增量备份

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

1.2、环境准备

实验环境:
添加磁盘大小:20G-分区-格式化-挂载
在这里插入图片描述
选择硬盘,下一步。
在这里插入图片描述
类型选择
在这里插入图片描述
默认即可
在这里插入图片描述
在这里插入图片描述
位置和名称默认即可
在这里插入图片描述
添加第二块硬盘后效果
在这里插入图片描述

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

[root@Hengji ~]# fdisk /dev/sdb

欢迎使用 fdisk (util-linux 2.32.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x7752f55b 的新 DOS 磁盘标签。

命令(输入 m 获取帮助):n                                                      n   #创建一个新分区
分区类型
   p   主分区 (0个主分区,0个扩展分区,4空闲)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):p                                                             p   #创建一个主分区
分区号 (1-4, 默认  1): 
第一个扇区 (2048-41943039, 默认 2048): 
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): +1G       #指定分区大小

创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。

命令(输入 m 获取帮助):p                                                      p  打印分区表
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7752f55b

设备       启动  起点    末尾    扇区 大小 Id 类型
/dev/sdb1        2048 2099199 2097152   1G 83 Linux

命令(输入 m 获取帮助):w                                         w  #保存
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。

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

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

[root@Hengji ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@Hengji ~]# mkdir /test                #创建挂载点 
[root@Hengji ~]# mount /dev/sdb1 /test      #挂载准备备份测试文件
[root@Hengji ~]# cd /test/
[root@Hengji test]# cp /etc/passwd ./
[root@Hengji test]# mkdir ./hengji
[root@Hengji test]# touch ./hengji/a
[root@Hengji test]# tree /test/
/test/
├── hengji
│   └── a
└── passwd

1 directory, 2 files

1.3、备份

1.3.1 备份整个分区

这个功能就像是虚拟机的快照,服务器被黑后,进行快速恢复
xfsdump -f 备份完后,数据存放的位置要备份路径或设备文件
注意:备份的路径这里不能写成/test/。 可以是/dev/sdb1 或/test 即目录后不能有/

[root@Hengji test]# xfsdump -f /opt/dump_sdb1 /dev/sdb1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.8 (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 Hengji:/test
xfsdump: dump date: Tue Jul 28 13:41:05 2020
xfsdump: session id: 1e57723d-6254-4db5-bf68-dff36b9b90d4
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 26072 bytes
xfsdump: dump size (non-dir files) : 3104 bytes
xfsdump: dump complete: 37 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/dump_sdb1 OK (success)
xfsdump: Dump Status: SUCCESS

扩展: 备份前先查看分区的文件系统类型。

[root@Hengji ~]# df -T
文件系统       类型        1K-块    已用     可用 已用% 挂载点
devtmpfs       devtmpfs   976096       0   976096    0% /dev
tmpfs          tmpfs     1003548       0  1003548    0% /dev/shm
tmpfs          tmpfs     1003548    9924   993624    1% /run
tmpfs          tmpfs     1003548       0  1003548    0% /sys/fs/cgroup
/dev/sda2      xfs      52403200 5316088 47087112   11% /
/dev/sda1      ext4       999320  235036   695472   26% /boot
(发现 boot默认是ext4文件系统类型,因此 boot分区不能执行xfs备份) 
tmpfs          tmpfs      200708    1180   199528    1% /run/user/42
tmpfs          tmpfs      200708    4648   196060    3% /run/user/0
/dev/sr0       iso9660   8037456 8037456        0  100% /run/media/root/CentOS-8-2-2004-x86_64-dvd
/dev/sdb1      xfs       1038336   40296   998040    4% /test

1.3.2 指定备份时免交互操作,方便后期做定时备份

[root@Hengji ~]#  xfsdump -f /opt/dump_sdb1_v2 /dev/sdb1 -L dump_sdb1_v2 -M sdb1_is_bigdata
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.8 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of Hengji:/test
xfsdump: dump date: Tue Jul 28 16:44:40 2020
xfsdump: session id: 3090ba36-fef4-470f-8443-f7371230dfe6
xfsdump: session label: "dump_sdb1_v2"
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 26072 bytes
xfsdump: dump size (non-dir files) : 3104 bytes
xfsdump: dump complete: 7 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/dump_sdb1_v2 OK (success)
xfsdump: Dump Status: SUCCESS

-L :xfsdump记录每次备份的 session 会话的标头,这里写对此次备份的说明。如: dump_sdb1_v2 ,可以随意写。
-M :-M 储存设备的标签,这里写对 sdb1用途的简易描述。如: sdb1_is_bigdata ,可以随意写。

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

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

[root@Hengji ~]# xfsdump -f /opt/hengji_dump1 -s hengji /dev/sdb1 -L dump_hengji -M  sdb1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.8 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of Hengji:/test
xfsdump: dump date: Tue Jul 28 17:05:30 2020
xfsdump: session id: 31b7aa29-cce0-4a73-a619-9933228d1e13
xfsdump: session label: "dump_hengji"
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: 21440 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 22344 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 6 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/hengji_dump1 OK (success)
xfsdump: Dump Status: SUCCESS

1.3.4 查看备份信息与内容

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

[root@Hengji ~]# xfsdump  -I
file system 0:
	fs id:		5be62c49-1597-4184-88f7-674d966c9a7e
	session 0:
		mount point:	Hengji:/test
		device:		Hengji:/dev/sdb1
		time:		Tue Jul 28 13:41:05 2020
		session label:	"dump_sdb1"
		session id:	1e57723d-6254-4db5-bf68-dff36b9b90d4
		level:		0
		resumed:	NO
		subtree:	NO
		streams:	1
		stream 0:
			pathname:	/opt/dump_sdb1
			start:		ino 131 offset 0
			end:		ino 134 offset 0
			interrupted:	NO
			media files:	1
			media file 0:
				mfile index:	0
				mfile type:	data
				mfile size:	26072
				mfile start:	ino 131 offset 0
				mfile end:	ino 134 offset 0
				media label:	"sdb1"
				media id:	68af1340-a564-4d81-adc2-b32f4e9ef658
	session 1:
		mount point:	Hengji:/test
		device:		Hengji:/dev/sdb1
		time:		Tue Jul 28 16:44:40 2020
		session label:	"dump_sdb1_v2"
		session id:	3090ba36-fef4-470f-8443-f7371230dfe6
		level:		0
		resumed:	NO
		subtree:	NO
		streams:	1
		stream 0:
			pathname:	/opt/dump_sdb1_v2
			start:		ino 131 offset 0
			end:		ino 134 offset 0
			interrupted:	NO
			media files:	1
			media file 0:
				mfile index:	0
				mfile type:	data
				mfile size:	26072
				mfile start:	ino 131 offset 0
				mfile end:	ino 134 offset 0
				media label:	"sdb1_is_bigdata"
				media id:	6e2aa1d6-db7e-4fbd-beb3-0a107ded5792
	session 2:
		mount point:	Hengji:/test
		device:		Hengji:/dev/sdb1
		time:		Tue Jul 28 17:05:30 2020
		session label:	"dump_hengji"
		session id:	31b7aa29-cce0-4a73-a619-9933228d1e13
		level:		0
		resumed:	NO
		subtree:	YES
		streams:	1
		stream 0:
			pathname:	/opt/hengji_dump1
			start:		ino 133 offset 0
			end:		ino 134 offset 0
			interrupted:	NO
			media files:	1
			media file 0:
				mfile index:	0
				mfile type:	data
				mfile size:	22344
				mfile start:	ino 133 offset 0
				mfile end:	ino 134 offset 0
				media label:	"sdb1"
				media id:	4e101f8b-3ea9-4106-b3c6-224b3b3a4ae8
xfsdump: Dump Status: SUCCESS

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

[root@Hengji opt]# cd /test/
[root@Hengji test]# ls
hengji  passwd
[root@Hengji test]# pwd
/test
[root@Hengji test]# rm -rf ./*

1.4、文件系统恢复

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

[root@Hengji opt]# xfsrestore -f /opt/dump_sdb1 /test/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.8 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: Hengji
xfsrestore: mount point: /test
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Tue Jul 28 13:41:05 2020
xfsrestore: level: 0
xfsrestore: session label: "dump_sdb1"
xfsrestore: media label: "sdb1"
xfsrestore: file system id: 5be62c49-1597-4184-88f7-674d966c9a7e
xfsrestore: session id: 1e57723d-6254-4db5-bf68-dff36b9b90d4
xfsrestore: media id: 68af1340-a564-4d81-adc2-b32f4e9ef658
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 2 directories and 3 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /opt/dump_sdb1 OK (success)
xfsrestore: Restore Status: SUCCESS


#查看恢复情况


[root@Hengji ~]# ls /test/
hengji  passwd

恢复单个文件如下: 

[root@Hengji ~]# mkdir /var/test/

#恢复目录
[root@Hengji ~]# xfsrestore -f /opt/hengji_dump1 -s hengji  /var/test/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.8 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: Hengji
xfsrestore: mount point: /test
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Tue Jul 28 17:05:30 2020
xfsrestore: level: 0
xfsrestore: session label: "dump_hengji"
xfsrestore: media label: "sdb1"
xfsrestore: file system id: 5be62c49-1597-4184-88f7-674d966c9a7e
xfsrestore: session id: 31b7aa29-cce0-4a73-a619-9933228d1e13
xfsrestore: media id: 4e101f8b-3ea9-4106-b3c6-224b3b3a4ae8
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 2 directories and 3 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /opt/hengji_dump1 OK (success)
xfsrestore: Restore Status: SUCCESS

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

1.5、增量备份

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

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

实战: 增量备份文件系统
准备一个备份目录进行备份

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

1 directory, 4 files 

[root@Hengji test]# xfsdump -l 1 -f /opt/test-back1 /test -L test-bak1 -M sdb1 
-l <level>  做一个等级为1的备份
再次增加内容,然后进行 level 2级别的增量备
[root@Hengji test]# touch /test/hengji/a.txt /test/hengji/b.txt
[root@Hengji test]# tree /test/
/test/
├── 1.txt
├── 2.txt
├── hengji
│   ├── a
│   ├── a.txt
│   └── b.txt 
└── passwd 

1 directory, 6 files 

[root@Hengji test]# xfsdump -l 2 -f /opt/test-back2 /test -L test-bak2 -M sdb1 
[root@Hengji ~]# rm -rf /test/*    #删除所有数据

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

注:xfs增量备份恢复时。要想把数据完全恢复,必项按顺序恢复。
不按顺序恢复是可以恢复一部分数据,但是不完整,比如,当每次备份前,程序都对a.txt文件做了改动,后期先进行 level 2级别的恢复,再进行 level 1级别的恢复,那么 a.txt的内容最终是 level 1 备份时内容,就是丢失了 level 1备份后,被修改的内容,这样的数据是不完整的。

[root@Hengji test]# xfsrestore -f /opt/test-full /test/
xfsrestore: using file dump (drive_simple) strategy
...
xfsrestore: Restore Status: SUCCESS
[root@Hengji test]# xfsrestore -f /opt/test-back1 /test/     #先恢复 back1,查看 
xfsrestore: using file dump (drive_simple) strategy
...
xfsrestore: Restore Status: SUCCESS
[root@Hengji test]# tree /test/      #查看恢复的文件 
/test/
├── 1.txt
├── 2.txt
├── hengji
│   └── a
└── passwd

1 directory, 4 files
[root@Hengji test]# xfsrestore -f /opt/test-back2 /test/     #恢复 back2,查看 
xfsrestore: using file dump (drive_simple) strategy
...
xfsrestore: Restore Status: SUCCESS
[root@Hengji test]# tree /test/      #查看恢复的文件 
/test/
├── 1.txt
├── 2.txt
├── hengji
│   ├── a
│   ├── a.txt
│   └── b.txt 
└── passwd 

1 directory, 6 files

到此,数据恢复成功了。

©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页