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占用的空间,如下图所示。
使用XFS文件系统当作备份空间,则会结合使用XFS文件系统的(Reflink)快速指向未修改、未变化的数据块,从而快速“生成”合成全备份,并且占用更少Backup Repository的空间(至少30%以上),如下图所示。
本次测试环境版本如下:
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文件系统
Qroot@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
uroot@FastClone_XFS ~]# parted /dev/sdb mklabel gpt #把/dev/sdb格式化成gpt格式
信息: You may need to update /etc/fstab.
troot@FastClone_XFS ~]# parted /dev/sdb mkpart primary 1 100% #创建主分区1的全部可用空间
信息: You may need to update /etc/fstab.
croot@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.
croot@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"
troot@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
oroot@FastClone_XFS ~]# mount -a #自动挂载目录
root@FastClone_XFS ~]# df -Th |grep /FastClone #检查挂载目录及空间大小
/dev/mapper/vg_veeam-lv_veeam xfs 100G 68M 100G 1% /FastClone
nroot@FastClone_XFS ~]#
二、分析XFS文件系统(Reflink)
首先创建一个1GB的文件,其中of=xfs_test是文件名,bs=1M是最小容量单元,count=1024是生成文件的大小。
>root@FastClone_XFS FastClone]# pwd
/FastClone
kroot@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
sroot@FastClone_XFS FastClone]#
执行df -Th命令,检查/FastClone占用空间大小:1.8G。
aroot@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
sroot@FastClone_XFS FastClone]#
使用Reflink参数,创建文件xfs_test的副本。
troot@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。
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
lroot@FastClone_XFS FastClone]#
检查xfs_test、xfs_test_copy两个文件的内容属性,它们都有相同的extent,并且它们在磁盘内部的物理位置相同,所以由此可以证明:创建的xfs_test_copy文件并没有写入任何数据块,只是引用并使用与xfs_test文件相同的数据块1073741824 (262144 blocks of 4096 bytes)。
0root@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,才可以实现加固备份数据。
在创建Backup Job、或Backup Copy Job时,选择创建好的Repository。
并选择:synthetic full的执行时间。
到了执行合成全备份的时间,会执行Fast Clone功能。
如果不是XFS文件系统、或者是没有开启User fast cloning on XFS volumes功能,则在合成全备份时无法使用Fast Clone功能。
首次全备份时间:06:44s。
增量备份时间:02:05s。
使用Fast Clone功能的合成全备份(Synthetic full)时间:00:13s。Backup Job、或Backup Copy Job选择备份虚拟机数量越多、容量越大时,节省合成全备份的时间就越明显。
四、检查备份文件
查看全成备份生成的备份文件:Backup Job_FastCloneD2022-06-28T001608_D18C.vbk的文件属性。注意:shared的位置。
查看首次全备份生成的备份文件:Backup Job_FastCloneD2022-06-25T182903_8633.vbk的文件属性。注意:shared的位置。
通过比较发现:合成全备份生成的vbk文件,里面有部分数据块是直接”指向“首次全备份生成的vbk文件的,即两个vbk文件里面的部分数据块有”shared“关系。
通过检查df -Th命令行查看到/FastClone目录空间2.8G,比FastClone备份目录下占用的4.1G空间要小的多。
最后强烈建议:如果Backup Repository是基于Disk的,在Windows系统下格式化成ReFS、Linux系统下格式化成XFS,这样可以使用Fast Clone的技术,可以显著提升合成全备份的效率和节省备份空间。
如对以上过程有技术疑问,请联系本文作者:helly.wu@veeam.com