实战:xfs文件系统的备份和恢复
XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据。xfsdump 按inode顺序备份一个XFS文件系统。与传统的UNIX文件系统不同,XFS不需要在dump前被卸载;对使用中的XFS文件系统做dump就可以保证镜像的一致性。这与XFS对快照的实现不同,XFS的dump和restore的过程是可以被中断然后继续的,无须冻结文件系统。xfsdump 甚至提供了高性能的多线程备份操作——它把一次dump拆分成多个数据流,每个数据流可以被发往不同的目的地。
准备一个测试分区
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xd080085d 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):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
磁盘标识符:0xd080085d
设备 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@localhost ~]# partprobe /dev/sdb
格式化分区,并进行挂载
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
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@localhost ~]# mkdir /sdb1 ##创建挂载点
[root@localhost ~]# mount /dev/sdb1 /sdb1/ ##挂载
准备备份测试文件
[root@localhost ~]# cp /etc/shadow /sdb1/
[root@localhost ~]# mkdir /sdb1/test
[root@localhost ~]# ls /sdb1/
shadow test
1)对整个分区进行备份
[root@localhost yum.repos.d]# yum -y install xfsdump ##安装软件包
[root@localhost ~]# xfsdump -f /opt/dump_sdb1 /sdb1
注意:备份的设备这里不能写成/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 localhost.cn:/sdb1
xfsdump: dump date: Thu Jan 28 22:01:25 2016
xfsdump: session id: 29356f1f-8957-4fe0-ad70-2ae087f27abe
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: 25536 bytes
xfsdump: /var/lib/xfsdump/inventory created
============================= media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
-> media0
#指定设备标签
media label entered: "media0"
--------------------------------- 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 24232 bytes
xfsdump: dump size (non-dir files) : 2592 bytes
xfsdump: dump complete: 48 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /opt/dump_sdb1 OK (success)
xfsdump: Dump Status: SUCCESS
非交互式进行备份
[root@localhost ~]# xfsdump -f /opt/dump_sdb1 /sdb1 -L dump_sdb1 -M media0
针对指定文件或目录进行备份
[root@localhost ~]# xfsdump -f /opt/dump_sdb1_passwd -s passwd /sdb1 -L dump_sdb1_passwd -M media1
[root@localhost ~]# xfsdump -f /opt/dump_sdb1_test -s test /sdb1 -L dump_sdb1_test -M media1
注意:passwd /sdb1中间有空格,前后都不能加“/”
查看备份文件是否生成
[root@localhost yum.repos.d]# ls /opt/
dump_sdb1 dump_sdb1_passwd dump_sdb1_test
克隆目录到另外一个目录
[root@localhost ~]# xfsdump - /sdb1 | xfsrestore - /data/
克隆指定的目录
[root@localhost ~]# xfsdump - -s test /sdb1 | xfsrestore - /data/
查看备份信息
[root@localhost ~]# xfsdump -I
file system 0:
fs id: cece719c-2e76-4970-9321-1bd5528c14d5
session 0:
mount point: localhost.cn:/sdb1
device: localhost.cn:/dev/sdb1
time: Thu Jan 28 22:01:25 2016
session label: "dump_sdb1"
session id: 29356f1f-8957-4fe0-ad70-2ae087f27abe
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: /opt/dump_sdb1
文件系统恢复
首先,模拟数据被删除
[root@localhost ~]# rm -rf /sdb1/*
恢复
[root@localhost ~]# xfsrestore -f /opt/dump_sdb1 /sdb1/
只恢复单个的目录或文件
[root@localhost ~]# xfsrestore -f /opt/dump_sdb1_passwd -s test /sdb1/
恢复之前查看备份文件的内容
[root@localhost opt]# xfsrestore -f /opt/dump_sdb1 -t