吴永芳,王晓瑞,张学灵,司佳,陈刚
(国家海洋信息中心,天津 300171)
随着科学技术的进步,人们获取海洋数据的手段越来越多,已经可以通过陆地、海面、海底、水下、航空航天等多种监控和监测设备获取到大量不同时间段、不同尺度、不同地区的数据,其中非结构化数据已占到总数据量的60%~70%[1]。按照数据获取到发布的时间长短,海洋数据可以分为海洋实时观测数据和海洋延时观测数据[2]。海洋实时观测数据的获取方式主要包括浮标、雷达、志愿船和全球导航卫星系统(Global Navigation Satellite System,GNSS)等。接收服务器接收到海量的观测数据后,需要进行质控和备份[3]。
数据备份是指为防止操作失误等人为因素或系统故障等自然因素导致数据丢失,而将数据通过一定的方法复制到其他存储介质进行保存的过程[4],目的是在需要时能迅速、准确地找到目标数据进行恢复[5]。
海洋实时观测数据的获取大多是经过艰苦的海上作业,借助昂贵的数据采集和分析设备获取得来的,海洋项目的完成需要耗费大量的人力、物力和财力,海洋数据获取的成本非常高,许多数据一旦丢失难以重新采集。与陆地数据采集相比,海洋调查具有高风险、高投入的特点。因此需要重视海洋数据的安全存储,其中就涉及对接收服务器中的海洋数据进行备份[6]。
目前Windows 服务器中广泛使用的文件系统类型为NTFS(New Technology File System)。NTFS相对FAT 文件系统更加复杂,但也具有非常明显的优势:安全性更高、不易产生碎片并能够获取到更大的存储[7]。NTFS 文件系统中采用的引导记录、主文件表MFT 的数据格式以及B+树数据结构,可以为操作系统和数据库提供非常详细的索引,这为文件查找带来了很大的便利,但在同一个分区具有很多小文件时,系统空间分配、读写磁盘时会频繁地访问MFT,因此MFT 对NTFS 文件系统的性能有着至关重要的影响。海量小文件则意味着将有大量索引查询、元数据读取、数据读取的请求操作[8],因此查找的速度受到了很大的限制[9]。
海洋实时观测数据中绝大部分都是KB级别的小文件[10],如果利用如基于小文件合并和分层索引的传统备份方式[11],在备份前仍然需要先对NTFS 文件系统磁盘中的大量小文件进行扫描,以获取元数据信息,扫描操作需要消耗大量时间。例如在对拥有超过2 254万个小文件的磁盘进行备份时,扫描时间接近3 h,而备份时由于受到元数据管理、缓存机制以及数据布局等因素的限制[8],备份时间超过63 h。因此在采用传统备份方式对海洋实时观测数据进行备份时,不但备份性能非常低,而且长时间备份也影响了接收服务器本身的CPU、内存以及磁盘的性能,使得系统的整体读写性能受到严重影响。
因此,本文尝试基于卷影拷贝服务(Volume Shadow Copy Service,VSS)技术对实时观测数据进行备份,以期提高对海洋实时观测数据的备份性能,降低对观测数据的传输和质控的影响。
卷影拷贝服务(VSS)是Microsoft Corporation在服务器操作平台上提供的一种服务,是Windows下的指针型快照技术,具体来说它通过在卷管理模块上加入快照功能,创建时间点映像,即卷影副本(只读副本),从而实现数据的快速备份和恢复,同时不会影响到系统性能。基于这一点,卷影拷贝服务非常适合用于海量数据的备份[12]。
基于卷影拷贝服务的备份方式,是基于快照的块级数据备份方式,即把快照技术和备份技术相结合,可以保证数据备份时的一致性[13],与传统备份方式相比,可以避免因备份数据量较大造成备份耗时太长,无法为用户提供服务的问题[14]。因此块级备份是目前备份性能最高的备份方式之一[15]。
一个完整的VSS 解决方案由以下四个基本部分组成:
(1)VSS 请求程序:请求创建卷影副本的应用程序,本文中指的是数据备份系统。
(2)VSS 服务:可确保其他组件相互通信并协同工作,是Windows操作系统的一部分。
(3)VSS 写入程序:保证备份数据一致性的组件。在创建卷影副本的过程中,如果有如SQL Server或者Windows系统中的注册表等应用程序继续写入数据会造成卷影副本中数据的不一致,从而影响该时间点卷影副本的完整性。
(4)VSS 提供程序:创建给定时间点卷影副本的组件。程序基于存储阵列(硬件模式)或操作系统(软件模式),本文采用的是后者。
卷影副本的创建包括以下两种方法:克隆(Clone)和写入时复制(Copy on Write)。克隆,是在给定时间点对源卷进行完整复制,在此过程中源卷和镜像卷的数据始终保持同步,此镜像卷为只读副本。而写入时复制,不复制源卷,只拷贝数据所在位置的指针,以生成一个快照位图,当有写操作时,需要先把源地址的数据拷贝到一个新位置,再对源地址进行写操作。当需要引用原始数据时,需要将指针映射到新位置(图1)。因此写入时复制是创建卷影副本的快速方法[14]。
图1 卷影拷贝服务的快照示意图
卷影拷贝服务与请求程序、写入程序和提供程序进行协调以创建卷影副本的流程图(图2)。
图2 使用卷影拷贝服务进行备份的流程图
具体流程说明如下:
(1)备份系统对卷影拷贝服务发出请求,卷影拷贝服务会通过vssadmin list writers 列举出该时间点所有的写入程序,并收集这些写入程序的元数据信息;
(2)每个写入程序都会通过XML(Extensible Markup Language)文件描述其组件,并把信息返回给卷影拷贝服务;
XML格式如下:
(3)卷影拷贝服务通知写入程序准备数据以进行卷影拷贝,每个写入程序都会根据需要准备数据,包括完成所有未结束的事务、滚动事务日志和刷新缓存等。随后写入程序会将写入的IO 请求暂时冻结几秒钟(可以进行读取IO 请求),刷新文件系统缓冲区并冻结文件系统,以确保卷影副本中数据的一致性。
(4)卷影拷贝服务通知操作系统创建卷影副本。首先通过vssadmin 启用卷影副本,例如“vssadmin add shadowstorage/for=E/on=/F”表示对E 盘启用卷影副本,F 盘作为卷影副本的保存卷。然后通过“vssadmin create shadow/for=/E”对E 盘创建卷影副本,创建周期很短,在此期间文件系统的所有写入IO请求都将保持冻结状态。
(5)卷影拷贝服务通知写入程序解除对IO 请求的冻结。
(6)成功创建卷影副本后,VSS 将卷影副本通过ntdsutil snapshot"mount GUID"挂载到服务器中,并把挂载的位置信息返回给备份系统,备份系统把卷影副本复制到备份存储中。
(7)卷影拷贝服务通过vssadmin delete shadows删除快照,并通过ntdsutil snapshot“delete GUID”卸载挂载信息。
可以看出,基于卷影拷贝服务的备份方式,可以创建高可靠的即时性(Point in time)镜像,不会影响到服务器的整体性能,可以实现数据的快速备份[11]。
本文在海洋数据备份平台中添加了基于卷影拷贝服务进行备份的模块,备份系统作为请求程序发起创建卷影副本的请求,创建成功后把该快照拷贝到备份存储中,实现了基于卷影拷贝服务对Windows操作系统中海洋实时数据的快速备份。
本文对两个海洋实时观测数据服务器A 和B中的数据集做了实验,并对基于文件复制的传统备份方式和基于VSS的备份方式进行了对比分析。服务器A和B中数据集的属性如表1所示。
表1 服务器A和服务器B的数据集属性
可以计算得出,服务器A 和B 的数据集中文件平均大小分别为5.17 KB 和2.06 KB。因为两个服务器中的文件数量比较多,尤其是服务器B 中数据量更大,单个文件更小。如果采用传统方式,对服务器A 中的文件集备份的时间长达59 h。对服务器B中的文件集备份93 h后,进度仅为25%。
更换为基于VSS 的备份方式后,虽然因为网络不稳定或服务器业务繁忙等原因,导致备份的时长不是非常稳定,但对服务器A 和B 中的文件集分别备份了10 次,平均时间分别为5.28 h 和10.81 h,远远低于传统备份所需要的时间(图3-图5)。
图3 服务器A的备份记录
图4 服务器B的备份记录
图5 两种方式对服务器A和B的备份时间对比
为了进一步验证基于VSS 的备份方式对海量小文件的备份性能,本文又选择了两个服务器分别对两个数据集进行备份,并把该数据集分别放在磁盘容量不同的磁盘中进行对比。服务器C、D中数据集的属性以及在磁盘容量分别为100 GB 和300 GB 时进行备份的结果如表2 所示,可以计算得出服务器C 和D 的数据集中文件的平均大小分别为16.4 KB 和0.11 KB。备份结果用柱状图表示如图6、图7所示。
表2 服务器C中数据集的大小
图6 服务器C中数据集的备份结果
图7 服务器D中数据集的备份结果
上述两个实验中服务器C 和服务器D 的配置完全一样。OS 为Windows Server 2012R2 Standard 64位,CPU 为4核,内存为16 GB。从上面两个实验结果可以看出,在对服务器C 和服务器D 中的两个数据集进行备份时,基于VSS 备份方式的备份时间大约是传统方式的1/10 和1/20,该备份时间和磁盘容量没有明显关系,但文件越小基于VSS的备份方式的性能优势越明显。
由于VSS 采用的是写入时复制的快照方式,可以通过跟踪设备并创建更改的块位图,实现对基于VSS 备份方式的增量备份[12],但此时需要保证源卷数据的可用性,不然无法进行恢复。增量备份的位图示意图如表3所示。
表3 增量备份的快照示意图
数据备份系统中对服务器A 和B 的增量备份如图8和图9,能更加快速地实现对数据的备份。
图8 服务器A中数据集的增量备份
图9 服务器B中数据集的增量备份
海洋数据备份平台中必须集成数据恢复模块,在数据丢失时才能进行恢复。恢复的流程和备份基本相反,需要先根据恢复需求把快照数据从备份介质中拷贝出来,然后把快照挂载到恢复的目标服务器中,再从快照卷拷贝到指定磁盘中,最后卸载并删除该快照卷。本文对基于VSS备份的备份集进行了恢复,以验证备份数据的有效性,对服务器A 和B 恢复结果分别如图10 和图11所示。
图10 服务器A中数据集的恢复
图11 服务器B中数据集的恢复
可以看出恢复的时间在可以接受的时间范围内,对恢复出来的数据集随机抽取了10 个文件,通过certutil 工具计算MD5 进行了校对,验证了备份数据的可用性。
因为基于VSS 的备份方式是基于磁盘块的备份,因此特别适合对海量小文件进行备份。但是这种方式的特点决定了只能对整个磁盘进行备份,而不能有针对性地选择某个文件或文件夹,备份的灵活性不如传统方式。
本文实现了对Windows 中NTFS 文件系统基于卷影拷贝服务的备份,通过大量实验证明该备份方式可以大大提高对海量小文件备份的性能,而且通过恢复演练验证了备份数据的可用性。下一步会继续在备份平台中完善对Linux操作系统基于LVM (Logical Volume Manager) 的 快 照 方 式[16],以及对虚拟机整机基于qcow2 镜像格式的快照方式[17]的研究,更好地为海洋数据的安全存储提供服务。