Skip to main content

Better Together with XFS File System and Veeam Fast Clone


Forum|alt.badge.img

 

Fast Clone是Veeam Backup & Replication快速克隆技术,可帮助创建快速备份文件副本,生成一份新的合成全备份文件。使用Fast Clone的目的是提高合成全备份创建和转换的速度,减少了磁盘空间的同时并减少了存储设备的负载。

借助Fast Clone这项技术,Veeam Backup & Replication可以引用卷上的现有数据块,而不是在文件之间复制数据块,即仅是在修改文件时才复制数据块。

Veeam Backup & Replication支持对以下类型的备份存储库进行Fast Clone:

  • Linux server

  • Microsoft Windows server

  • SMB share

关于Fast Clone的技术介绍,请参考以下网址:

https://helpcenter.veeam.com/docs/backup/vsphere/backup_repository_block_cloning.html?ver=110

所以当使用Veeam Backup & Replication的Hardened Repository对备份数据进行加固时,则可以使用Fast Clone技术结合Linux系统上的XFS文件系统(Reflink),实现加快合成全备份的时间和减少备份空间的消耗。

 

以下介绍XFS文件系统(Reflink)的工作原理。

使用Ext4、或NTFS文件系统当作备份空间,在首次执行完全备份后,将定期执行增量备份和合成合备份(Synthetic Full),那么合成全备份时所需的空间、以及Backup Repository占用的空间,如下图所示。

6Q9jQ3.jpg

使用XFS文件系统当作备份空间,则会结合使用XFS文件系统的(Reflink)快速指向未修改、未变化的数据块,从而快速“生成”合成全备份,并且占用更少Backup Repository的空间(至少30%以上),如下图所示。

zVNmvu.jpg

​​

本次测试环境版本如下:

VBR v11.0.1.1261 P20220302
Linux OS CeotOS 8.3.2011 4.18.0-240.el8.x86_64
XFS 5.0.0-4.el8  
     

 

一、创建XFS文件系统

[root@FastClone_XFS ~]# lsblk	#检查Linux系统底层是否识别到新增磁盘,新增磁盘为/dev/sdb
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   16G  0 disk
├─sda1        8:1    0  600M  0 part /boot/efi
├─sda2        8:2    0    1G  0 part /boot
└─sda3        8:3    0 14.4G  0 part
  ├─cl-root 253:0    0 12.8G  0 lvm  /
  └─cl-swap 253:1    0  1.6G  0 lvm  [SWAP]
sdb           8:16   0  100G  0 disk
sdc           8:32   0    2G  0 disk
sr0          11:0    1 1024M  0 rom
[root@FastClone_XFS ~]# parted /dev/sdb mklabel gpt	#把/dev/sdb格式化成gpt格式
信息: You may need to update /etc/fstab.

[root@FastClone_XFS ~]# parted /dev/sdb mkpart primary 1 100%	#创建主分区1的全部可用空间
信息: You may need to update /etc/fstab.

[root@FastClone_XFS ~]# pvcreate /dev/sdb1	#创建pv物理卷
  Physical volume "/dev/sdb1" successfully created.
[root@FastClone_XFS ~]# vgcreate vg_veeam /dev/sdb1		#创建名称为vg_veeam的卷组
  Volume group "vg_veeam" successfully created
[root@FastClone_XFS ~]# lvcreate -l +100%free -n lv_veeam /dev/vg_veeam	#创建名称为lg_veeam的逻辑卷,并分配全部可用空间
  Logical volume "lv_veeam" created.
[root@FastClone_XFS ~]# mkfs.xfs -b size=4096 -m reflink=1,crc=1 /dev/mapper/vg_veeam-lv_veeam	#格式化成xfs文件系统
meta-data=/dev/mapper/vg_veeam-lv_veeam isize=512    agcount=4, agsize=327424 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1309696, 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
Discarding blocks...Done.
[root@FastClone_XFS ~]# mkdir /FastClone	#创建挂载目录
[root@FastClone_XFS ~]# blkid |grep /dev/mapper/vg_veeam-lv_veeam	#获取UUID
/dev/mapper/vg_veeam-lv_veeam: UUID="560bda46-a46b-4994-97ea-e824602397aa" BLOCK_SIZE="512" TYPE="xfs"
[root@FastClone_XFS ~]# echo 'UUID=XXXX /FastClone xfs defaults 0 0' | sudo tee -a /etc/fstab	#把上一行的UUID替换此行的XXXX,实现开机自动挂载
UUID=560bda46-a46b-4994-97ea-e824602397aa /FastClone xfs defaults 0 0
[root@FastClone_XFS ~]# mount -a		#自动挂载目录
[root@FastClone_XFS ~]# df -Th |grep /FastClone	#检查挂载目录及空间大小
/dev/mapper/vg_veeam-lv_veeam xfs       100G   68M  100G    1% /FastClone
[root@FastClone_XFS ~]#

 

二、分析XFS文件系统(Reflink)

首先创建一个1GB的文件,其中of=xfs_test是文件名,bs=1M是最小容量单元,count=1024是生成文件的大小。

[root@FastClone_XFS FastClone]# pwd
/FastClone
[root@FastClone_XFS FastClone]# dd if=/dev/urandom of=xfs_test bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.99281 s, 134 MB/s
[root@FastClone_XFS FastClone]#

执行df -Th命令,检查/FastClone占用空间大小:1.8G。

[root@FastClone_XFS FastClone]# df -Th
Filesystem                    Type      Size  Used Avail Use% Mounted on
devtmpfs                      devtmpfs  465M     0  465M   0% /dev
tmpfs                         tmpfs     485M     0  485M   0% /dev/shm
tmpfs                         tmpfs     485M  6.7M  478M   2% /run
tmpfs                         tmpfs     485M     0  485M   0% /sys/fs/cgroup
/dev/mapper/cl-root           xfs       7.5G  1.9G  5.6G  26% /
/dev/sda2                     xfs      1014M  169M  846M  17% /boot
/dev/sda1                     vfat      599M  6.9M  592M   2% /boot/efi
/dev/mapper/vg_veeam-lv_veeam xfs       100G  1.8G   99G   2% /FastClone
tmpfs                         tmpfs      97M     0   97M   0% /run/user/0
[root@FastClone_XFS FastClone]#

使用Reflink参数,创建文件xfs_test的副本。

[root@FastClone_XFS FastClone]# cp -v --reflink=always xfs_test xfs_test_copy
'xfs_test' -> 'xfs_test_copy'
[root@FastClone_XFS FastClone]#

执行ls -hsl命令,检查文件大小:xfs_test、xfs_test_copy分别是1GB。

[root@FastClone_XFS FastClone]# ls -hsl
total 2.0G
1.0G -rw-r--r-- 1 root root 1.0G Jun 25 13:23 xfs_test
1.0G -rw-r--r-- 1 root root 1.0G Jun 25 13:31 xfs_test_copy
[root@FastClone_XFS FastClone]#

执行df -Th命令,再次检查/FastClone占用空间大小:还是1.8G,即生成的xfs_test_copy文件后,并未消耗磁盘占用空间。

[root@FastClone_XFS FastClone]# df -Th
Filesystem                    Type      Size  Used Avail Use% Mounted on
devtmpfs                      devtmpfs  465M     0  465M   0% /dev
tmpfs                         tmpfs     485M     0  485M   0% /dev/shm
tmpfs                         tmpfs     485M  6.7M  478M   2% /run
tmpfs                         tmpfs     485M     0  485M   0% /sys/fs/cgroup
/dev/mapper/cl-root           xfs       7.5G  1.9G  5.6G  26% /
/dev/sda2                     xfs      1014M  169M  846M  17% /boot
/dev/sda1                     vfat      599M  6.9M  592M   2% /boot/efi
/dev/mapper/vg_veeam-lv_veeam xfs       100G  1.8G   99G   2% /FastClone
tmpfs                         tmpfs      97M     0   97M   0% /run/user/0
[root@FastClone_XFS FastClone]#
​检查xfs_test、xfs_test_copy两个文件的内容属性,它们都有相同的extent,并且它们在磁盘内部的物理位置相同,所以由此可以证明:创建的xfs_test_copy文件并没有写入任何数据块,只是引用并使用与xfs_test文件相同的数据块1073741824 (262144 blocks of 4096 bytes)
[root@FastClone_XFS FastClone]# filefrag -v xfs_test xfs_test_copy
Filesystem type is: 58465342
File size of xfs_test is 1073741824 (262144 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..  262143:         24..    262167: 262144:             last,shared,eof
xfs_test: 1 extent found
File size of xfs_test_copy is 1073741824 (262144 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..  262143:         24..    262167: 262144:             last,shared,eof
xfs_test_copy: 1 extent found
[root@FastClone_XFS FastClone]#

 

三、创建Repository并启用Fast Clone

本次不再介绍创建Repository的使用方法,它与创建Linux Repository的方法一致。在此只介绍:User fast cloning on XFS volumes与synthetic full(合成合备份)。

在创建Repository时,勾选:User fast cloning on XFS volumes。如果是Hardened Repository,则需要勾选Make recent backups immutable for X days,才可以实现加固备份数据。

IRilyU.jpg

在创建Backup Job、或Backup Copy Job时,选择创建好的Repository。

9EHCcO.jpg

并选择:synthetic full的执行时间。

JxptIV.jpg

到了执行合成全备份的时间,会执行Fast Clone功能。

EQkxSF.jpg

如果不是XFS文件系统、或者是没有开启User fast cloning on XFS volumes功能,则在合成全备份时无法使用Fast Clone功能。

M8oK6r.jpg

​​

首次全备份时间:06:44s。

UeKMxm.jpg

增量备份时间:02:05s。

If3gQ8.jpg

使用Fast Clone功能的合成全备份(Synthetic full)时间:00:13s。Backup Job、或Backup Copy Job选择备份虚拟机数量越多、容量越大时,节省合成全备份的时间就越明显。

037Bux.jpg

 

四、检查备份文件

查看全成备份生成的备份文件:Backup Job_FastCloneD2022-06-28T001608_D18C.vbk的文件属性。注意:shared的位置。

1XYxxE.jpg

查看首次全备份生成的备份文件:Backup Job_FastCloneD2022-06-25T182903_8633.vbk的文件属性。注意:shared的位置。

Uqo8f9.jpg

通过比较发现:合成全备份生成的vbk文件,里面有部分数据块是直接”指向“首次全备份生成的vbk文件的,即两个vbk文件里面的部分数据块有”shared“关系。

km4cIq.jpg

通过检查df -Th命令行查看到/FastClone目录空间2.8G,比FastClone备份目录下占用的4.1G空间要小的多。

ev3ojd.jpg

 

最后强烈建议:如果Backup Repository是基于Disk的,在Windows系统下格式化成ReFS、Linux系统下格式化成XFS,这样可以使用Fast Clone的技术,可以显著提升合成全备份的效率和节省备份空间。

 

 

 

如对以上过程有技术疑问,请联系本文作者📧:helly.wu@veeam.com

1 comment

  • New Here
  • 2 comments
  • January 19, 2023

厉害,文档清晰明了!感谢!~


Comment