目录
目录README.md

Logo


先进、高性能且功能强大的差异备份软件

决赛内容

软件架构

OhDiff 软件架构

开发环境

需要使用 Docker 容器编译项目。

构建 Docker 镜像

docker build -t ohdev/ohdiff .

运行 Docker 容器

docker run -it -v $(pwd):/ohdiff --name ohdiff-dev ohdev/ohdiff

编译

项目支持 x86-64 native 编译和 aarch64 交叉编译。native 编译方便本地测试;交叉编译用来支持在开发板上运行。

以下编译指令都是在容器内执行。

目标平台

Native 编译

mkdir -p /ohdiff/build/x86-64
cd /ohdiff/build/x86-64

cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ../..
ninja

编译结果就存放在当前目录中。ohdiff 为主可执行文件。

交叉编译

mkdir -p /ohdiff/build/aarch64
cd /ohdiff/build/aarch64

cmake -G Ninja \
    -DCMAKE_TOOLCHAIN_FILE=../../aarch64-toolchain.cmake \
    -DCMAKE_BUILD_TYPE=Release ../..
ninja

编译结果就存放在当前目录中。ohdiff 为主可执行文件。项目使用静态编译,可执行文件直接复制到板子上就能跑。

链接方式

静态链接

项目的默认构建方式。

动态链接

给 cmake STATIC_BUILD 指定为 OFF。

cmake -G Ninja -DSTATIC_BUILD=OFF ../..

备份

备份

./ohdiff backup --backup <backup-dir> --src <source-dir>

例如:

./ohdiff backup --backup /backups/backup1 --src /mnt/sdcard/A1 

如果目录发生改变,要进行增量备份,再次调用备份命令即可。例如:

./ohdiff backup --backup /backups/backup1 --src /mnt/sdcard/A1 # 全量备份
# A1 目录发生一些改变后
./ohdiff backup --backup /backups/backup1 --src /mnt/sdcard/A1 # 增量备份

ohdiff 会把备份数据放到 /backups/backup1/*.data,并生成 /backups/backup1/*.index 作为索引。

恢复备份

./ohdiff restore ---backup <backup-dir> --dst <destination-path> [--layer <N>] [--pick <picked path>]

例如恢复最新备份的全部数据:

./ohdiff restore --backup /backups/backup1 --dst /mnt/sdcard/A1-restored

可以仅恢复部分文件,使用 --pick 选项指定,例如:

./ohdiff restore --backup /backups/backup1 --dst /mnt/sdcard/A1-restored --pick /a.txt

使用 --layer 选项可以指定特定的历史版本,例如恢复到第 3 次备份的版本:

./ohdiff restore --backup /backups/backup1 --dst /mnt/sdcard/A1-restored --layer 3

使用 --timepoint 选项可以指定特定的时间点,例如恢复到 2024 年 6 月 29 日 18 点 8 分备份的数据:

./ohdiff restore --backup /backups/backup1 --dst /mnt/sdcard/A1-restored --timepoint "2024-06-29T18:08:00"

合并历史备份

使用 --start(-s)--end(-e) 选项指定合并的备份版本范围。例如合并第1次到第3次备份:

./ohdiff merge --backup /backups/backup1 -s 1 -e 3

场景特化

压缩模式

使用 --compression <level> 选项可以在备份时进行压缩,减小备份体积。level 表示压缩等级。例如,--compression 2 产生的备份比 --compression 1 更小。--compression off 表示不压缩。默认压缩等级为 1。

./ohdiff backup --backup /backups/backup1 --src /mnt/sdcard/A1 --compression 2

关闭低内存占用

使用 --no-low-mem 可以关闭低内存占用模式,更充分的释放备份性能。

./ohdiff backup --backup /backups/backup1 --src /mnt/sdcard/A1 --no-low-mem

指定线程数

使用 --threads 或者 -t 可以指定备份时的线程数。

./ohdiff backup --backup /backups/backup1 --src /mnt/sdcard/A1 --threads 4

备份可视化

List

使用 list 命令可以查看备份的历史版本。

./ohdiff list --backup <backup-dir>

Visualizer

demos/visualizer/visualizer <backup-dir> > index.html

WebUI

安装 bun

curl -fsSL https://bun.sh/install | bash

下载前端依赖

cd /ohdiff/demos/webclient
bun install

运行前端

cd /ohdiff/demos/webclient
bun run dev

运行后端

/ohdiff/build/demos/webapi/webapi <backup-dir> <source-dir>

前端端口 5173,后端端口 15428。如果在远程服务器上运行后端,需要把端口映射到本地。

开发指南

参考开发指南

团队信息

Logo

学  校: 上海交通大学
参赛队伍: 汉东检查组
队  长: 赵龙宇
队伍成员: 蔡文俊 刘佳隆
指导老师: 董明凯
关于
2.6 GB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号