干货理论
XFS提供了xfsdump
(备份) 和 xfsrestore
(恢复) 工具协助备份XFS 文件系统中的数据, xfsdump 按inode顺序备份一个XFS文件系统
在centos7选择xfs格式作为默认文件系统, 而不再使用以前的ext, 任然支持ext4, xfs转为大数据产生, 每个单个文件系统最大可以支持8eb, 单个文件可以支持16tb, 不仅数据量大, 而扩展性高, 还可以通过xfsdump
和xfsrestore
来备份和恢复 , 原始备份数据方法: cp, 在大数据里面无法完成
与传统的Unix文件系统不同, xfs不需要在备份前被卸载, 对使用中的XFS文件系统做备份就可以保证镜像的一致性, XFS的备份和恢复的过程是可以被终止的, 然后继续 (断电续传) , 无需冻结文件系统, xfsdump甚至提供了高性能的多线程备份操作, 它把一次dump差分成多个流数据, 每个流数据都可以被发往不同的文件夹保管.相当于热备份
了解xfsdump的备份级别有两种 默认为 0 (即完全备份)
0 级别代表 完全备份
1 到 9 级别备份 增量备份
完全备份: 每次都把指定的备份目录完整的复制一遍, 不管目录下的文件有没有变化,都进行备份
增量备份: 每次将之前(第一次, 第二次…知道前一次)做过备份后有变化的文件再进行备份, 没有变化的则不动
差异备份: 每次都将第一次完整备份以来没有变化的文件进行备份,也就是说, 之前备份过的, 后续有变化的进行备份, 没有变化不管多久也不进行二次备份
准备环境
添加一块虚拟硬盘(准备一个测试分区)
正常使用一块磁盘过程
添加硬盘 --> 分区 --> 格式化 --> 挂载
一. 关机 init 0 或 poweroff或…
二. 编辑虚拟机设置
一路下一步就可以
三. 重新开机, 对磁盘进行操作
对新添加的磁盘进行格式化
[root@laser ~]# fdisk /dev/sdb // 创建磁盘命令
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x3411a5db 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):p 查看分区信息
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x3411a5db
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n new创建一个新的分区
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 给它1G, 也可以直接回车
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):w 保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
查看分区情况
[root@laser ~]# ls /dev/sdb1
/dev/sdb1
能看到有sdb1则成功添加
挂载使用
先格式化硬盘
[root@laser ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
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@laser ~]# mkdir /sdb1
[root@laser ~]# mount /dev/sdb1 /sdb1/
完成后创建一些文件和文件夹
[root@laser /sdb1]# tree
.
├── a
├── passwd
└── test
└── a.txt
注: yum install -y tree // 没有可以下载
备份开始
备份整个分区
xfsdump -f 备份存放位置 要备份路径
注意: 备份是最后一个目录不能加 /
, 否则抛异常, 且备份时从根开始, 即/
开始
xfsdump: ERROR: /sdb1/ does not identify a file system
开始 备份目标路径 备份文件路径
[root@laser /sdb1]# xfsdump -f /opt/dump_sdb1 /sdb1
输入一个备份标签
please enter label for this dump session (timeout in 300 sec)
-> dump_sdb1 //
输入一个设备标签
please enter label for media in drive 0 (timeout in 300 sec)
-> sdb1
出现大写的success即可
xfsdump: Dump Status: SUCCESS
查看备份目录
[root@laser ~]# ls /opt/
dump_sdb1 rh
是定备份时免交互操作, 方便后期作定时备份
可以直接写 / 进行备份, 这样就可以恢复到原始状态了
目标位置名称 备份文件 文件名
[root@laser /sdb1]# xfsdump -f /opt/dump_p /sdb1 -L dump_pwd -M b
查看
[root@laser /sdb1]# ls /opt/
dump_p dump_pwd dump_sdb1 // dump_pwd存在证明成功
-L: xfsdump 会记录每次备份的session标头, 这里可以填写针对次文件简易说明
-M : xfsdump 可以记录存储媒体的标头, 这里可以填写次媒体的简易说明
跟上面文件标签和分区标签一样
测试
先删除之前创建的内容, 切记, 千万不能少一点 .
重点, 少一点就哭吧 !
[root@laser /sdb1]# rm -rf ./*
[root@laser /sdb1]# ls
指定只备份分区某个目录
参数 -s 文件路径
针对指定的文件进行备份, -s指定时, 路径写的是相对路径(-s可以是文件或目录)
先试手 , 对/boot文件进行分区处理
备份内容, 不能从根开始写
[root@laser /sdb1]# xfsdump -f /opt/dump_grub2 -s grub2 /boot -L dump_grub2 -M boot
查看是否成功
[root@laser /sdb1]# ls /opt/
dump_grub2 dump_p dump_pwd dump_sdb1 rh
有内容, 成功
顺便查看备份文件大小 ll -h /opt/
[root@laser /sdb1]# ll -h /opt/
总用量 7.8M
-rw-r--r--. 1 root root 7.7M 11月 23 21:35 dump_grub2
-rw-r--r--. 1 root root 26K 11月 23 21:21 dump_p
-rw-r--r--. 1 root root 0 11月 23 21:17 dump_pwd
-rw-r--r--. 1 root root 26K 11月 23 21:06 dump_sdb1
查看归档文件
[root@laser /sdb1]# xfsdump -I
归档文件存在这地方
[root@laser /sdb1]# ls /var/lib/xfsdump/inventory/
1110cb86-37fb-46a6-99ae-d79026263257.StObj
69f2ce9b-f74e-4383-a922-3c7fea7015b9.InvIndex fstab
335515d4-9c97-42dd-a23a-0fe09fc7adc0.StObj
a298d6f5-f3d0-4d6a-aed5-cb736b703566.InvIndex
文件系统恢复
语法: xfsrestore -f 指定恢复文件的位置, 指定恢复后的文件存放路径
先查看sdb1是否有文件 没有进行备份, 有则删除
[root@laser /sdb1]# ls
[root@laser /sdb1]#
备份开始 非常简单 恢复文件 恢复位置
[root@laser /sdb1]# xfsrestore -f /opt/dump_sdb1 /sdb1/
查看是否恢复成功
[root@laser /sdb1]# tree /sdb1/
/sdb1/
├── a
├── passwd
└── test
└── a.txt
1 directory, 3 files
恢复单个文件 , 注意的是, 这里恢复要使用备份时的路径, 不能写绝对路径
这里是我的备份和路径, 复制粘贴可能有区别导致无法执行, 应根据自己的备份来适应操作
[root@laser /sdb1]# xfsrestore -f /opt/dump_grub2 -s grub2 /sdb1 / 恢复目录
使用xfsdump时, 请注意下面的几个限制
- xfsdump不支持没有挂载的文件系统设备, 所以只能备份已挂载的
- xfsdump必须使用root的权限才能操作(设计文件系统的关系)
- xfsdump只能备份xfs文件系统, 其他不能
- xfsdump备份下来的数据(档案或存储媒体) 只能让xfsrestore解析
- xfsdump是透过文件系统的 UUID来分辨各个备份文档的, 因此不能备份两个具有相同的UUID文件
增量备份
增量备份时指在一次完全备份或上一次增量备份后, 以后每次的备份只需备份与之前一次相同比增长或者被修改的文件, 这就意味着, 第一次增量备份的对象是进行完全备份后所产生的增加或修改的文件, 第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件, 以此类推
优缺点
优点: 没有重复的备份数据, 因此备份的数据量不大, 备份所需的时间短
缺点:数据恢复相对比较麻烦, 他想要上一次完全备份和所有增量备份 的内容才能够完全恢复成功, 否则只恢复一部分, 并 且必须严格遵循从完全备份到依次增量备份的时间顺序组个反推恢复, 因此可能会延长恢复时间.
例: 增量备份文件系统
先查看文件目录, 对其进行完全备份
[root@laser /sdb1]# tree /sdb1/
/sdb1/
├── passwd
└── test
└── a.txt
1 directory, 2 files
备份整个sdb1文件夹
[root@laser ~]# xfsdump -f /opt/test-full /sdb1 -L test-full -M media
增加内容进行第一次增量备份, 增加完成后进行一次备份
[root@laser ~]# touch /sdb1/1.txt /sdb1/2.txt
成功第一次
[root@laser ~]# xfsdump -l 1 -f /opt/test-back1 /sdb1 -L test-back1 -M meda1
参数解释:
-l: 等级 1
再次增加内容, 然后进行level2 增量备份
加点东西, 添加两个文件
[root@laser ~]# touch /sdb1/test/a.txt /sdb1/test/b.txt
进行备份
[root@laser ~]# xfsdump -l 2 -f /opt/test-back2 /sdb1 -L test-bak2 -M media2
查看备份目录/opt, 都完成了
[root@laser ~]# ls /opt/
test-back1 test-back2 test-full
恢复数据
先删除 sdb1
所有数据
删除sdb1所有内容
[root@laser ~]# rm -rf /sdb1/*
-
先恢复完全备份, 也就是第一次备份的内容
-
恢复最后一次增量备份(因为我们这里用的两次备份都是 1 级别, 只需要恢复一次, 所以只需要恢复最后一个增量备份就可以了)
-
如果你做的第一次备份为1 级别, 第二次备份为2 级别 , 那么在恢复的时候就需要先恢复完全备份, 然后1 级别, 最后二级别备份
完整版恢复
[root@laser ~]# xfsrestore -f /opt/test-full /sdb1/
去tree一下, 看看有没有恢复
[root@laser ~]# tree /sdb1/
/sdb1/
├── a
├── passwd
└── test
└── a.txt
1 directory, 3 files 完成!
增量备份1级别
[root@laser ~]# xfsrestore -f /opt/test-back1 /sdb1/
tree查看
[root@laser ~]# tree /sdb1/
/sdb1/
├── a
├── passwd
└── test
└── a.txt
增量备份2级别
[root@laser ~]# xfsrestore -f /opt/test-back2 /sdb1/
tree查看目录结构
[root@laser ~]# tree /sdb1/
/sdb1/
├── a
├── passwd
└── test
├── a.txt
└── b.txt
1 directory, 4 files完成了!
重点: 一定要按照顺序来恢复, 否则目录会乱, 有一些文件不能完全恢复
完全备份 —> 备份级别1 ----> 备份级别2 —> …以此类推