多平台、模块化、可挂载、安全、加密的云盘自动同步、备份工具,支持本地存储、阿里云盘等,支持镜像、备份等同步模式,完全免费开源。
提供 Docker、Windows、Linux、macOS、Web 等多平台版本。
支持 AES256-GCM、ChaCha20-Poly1305 加密,支持 Zstd、LZ4、Snappy 压缩,支持 SHA256、BLAKE3 等哈希算法,任何第三方、服务商都无法查看数据,保护您的数据安全和隐私。
Docker 版本
# 阿里云镜像(推荐国内使用)
docker pull registry.cn-guangzhou.aliyuncs.com/trueai-org/mdrive
docker run --name mdrive -d --restart=always \
-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \
-p 8080:8080 --user root \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
registry.cn-guangzhou.aliyuncs.com/trueai-org/mdrive
# Docker Hub 镜像
docker pull trueaiorg/mdrive
docker run --name mdrive -d --restart=always \
-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \
-p 8080:8080 --user root \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
trueaiorg/mdrive
# GitHub 镜像
docker pull ghcr.io/trueai-org/mdrive
docker run --name mdrive -d --restart=always \
-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \
-p 8080:8080 --user root \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
ghcr.io/trueai-org/mdrive
# 演示站点启动配置
docker pull registry.cn-guangzhou.aliyuncs.com/trueai-org/mdrive
docker run --name mdrive -d --restart=always \
-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \
-e DEMO=true \
-p 8080:8080 --user root \
-v /root/mdrive/data:/app/data:rw \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
registry.cn-guangzhou.aliyuncs.com/trueai-org/mdrive
Windows 版本
a. 通过 https://github.com/trueai-org/mdrive/releases 下载 windows 最新免安装版,例如:MDrvie-win-x64.zip
b. 解压并执行 MDriveSync.Client.API.exe
c. 打开网站 http://localhost:8080/
d. 安装为系统服务(可选),右键文件以管理员身份运行 `一键安装或卸载*.bat`,选择安装或卸载服务。
e. 部署到 IIS(可选),在 IIS 添加网站,将文件夹部署到 IIS,配置应用程序池为`无托管代码`,启动网站。
f. 使用系统自带的 `任务计划程序`(可选),创建基本任务,选择 `.exe` 程序即可,请选择`请勿启动多个实例`,保证只有一个任务执行即可。
g. 磁盘挂载支持(可选),下载并安装驱动(http://localhost:8080/driver/Dokan_x64.msi),将云盘挂载到本地,像管理本地文件一样管理远程文件。
Linux 版本
a. 通过 https://github.com/trueai-org/mdrive/releases 下载 linux 最新免安装版,例如:MDrive-linux-x64.zip
b. 解压到当前目录: tar -xzf MDrive-linux-x64-<VERSION>.tar.gz
c. 执行: run_app.sh
c. 启动方式1: sh run_app.sh
d. 启动方式2: chmod +x run_app.sh && ./run_app.sh
macOS 版本
a. 通过 https://github.com/trueai-org/mdrive/releases 下载 macOS 最新免安装版,例如:MDrive-osx-x64.zip
b. 解压到当前目录: tar -xzf MDrive-osx-x64-<VERSION>.tar.gz
c. 执行: run_app_osx.sh
c. 启动方式1: sh run_app_osx.sh
d. 启动方式2: chmod +x run_app_osx.sh && ./run_app_osx.sh
账号:admin,密码:123456
- 对称加密方法 https://soatok.blog/2020/07/12/comparison-of-symmetric-encryption-methods/
- AEAD 加密 https://libsodium.gitbook.io/doc/secret-key_cryptography/aead
- 压缩分析 https://kopia.io/docs/advanced/compression/
- 压缩算法 https://tech.meituan.com/2021/01/07/pack-gzip-zstd-lz4.html
- LZ4 - lz4.org https://github.com/lz4/lz4
- Facebook zstd https://github.com/facebook/zstd
- Google snappy https://github.com/google/snappy
近期 Docker Hub 国内无法使用,可以使用 https://docker.m.daocloud.io 加速,或使用阿里云镜像。
https://hub.docker.com/r/trueaiorg/mdrive
从阿里云 Registry 中拉取镜像
docker pull registry.cn-guangzhou.aliyuncs.com/trueai-org/mdrive:[镜像版本号]
从 Docker Hub 中拉取镜像
docker pull trueaiorg/mdrive:[镜像版本号]
从 GitHub Registry 中拉取镜像
docker pull ghcr.io/trueai-org/mdrive:[镜像版本号]
# 拉取镜像
docker pull trueaiorg/mdrive
# 快速启动并开启只读模式
docker run --name mdrive -d --restart=always \
-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \
-e READ_ONLY=true \
-p 8080:8080 trueaiorg/mdrive
# 快速启动完整示例2,持久化、映射配置、只读、账号密码
# 如果需要,更改目录权限
sudo chmod -R 777 /home/mdrive/db
docker run --name mdrive -d --restart=always \
-v /home/mdrive/appsettings.json:/app/appsettings.json:rw \
-v /home/mdrive/db:/app/db:rw \
-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \
-e READ_ONLY=true \
-p 18080:8080 --user root trueaiorg/mdrive
# 确保目录存在
# 确保映射/挂载了备份目录
# 创建云盘存储目录
mkdir /home/mdrive
cd /home/mdirve
# 创建配置文件(可选)
vi appsettings.json
# 确保配置具有可写配置权限 appsettings.json
chmod 666 appsettings.json
# 快速启动示例,并挂载 /data 目录到容器 /data 只读模式,并映射端口 8080
docker run --name mdrive -d --restart=always \
-v /home/mdrive/appsettings.json:/app/appsettings.json:rw \
-v /data:/data:ro \
-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \
-p 8080:8080 --user root trueaiorg/mdrive
# 调试日志
docker logs mdrive
# 进入容器
docker exec -it mdrive /bin/bash
# 访问端口
http://{ip}:8080
# 更多示例
# 配置日志、映射云盘配置、映射程序配置、挂载 /data
mkdir /home/mdrive/logs
docker run --name mdrive -d --restart=always \
-v /home/mdrive/appsettings.json:/app/appsettings.json:rw \
-v /home/mdrive/logs:/app/logs \
-v /home/mdrive/db:/app/db \
-v /data:/data:ro \
-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \
-p 8080:8080 --user root trueaiorg/mdrive
# 更多权限,容器内以 root 用户启动:--user root
下载 MDrive
并解压,运行 .exe
程序即可。
- 作为服务后台执行:
- 可使用系统自带的
任务计划程序
,创建基本任务,选择.exe
程序即可,请选择请勿启动多个实例
,保证只有一个任务执行即可。 - 可使用其他服务后台启动,例如:nssm、sc、winsw、iis 等。
- 可使用系统自带的
- [√] 不限速,阿里云盘官方接口支持,上传下载均不限速。
- [√] 挂载云盘支持,支持将云盘挂载到本地,作为本地硬盘使用。
- [√] 多线程支持,多线程上传、下载、同步,充分利用带宽。
- [√] 定时作业,定时同步、还原、备份等。
- [√] 在线云盘文件管理。
- [√] 免费、开源
- [√] 跨平台,支持 Windows、Linux、Unix、Mac、Android、Docker 等平台。
- [√] 快速校验,多种算法支持 sha1、sha256、md5、blake3 等。
- [√] 安全,加密
- [√] 多账号支持,多阿里云盘账号支持
- [√] 多作业计划支持,可以配置多个同步时间点。
- [√] 多种同步方式:镜像、备份
- [√] 极速,采用安全极速的差异算法,极速实现同步。
- [√] 支持秒传
- [√] 支持过滤本地文件/文件夹,丰富的校验规则。
- [√] 高性能,采用 .NET8 最新技术,极致的性能体现,低内存、高性能、跨平台。
- [√] WebUI 可视化配置
- [√] WebUI 前后端分离,保证了后台服务的高可用。
- [√] 支持只读模式,只读模式启动服务,则不可以编辑配置。
- [√] 支持自定义端口。
- [√] 支持回收站功能,支持删除文件/夹到回收站。
- [√] WebUI 支持多主题,支持黑色模式。
- [√] 支持云盘管理和在线下载文件。
- [√] 支持作业暂停、恢复、禁用、取消、删除等。
- [√] 支持队列,保证作业的高可用,避免多任务卡顿以及抢占资源问题。
- [√] 支持登录验证,下载验证。
- [√] 支持从配置文件中启动作业。
- [√] 支持将云盘挂载到本地,像管理本地文件一样管理远程文件。
- [√] 支持将备份目录挂载到本地。
- [√] 支持快照,支持快照挂载。
- [√] 支持导入/导出配置。
- [√] 支持还原/下载云盘文件。
- 只读模式:WebUI 下如果开启只读模式,则允许编辑和修改,只能查看,默认
ReadOnly: false
。使用方式,可以通过修改appsettings.json
或 docker 使用环境变量-e READ_ONLY=true
。 - 基础认证:WebUI 账号和密码,如果开启则打开网站管理后台时需要输入账号和密码,默认启用
BasicAuth
。使用方式,可以通过修改appsettings.json
或 docker 使用环境变量-e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456
。 - 演示模式:网站配置为演示模式,只能查看和下载,功能受限,默认
Demo: null
。使用方式,可以通过修改appsettings.json
或 docker 使用环境变量-e DEMO=true
。
默认
appsettings.json
与appsettings.Example.json
示例配置。
如果您通过
Docker
启动或简单使用则无需关心此配置。
# appsettings.Example.json 示例配置
{
// 网站配置为只读模式
"ReadOnly": null,
// 网站配置为演示模式
"Demo": null,
// 网站登录授权账号密码
"BasicAuth": {
"User": "",
"Password": ""
},
"Client": {
// 阿里云盘默认启动时加载的配置项(可选)
"AliyunDrives": [
{
"Id": "1",
"Name": "云盘1",
"TokenType": "Bearer",
"AccessToken": "",
"RefreshToken": "【1】这里输入授权令牌",
"ExpiresIn": 7200,
"Jobs": [
{
"Id": "1",
"Name": "test",
"Description": "",
"State": 0,
"Schedules": [
"【2】这里是备份计划时间,例如每分钟执行:0 * * * * ?"
],
"Filters": [
"/Recovery/",
"/System Volume Information/",
"/Boot/",
"/$RECYCLE.BIN/",
"/@Recycle/",
"/@Recently-Snapshot/",
"**/node_modules/**",
"*.duplicatidownload"
],
"Sources": [
"【3】这里输入备份的文件夹,可填写多个路径,注意:windows 路径,例如:E:\\test"
],
"Target": "【4】这里输入云盘备份目录,例如:backups/test",
"Restore": "E:\\kopia_restore",
"RapidUpload": true,
"DefaultDrive": "backup",
"CheckAlgorithm": "sha256",
"CheckLevel": 1,
"FileWatcher": true,
"Order": 0,
"IsTemporary": false,
"IsRecycleBin": false,
"UploadThread": 0,
"DownloadThread": 0
}
]
}
]
},
// 日志输出
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Default": "Warning",
"System": "Warning",
"Microsoft": "Warning"
}
},
"WriteTo": [
// 是否将日志输出到文件
{
"Name": "File",
"Args": {
"path": "logs/log.txt",
"rollingInterval": "Day",
"fileSizeLimitBytes": null,
"rollOnFileSizeLimit": false,
"retainedFileCountLimit": 31
}
},
// 是否将日志输出到控制台
{
"Name": "Console"
}
]
},
// 系统日志配置
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"urls": "http://*:8080" // 默认程序启动的端口
}
注意系统日志路径配置,不同操作系统之间的差异。
# window
"path": "logs\\log.txt"
# linux
"path": "logs/log.txt"
默认
Client
配置(可选,默认无需配置)
RefreshToken
为必填项,其他不用填写。点击获取授权令牌,或登录官网获取授权令牌。Jobs
可以配置多个作业,计划中的作业时间可以可以配置多个时间点。Sources
备份源目录列表,可以配置多个备份源,必填Target
云盘存储目录,必填Schedules
定时计划,可配置多个计划时间IsTemporary
是否为临时任务或一次性的同步任务,也表示是否立即执行,如果为true
,则启动时立即执行作业State
作业状态,例如:100 表示暂停,0 表示未开始Mode
同步模式,0 镜像同步(以本地为主,远程为镜像,删除不一致冗余的远程文件),1 冗余同步(同步到远程,不删除远程文件)
{
"Client": { // 客户端备份/同步配置
"AliyunDrives": [ // 阿里云盘配置
{
"Name": "云盘1", // 云盘名称
"TokenType": "Bearer", // 令牌类型,这里是Bearer类型
"AccessToken": "your_access_token", // 访问令牌,用于API访问
"RefreshToken": "your_refresh_token", // 【必填】刷新令牌,用于获取新的访问令牌
"ExpiresIn": 7200, // 令牌过期时间,单位为秒
"Metadata": "", // 阿里云盘元信息,如用户信息、云盘信息、VIP信息等
"Jobs": [ // 作业列表
{
"Id": "1", // 任务 ID
"Name": "gpkopia", // 任务/作业名称
"Description": "", // 作业描述
"State": 0, // 作业状态,例如:100 表示暂停,0 表示未开始
"Mode": 0, // 同步模式,0 镜像同步,1 冗余同步
"Schedules": [ // 【必填】定时计划,使用cron表达式定义
"0 0/10 * * * ?"
],
"Filters": [ // 文件过滤列表
"**/logs/*"
],
"Sources": [ // 【必填】源目录列表
"E:\\kopia"
],
"Target": "backups/gp", // 【必填】目标存储目录
"Restore": "E:\\kopia_restore", // 还原目录
"RapidUpload": true, // 是否启用秒传功能
"DefaultDrive": "backup", // 默认备份的云盘类型,备份盘或资源盘
"CheckAlgorithm": "sha256", // 文件对比检查算法
"CheckLevel": 1, // 文件差异算法检查级别
"FileWatcher": true, // 是否启用文件系统监听
"Order": 0, // 任务显示顺序
"IsTemporary": false, // 是否为临时任务,是否立即执行
"IsRecycleBin": false, // 是否启用删除到回收站
"UploadThread": 0, // 上传并行任务数
"DownloadThread": 0, // 下载并行任务数
"Metadata": "" // 作业元信息
},
// 更多作业配置...
]
}
]
}
}
# 管理后台账号密码
# 可以通过配置,直接修改管理后台账号密码。在 docker 启动时,也可以通过环境变量设置。
{
"BasicAuth": {
"User": "admin",
"Password": "123456"
}
}
Schedules
作业计划任务示例
// cron 表达式 基于 Quartz 3.8.0
// https://www.bejson.com/othertools/cron/
// 每 5 秒
0/5 * * * * ?
// 每分钟
0 * * * * ?
// 每 5 分钟
0 0/5 * * * ?
// 每 10 分钟
0 0/10 * * * ?
// 每天 9 点
0 0 9 * * ?
// 每天 8 点 10 分
0 10 8 * * ?
Filters
过滤文件/文件夹示例
# 忽略文件示例
# 忽略 `.exe` 结尾的所有文件
*.duplicatidownload
*.exe
# 忽略根目录示例,以 `/` 开头表示当前备份/同步的根目录
# 忽略当前备份/同步的根目录 `/Recovery/` 下的文件夹和文件
/Recovery/*
/Recovery/
/System Volume Information/
/System Volume Information/*
/Boot/
/Boot/*
/$RECYCLE.BIN/*
/$RECYCLE.BIN/
/bootmgr
/bootTel.dat
/@Recycle/*
/@Recently-Snapshot/*
/@Recycle/
/@Recently-Snapshot/
# 忽略根目录和子目录示例
# 忽略当前备份/同步的目录下 `/.next/` 目录以及子目录下的所有文件夹和文件
**/@Recycle/*
**/@Recently-Snapshot/*
**/.@__thumb/*
**/@Transcode/*
**/.obsidian/*
**/.git/*
**/.svn/*
**/node_modules/*
**/bin/Debug/*
**/bin/Release/*
**/logs/*
**/obj/*
**/packages/*
**/.next/*
- [3.5] 支持 Linux 磁盘挂载。
- [3.x] 支持超时自动锁定管理后台。
- [3.x] 支持在线上传。
- [3.x] 多模块支持,支持 Duplicati、Kopia 模块,直接进行加密。
- [3.x] 多版本、快照模式
- [3.x] Kopia 模式、插件开发
- [3.x] 百度云盘集成、本地模式集成、阿里云 OSS、腾讯云 COS 等
- [3.x] 上传增加文件的本地时间
- [3.x] WebDAV 支持
- [3.x] 多版本、多备份、版本还原
- [3.x] 配置加密、作业加密
- [3.x] 支持自定义文件后缀。避免被任何文件分析。
- [3.x] 支持多个备份点,避免快照数据损坏(待定),支持多重备份点。
- [3.x] 还原时恢复原始权限和时间
- [3.x] Duplicati 版(自动加密)
- [3.x] Kopia 版(自动加密)
- [3.x] 提供 Mac 版、手机版(Andorid 版、IOS 版)
[验证] 空文件、空文件夹也同步[验证] 快捷方式支持同步,注意可能存在兼容性问题- [修复] 指向同一目标 bug -> trueai-org#3
- [优化] 优化挂载读写性能
- [优化] 优化磁盘挂载支持秒传
- [新增] 增加 linux/unix/mac 磁盘挂载支持
- [BUG] 多个源文件夹名称一致校验
- [优化] 添加自定义挂载磁盘名称支持 -> trueai-org#15
- [3.x] WebUI 版本更新提示,支持热更新支持,使用子程序提供热更新服务。
- App 启动时,通过接口获取欢迎语,检查版本等
- App 增加下次作业时间
- App 增加公告
- App 增加上次执行结果
- Mac 版本、移动端打包、Windows 安装包、WPF 安装包
- 锁定模式,超时多少时间自动退出登录
- Windows 客户端 UI/WPF 版本
通过 Github Actions
自动或生成到 Docker Hub
、ghci.io
、Window
安装包等,保证程序的安全。
- 极致,待完善,仅供参考。
大小 29.7 GB, 1,467 个文件,3,640 个文件夹
首次同步:0.8秒 + 8秒(列表加载用时 9 秒)
[11:14:01 INF] Current: E:\***\publish
[11:14:01 INF] 作业初始化
[11:14:02 INF] 同步作业开始:12/27/2023 11:14:02
[11:14:02 INF] 云盘存储根目录初始化完成,用时:194ms
[11:14:02 INF] 开始加载云盘存储文件列表
[11:14:12 INF] 云盘文件加载完成,包含 1467 个文件,3643 个文件夹。
[11:14:12 INF] 加载云盘存储文件列表完成,用时:9835ms
[11:14:12 INF] 开始执行同步
[11:14:13 INF] 扫描本地文件,总文件数:1467, 扫描文件用时: 385.6735ms
[11:14:13 INF] 同步文件夹中 4/3641,用时:1.7352ms,kopia/p6c/f66
...
[11:14:13 INF] 同步文件夹中 3639/3641,用时:796.4739ms,kopia/p8a/032
[11:14:13 INF] 同步文件夹完成,总文件夹数:1467,用时:798.2616ms
[11:14:13 INF] 同步文件中 1/1467,用时:43.6954ms,kopia/p9e/80a/bd40cee2b0538167b1ac0cfe3f3-s9a17ce26b1838062122.f
...
[11:14:30 INF] 同步文件中 1467/1467,用时:17063.5177ms,kopia/p65/ef2/046536ebd68a2b0ec57a3f733ff-s9a17ce26b1838062122.f
[11:14:30 INF] 同步文件完成,总文件数:1467,用时:17063.8004ms
[11:14:30 INF] 同步作业完成,用时:18250ms
[11:14:30 INF] 同步作业结束:12/27/2023 11:14:30
[11:14:31 INF] 同步作业校验完成,用时:2ms
第二次同步:总用时 2 秒(列表加载用时 10 秒)
[11:19:01 INF] 开始例行检查
[11:20:00 INF] 同步作业开始:12/27/2023 11:20:00
[11:20:00 INF] 云盘存储根目录初始化完成,用时:367ms
...
[11:20:10 INF] 云盘文件加载完成,包含 1467 个文件,3643 个文件夹。
[11:20:10 INF] 加载云盘存储文件列表完成,用时:10047ms
[11:20:10 INF] 开始执行同步
[11:20:10 INF] 扫描本地文件,总文件数:1467, 扫描文件用时: 322.6471ms
[11:20:10 INF] 同步文件夹中 2/3641,用时:0.0552ms,kopia/p6c/f66
...
[11:20:12 INF] 同步文件夹完成,总文件夹数:1467,用时:1450.7582ms
...
[11:20:12 INF] 同步文件中 1467/1467,用时:519.6538ms,kopia/qd1/275/b7e487081d0ed47ea0638caa116-s3e0aeff9c8243770123.f
[11:20:12 INF] 同步文件完成,总文件数:1467,用时:520.4528ms
[11:20:12 INF] 同步作业完成,用时:2295ms
[11:20:12 INF] 同步作业结束:12/27/2023 11:20:12
[11:20:12 INF] 同步作业校验完成,用时:1ms
- 推广返现
- 购买阿里云盘会员返现
- 感谢所有的贡献者
- 如果您觉得本项目对您有帮助,欢迎收藏点赞,也可通过扫码购买会员,对作者提供支持!
限时推广返现,APP 扫码购买会员
👍👍阿里云盘推广返现,8T云盘低至6元/月,点击购买会员支持作者,最高30%返现🌸🌸
微信返现客服
tab-ai
感谢以下所有的贡献者!
![](https://github.com/616734202.png?raw=true)
![](https://github.com/tdsszz.png?raw=true)
![](https://github.com/Fingerbb.png?raw=true)
- 感谢阿里云盘共创团对 MDrive 的支持。
- 感谢 Duplicati 对本产品的支持。
- WinSW 系统服务,将本程序安装作为 Windows 服务运行。