决赛作品提交
队伍名称:鸿蒙ix
指导教师:李少峰
队伍成员:董金辉、赵景齐、卢晓琴
赛道:系统创新赛道
赛题:赛题3:高性能应用目录差异分析服务
提供数据目录A1,并对数据目录进行全量备份,注意保留相关的备份数据分析信息。
程序能够对指定目录进行全量备份,同时为每个文件生成哈希码,作为备份数据分析信息。完成题目要求的功能。
全量备份5GB大小的A目录总共用时约228秒,在系统服务目录data/Backup_Service下生成文件夹A_2017_08_05_15_16_59,其中子目录data存放备份的文件及目录,A.hash存放每个文件的哈希码,如下图所示。
提供数据目录A1和A2,需要分析数据目录A2和A1的差异,并进行差分备份,输出A2和A1间的差异数据全集。建议将大文件进行适当粒度的分块(4KB起步)。
程序能够分析并输出两个目录的所有差异,包括文件的删除、新增与修改,以及空目录的新增和删除,能够将差异文件及其所在目录结构进行拷贝备份。
差分备份B目录用时约2秒,系统正确输出了A与B目录之间的全部差异,并在系统服务目录data/Backup_Service下生成备份目录a_AB_2017_08_05_15_27_26,其中文本文件b.txt保存了差异信息,目录c保存了差异文件及其所在目录结构的备份。运行结果如下图所示。
提供数据目录A1、A2和A3,需要分析数据目录A2和A1的差异,输出备份数据1。然后分析A3和A2的差异,并在备份数据1的基础上叠加差异,输出备份数据2。不允许直接获取A3和A1的差异。
程序能够分析出A2、A3目录的所有差异,并根据先前全量备份和差分备份生成的备份数据分析信息,叠加分析出A1、A3目录的所有差异,包括文件的删除、新增与修改,以及空目录的新增和删除,并且能够将差异文件及其所在目录结构进行拷贝备份。支持扩展至多于3个时刻的目录的差分备份,具有较好的可扩展性,为鸿蒙系统备份与恢复功能的研发提供了便利。
叠加备份C目录用时约3秒,系统正确叠加并输出了A与C目录之间的全部差异,并生成备份目录a_AC_2017_08_05_15_32_35,其中文本文件b.txt保存了差异信息,目录c保存了差异文件及其所在目录结构的备份。
为彰显本备份方案对于数据恢复的可行性,我们直接实现了备份数据的恢复功能,备份与恢复功能相辅相成,更好地完善了系统功能。
程序能够对任意方式备份(全量备份、差分备份、叠加备份)的文件及目录进行恢复,且可根据备份时间选择不同版本的数据进行恢复。通过多次差异分析及备份,验证了恢复数据的完整性和恢复程序的正确性。
log.txt
2.差分备份:差异分析算法
数据目录A结构请参考1.全量备份(模拟全量备份)运行效果 数据目录B结构请参考2.差分备份1(模拟普通差分备份)运行效果 数据目录C结构请参考3.差分备份2(模拟备份过程中,数据目录有修改)
现对目录A做如下操作:
A/6
new1.txt
new2.txt
A/3
A/1/file_1.txt
现对目录B做如下操作:
现对目录C做如下操作:
待三个目录恢复完成后,做如下操作:
恢复全量备份的目录A用时约109秒,恢复差分备份的目录B用时约189秒,恢复叠加备份的目录C用时约191秒。恢复前后备份输出的差异信息完全一致,证明了恢复数据的完整性和正确性。 经测试,恢复前后备份输出的差异信息完全一致,证明了恢复数据的完整性和正确性,如下图所示。
project ├── images # 系统镜像文件 │ ├── boot_linux.img │ ├── MiniLoaderAll.bin │ ├── parameter.txt │ ├── resource.img │ ├── system.img │ ├── uboot.img │ ├── updater.img │ ├── userdata.img │ └── vendor.img ├── readme.md # 项目说明文件 ├── rk3568.json # 系统配置文件 ├── src # 项目源代码文件 │ ├── add_backup # 叠加备份 │ │ ├── BUILD.gn │ │ ├── bundle.json │ │ ├── include │ │ │ ├── blake2.h │ │ │ └── blake2-impl.h │ │ └── src │ │ ├── blake2b-ref.c │ │ └── main.cpp │ ├── data_generator # 测试数据生成器 │ │ ├── BUILD.gn │ │ ├── bundle.json │ │ ├── include │ │ └── src │ │ └── main.cpp │ ├── diff_backup # 差分备份 │ │ ├── BUILD.gn │ │ ├── bundle.json │ │ ├── include │ │ │ ├── blake2.h │ │ │ └── blake2-impl.h │ │ └── src │ │ ├── blake2b-ref.c │ │ └── main.cpp │ ├── full_backup # 全量备份 │ │ ├── BUILD.gn │ │ ├── bundle.json │ │ ├── include │ │ │ ├── blake2.h │ │ │ └── blake2-impl.h │ │ └── src │ │ ├── blake2b-ref.c │ │ └── main.cpp │ └── restore # 数据恢复 │ ├── BUILD.gn │ ├── bundle.json │ ├── include │ │ ├── blake2.h │ │ └── blake2-impl.h │ └── src │ ├── blake2b-ref.c │ └── main.cpp └── subsystem_config.json # 系统配置文件 17 directories, 39 files
本项目基于OpenHarmony-v3.1-Release源码进行开发,为系统添加了名为mybackup的子系统及full_backup、add_backup、diff_backup、restore等4个部件,实现了系统服务的新增,备份数据均存放在/data/Backup_Service/目录下,其中存放每次备份的备份目录dirname_time及日志文件log.txt,接下来将介绍如何使用该系统服务。
/data/Backup_Service/
dirname_time
hdc shell
cd
data_generator
5
full_backup
diff_backup
add_backup
restore
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
赛题3:高性能应用目录差异分析服务项目说明文档
队伍信息
队伍名称:鸿蒙ix
指导教师:李少峰
队伍成员:董金辉、赵景齐、卢晓琴
赛道:系统创新赛道
赛题:赛题3:高性能应用目录差异分析服务
赛题完成情况及算法思想
1.全量备份(模拟全量备份)
提供数据目录A1,并对数据目录进行全量备份,注意保留相关的备份数据分析信息。
完成情况
程序能够对指定目录进行全量备份,同时为每个文件生成哈希码,作为备份数据分析信息。完成题目要求的功能。
算法思想
运行效果
数据目录A下有文件夹1…5,每个文件夹的总大小为1GB。 文件夹1下有一个1GB的文件 文件夹2下有两个文件夹(称作2阶文件夹),每个文件夹下有两个256MB的文件 文件夹3下有3个文件夹(称作2阶文件夹),每个2阶文件夹下有3个文件夹(称作3阶文件夹),每个3阶文件夹下有3个38MB的文件 以此类推,文件夹5下有5个文件夹(称作2阶文件夹),每个2阶文件夹下有5个3阶文件夹….一直到5阶文件夹,文件夹下有5个文件全量备份5GB大小的A目录总共用时约228秒,在系统服务目录data/Backup_Service下生成文件夹A_2017_08_05_15_16_59,其中子目录data存放备份的文件及目录,A.hash存放每个文件的哈希码,如下图所示。

2.差分备份1(模拟普通差分备份)
提供数据目录A1和A2,需要分析数据目录A2和A1的差异,并进行差分备份,输出A2和A1间的差异数据全集。建议将大文件进行适当粒度的分块(4KB起步)。
完成情况
程序能够分析并输出两个目录的所有差异,包括文件的删除、新增与修改,以及空目录的新增和删除,能够将差异文件及其所在目录结构进行拷贝备份。
算法思想
准备工作
核心算法:差异分析
运行效果
数据目录A结构请参考1.全量备份(模拟全量备份)运行效果 现将目录A进行拷贝,生成目录B,并做如下操作:差分备份B目录用时约2秒,系统正确输出了A与B目录之间的全部差异,并在系统服务目录data/Backup_Service下生成备份目录a_AB_2017_08_05_15_27_26,其中文本文件b.txt保存了差异信息,目录c保存了差异文件及其所在目录结构的备份。运行结果如下图所示。
3.差分备份2(模拟备份过程中,数据目录有修改)
提供数据目录A1、A2和A3,需要分析数据目录A2和A1的差异,输出备份数据1。然后分析A3和A2的差异,并在备份数据1的基础上叠加差异,输出备份数据2。不允许直接获取A3和A1的差异。
完成情况
程序能够分析出A2、A3目录的所有差异,并根据先前全量备份和差分备份生成的备份数据分析信息,叠加分析出A1、A3目录的所有差异,包括文件的删除、新增与修改,以及空目录的新增和删除,并且能够将差异文件及其所在目录结构进行拷贝备份。支持扩展至多于3个时刻的目录的差分备份,具有较好的可扩展性,为鸿蒙系统备份与恢复功能的研发提供了便利。
算法思想
准备工作
核心算法:差异叠加
运行效果
数据目录A结构请参考1.全量备份(模拟全量备份)运行效果 数据目录B结构请参考2.差分备份1(模拟普通差分备份)运行效果 现将目录B进行拷贝,生成目录C,并做如下操作:叠加备份C目录用时约3秒,系统正确叠加并输出了A与C目录之间的全部差异,并生成备份目录a_AC_2017_08_05_15_32_35,其中文本文件b.txt保存了差异信息,目录c保存了差异文件及其所在目录结构的备份。
4.数据恢复
为彰显本备份方案对于数据恢复的可行性,我们直接实现了备份数据的恢复功能,备份与恢复功能相辅相成,更好地完善了系统功能。
完成情况
程序能够对任意方式备份(全量备份、差分备份、叠加备份)的文件及目录进行恢复,且可根据备份时间选择不同版本的数据进行恢复。通过多次差异分析及备份,验证了恢复数据的完整性和恢复程序的正确性。
算法思想
准备工作
log.txt
,将备份记录读取并输出给用户;核心算法
对于全量备份方式的恢复
2.差分备份:差异分析算法
),分析原数据目录相对于备份目录的差异;对于其它备份方式(差分备份、叠加备份等)的恢复
运行效果
数据目录A结构请参考1.全量备份(模拟全量备份)运行效果 数据目录B结构请参考2.差分备份1(模拟普通差分备份)运行效果 数据目录C结构请参考3.差分备份2(模拟备份过程中,数据目录有修改)
现对目录A做如下操作:
A/6
,并在该子目录下随机生成两个文本文件new1.txt
、new2.txt
;(测试新增文件的识别情况)A/3
移动至子目录A/6
中;(测试删除与新增目录及文件的识别情况)A/1/file_1.txt
的内容;(测试修改文件的识别情况)现对目录B做如下操作:
现对目录C做如下操作:
待三个目录恢复完成后,做如下操作:
恢复全量备份的目录A用时约109秒,恢复差分备份的目录B用时约189秒,恢复叠加备份的目录C用时约191秒。恢复前后备份输出的差异信息完全一致,证明了恢复数据的完整性和正确性。 经测试,恢复前后备份输出的差异信息完全一致,证明了恢复数据的完整性和正确性,如下图所示。
项目结构及部署运行
项目结构
部署运行
本项目基于OpenHarmony-v3.1-Release源码进行开发,为系统添加了名为mybackup的子系统及full_backup、add_backup、diff_backup、restore等4个部件,实现了系统服务的新增,备份数据均存放在
/data/Backup_Service/
目录下,其中存放每次备份的备份目录dirname_time
及日志文件log.txt
,接下来将介绍如何使用该系统服务。hdc shell
或串口通信进入终端,通过cd
指令把工作目录切换至需要备份的数据目录下,也可通过输入data_generator
命令生成随机测试数据文件,数据目录depth建议设置为5
;full_backup
,并输入目录名称,对数据目录进行全量备份;diff_backup
,接着选择全量备份的记录,最后输入第二目录名称,对两个数据目录进行差分备份;add_backup
,接着选择全量备份的记录,接着选择差分备份或叠加备份的记录,最后输入第三目录名称,对三个数据目录进行叠加备份;restore
,接着选择要恢复的备份数据记录,等待系统完成恢复即可;