GithubHelp home page GithubHelp logo

trueai-org / mdrive Goto Github PK

View Code? Open in Web Editor NEW
128.0 1.0 19.0 40.26 MB

一个基于阿里云盘官方 API 授权的自动同步和备份工具,支持云盘挂载到本地,支持本地存储,支持加密,多平台、安全、自动化的数据管理方案。

Home Page: https://duplicati.net

License: Apache License 2.0

Shell 0.11% C# 99.54% Dockerfile 0.17% PowerShell 0.04% HTML 0.03% Batchfile 0.11%
aliyun-drive aliyunpan backup disk duplicati mount csharp sync net8 aes256-gcm

mdrive's People

Contributors

tdsszz avatar trueai-org avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

mdrive's Issues

同步不完整

程序部署两三天了,期间没关过机,一直运行状态。过一段时间显示同步完成,但是查看云端和本地文件大小差别巨大,本地200G,云端仅20G
PixPin_2024-06-21_22-11-28

Docker部署怎么数据持久化

在docker中部署后,删除容器再创建容器,之前设置的存储和作业就消失了。
sudo docker run --name mdrive -d --restart=always \ -v /MDriveSync/appsettings.json:/app/appsettings.json:rw \ -v /MDriveSync/appsettings.Client.json:/app/appsettings.Client.json:rw \ -v /MDriveSync/logs:/app/logs \ -v /data:/data:ro \ -e BASIC_AUTH_USER=admin -e BASIC_AUTH_PASSWORD=123456 \ -p 8080:8080 trueaiorg/m-drive-sync-client

另外appsettings.json没有找到示例
appsettings.Client.json感觉没什么用

新特性 | 希望支持像OneDrive一样同步本地文件夹

OneDrive同步的策略主要特点在于,备份文件夹中的文件(文件夹)被修改才会被重新上传,比较灵活。
对于mdrive现有的策略,似乎是完全重新扫描文件夹并读取云端文件数据并比对,具体使用上这样也比较笨重,备份很慢。

everything可以获取本地最新被修改文件的相关数据(视图>排序>修改时间),或许有其他可以获得这些信息的系统api。

希望mdrive未来能够支持类似OneDrive的同步策略:先把备份文件夹中所有文件上传(初始备份),然后持续监控相关路径的修改情况,并对被修改的文件即时(或一定延时)后云同步。

ubuntu docker 同步失败

错误日志

System.DllNotFoundException: Unable to load shared library 'dokan2.dll' or one of its dependencies. In order to help diagnose loading problems, consider using a tool like strace. If you're using glibc, consider setting the LD_DEBUG environment variable: 
/app/runtimes/linux-x64/native/dokan2.dll.so: cannot open shared object file: No such file or directory
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.1/dokan2.dll.so: cannot open shared object file: No such file or directory
/app/dokan2.dll.so: cannot open shared object file: No such file or directory
/app/runtimes/linux-x64/native/libdokan2.dll.so: cannot open shared object file: No such file or directory
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.1/libdokan2.dll.so: cannot open shared object file: No such file or directory
/app/libdokan2.dll.so: cannot open shared object file: No such file or directory
/app/runtimes/linux-x64/native/dokan2.dll: cannot open shared object file: No such file or directory
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.1/dokan2.dll: cannot open shared object file: No such file or directory
/app/dokan2.dll: cannot open shared object file: No such file or directory
/app/runtimes/linux-x64/native/libdokan2.dll: cannot open shared object file: No such file or directory
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.1/libdokan2.dll: cannot open shared object file: No such file or directory
/app/libdokan2.dll: cannot open shared object file: No such file or directory
   at DokanNet.Native.NativeMethods.DokanInit()
   at DokanNet.Dokan..ctor(ILogger logger)
   at MDriveSync.Core.Services.AliyunDriveMounter.Mount() in /src/src/MDriveSync.Core/Services/AliyunDriveMounter.cs:line 1276
   at MDriveSync.Core.TimedHostedService.DoWork(Object state) in /src/src/MDriveSync.Core/Services/TimedHostedService.cs:line 114

删除作业逻辑问题

您好,docker部署创建作业后,不能操作删除,显示操作成功,但是作业还在,会变成禁用状态。
重启容器后,才可以进行作业的删除。

寻求课程合作

hi,我们是一家在线教育平台,关注到您经常分享 c# 方向的项目,项目十分不错,想问问您是否有兴趣结合这些项目出在线课程分享给大家学习呢,相信会为您带来不错的收益,若有兴趣了解,欢迎直接添加我们的合作微信:shiyanloukecheng~期待您的联系。

执行例行检查时发生异常,refreshToken可以正常用,其他脚本用来正常签到能用,这里重复拿了也用不了

[16:31:04 INF] 开始例行检查
[16:31:04 INF] 作业初始化中
[16:31:04 INF] Linux: False
[16:31:06 ERR] 执行例行检查时发生异常
System.Net.Http.HttpRequestException: Request failed with status code Unauthorized
at MDriveSync.Core.Services.ProviderApiHelper.RefreshToken(String refreshToken)
at MDriveSync.Core.Job.InitToken()
at MDriveSync.Core.Job.<get_AccessToken>b__47_0(ICacheEntry c)
at Microsoft.Extensions.Caching.Memory.CacheExtensions.GetOrCreate[TItem](IMemoryCache cache, Object key, Func`2 factory)
at MDriveSync.Core.Job.get_AccessToken()
at MDriveSync.Core.Job.AliyunDriveInitInfo()
at MDriveSync.Core.Job.b__72_0()
at MDriveSync.Core.Services.LocalLock.TryLock(String resource, TimeSpan expirationTime, Action action)
at MDriveSync.Core.Job.AliyunDriveInitialize()
at MDriveSync.Core.Job.Maintenance()
at MDriveSync.Core.TimedHostedService.DoWork(Object state)

首次接入的时候想从阿里云盘拉取文件下来

这个只能自己从阿里云盘下载一份,还是怎么操作。我这边现在本地目录选了个空的文件夹,结果把我阿里云盘的数据都清空了。只保留了文件夹。文件夹里面的数据都清空了。 这个是需要设置什么吗?还是不支持这样的初始化方式呢?

建议

希望 只有一个本地目录的时候 可以添加一个是否创建以这个目录命名的文件夹的按钮
在目标目录下创建目录还是直接放到目标目录

希望 多个任务的目标目录可以多个任务相同(本地目录必须不同)

建议考虑是否需要集成Dokan的相关东西

Windows 10 企业版 LTSC,运行时报错如下

2024-02-16 00:57:56.519 +08:00 [INF] 开始例行检查
2024-02-16 00:57:56.519 +08:00 [INF] 云盘挂载初始化中
2024-02-16 00:57:58.958 +08:00 [INF] 云盘挂载初始化完成
2024-02-16 00:57:58.958 +08:00 [ERR] 执行例行检查时发生异常
System.DllNotFoundException: Dll was not found.
   at DokanNet.Native.NativeMethods.DokanInit()
   at DokanNet.Dokan..ctor(ILogger logger)
   at MDriveSync.Core.Services.AliyunDriveMounter.Mount()
   at MDriveSync.Core.TimedHostedService.DoWork(Object state)

我从 https://github.com/dokan-dev/dokany 下载安装Dokan后就正常了

程序意外中断闪退

在备份大文件夹(包含上万个文件)的过程中,程序中途MDriveSync.Client.API.exe闪退。

以下几个阶段均发生过闪退情况:

  1. 文件读取、准备过程
  2. 文件上传过程

加载云盘存储文件优化建议

目前的逻辑是在同步开始时会通过分页遍历获取一遍阿里云盘所有的文件信息,如果云盘原本文件过多,则会造成获取时间过长,比如我的云盘单是获取一遍文件就要花费36分钟。由于获取的文件是放在变量中,Docker容器内存占用最高达到2.84G。但是最终所使用到的只是设置的备份目标目录下的文件情况。

微信截图_20240711162035

优化建议:
只对设置的备份目录进行遍历获取文件以及文件夹情况,不再获取云盘其他无关文件的信息。以便减少花费时间、资源占用以及减少对阿里云盘api调用次数

关于docker镜像使用的一些问题和建议。

先说点一些问题

  1. /app/appsettings.json 无法映射(不知道是不是设置问题)从第一级目录开始 权限都777了都不行。
  2. 双向同步,谜一样的存在,新增一个测试目录能同步,在我需要同步的文件就不行了,只能上传不会下载到本地来。
  3. 作业计划 每秒,无法取消,他就是个bug一样的存在,只要设置了就没办法取消,结合条目1 的无法映射 我就没在docker里面去修改。
  4. 每一次同步感觉都会对比所有文件日志里显示是每一个都在传,因为是秒传。
  5. 启用文件系统监听 无法确定他是否起作用。
  6. 就算是同步1个空的txt文件 消耗时间都在2分钟以上。
  7. 能耗开销有点大。
  8. 正在加载云盘文件 ,完全不知道他在处理什么东西,日志里面就显示“例行检查完成”

再说点建议

  1. 备份中给前台一个日志列表 显示正在处理的文件,成功 失败 同步中 等待
  2. 显示本地文件列表,远程文件列表
  3. 增加强制关闭忽略计划时间。

个人体验心得,总体来说蛮不错的,我说的条目可能存在bug 可能是我个人原因。

加载文件目录下标异常

加载本地目录文件异常 D:\download\upload
System.ArgumentOutOfRangeException: 'minValue' cannot be greater than maxValue. (Parameter 'minValue')
at System.Random.ThrowMinMaxValueSwapped()
at System.Random.Next(Int32 minValue, Int32 maxValue)
at MDriveSync.Core.ShaHashHelper.GetSamplePoints(Int64 fileLength, Int32 sampleSize, Int32 numberOfRandomSamples, Int32 seed)
at MDriveSync.Core.ShaHashHelper.ComputeFileSampleHashHex(String filePath, String algorithm, Int32 seed)
at MDriveSync.Core.ShaHashHelper.ComputeFileSampleHash(String filePath, String alg, Int32 seed)
at MDriveSync.Core.ShaHashHelper.ComputeFileHash(String filePath, Int32 level, String alg, Int64 seed)
at MDriveSync.Core.AliyunJob.<>c__DisplayClass65_1.g__LoadFiles|4(String dir)

指向同一目录逻辑问题

修改业务时,不能保存修改,会提示不能指向同一目录,应该是把自己也加在判断逻辑里了,没有排除。
截图_2024年01月19日15时04分05秒

WEB界面中translateelement.css不能加载的问题

系统:ubuntu
使用docker部署,打开web界面后,网页标签很长一段时间在转圈,F12调试后发现有个css加载超时:
<link type="text/css" rel="stylesheet" charset="UTF-8" href="https://translate.googleapis.com/translate_static/css/translateelement.css">
挂梯子后访问404
image

作业初始化不成功

Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]: [14:06:25 ERR] 执行例行检查时发生异常
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]: System.Threading.Tasks.TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:  ---> System.TimeoutException: A task was canceled.
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:  ---> System.Threading.Tasks.TaskCanceledException: A task was canceled.
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    --- End of inner exception stack trace ---
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    --- End of inner exception stack trace ---
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at MDriveSync.Core.Services.AliyunDriveApi.DriveInfo(String accessToken)
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at MDriveSync.Core.AliyunJob.AliyunDriveInitInfo()
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at MDriveSync.Core.AliyunJob.<AliyunDriveInitialize>b__76_0()
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at MDriveSync.Core.Services.LocalLock.TryLock(String resource, TimeSpan expirationTime, Action action)
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at MDriveSync.Core.AliyunJob.AliyunDriveInitialize()
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at MDriveSync.Core.AliyunJob.StartJob()
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at MDriveSync.Core.AliyunJob.Maintenance()
Jun 24 14:06:25 coolchill-server MDriveSync.Client.API[79796]:    at MDriveSync.Core.AliyunDriveHostedService.DoWork(Object state)

系统是debian12
image

初始化文件列表异常

[21:24:50 INF] 开始例行检查
[21:24:50 INF] 开始例行检查
[21:24:50 INF] 例行检查完成
[21:24:50 INF] 例行检查完成
[21:25:07 INF] 真实大小 0
[21:25:07 INF] 真实大小 0
[21:25:25 INF] 云盘文件加载完成,用时 48604 ms,总文件数:22160
[21:25:25 ERR] 初始化文件列表异常
System.ArgumentException: An item with the same key has already been added. Key: COOLCHILL-PC/restic_backup/data/69/69776173f6c4c40980205462654ec4a5f3b80b1f43dfbb3b13cb370c52ad957f
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](List`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at MDriveSync.Core.Services.AliyunDriveMounter.AliyunDriveSearchFiles(Int32 limit)
   at MDriveSync.Core.Services.AliyunDriveMounter.AliyunDriveInitFiles()

请问有计划支持2GB以上文件大小的同步嘛?

我在尝试同步一个7GB大小的文件的时候出现了
System.IO.IOException: The file is too long. This operation is currently limited to supporting files less than 2 gigabytes in size.

看起来是ReadAllBytesAsync不支持2GB以上的文件
请问有计划支持2GB以上文件大小的同步嘛?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.