-
-
Notifications
You must be signed in to change notification settings - Fork 6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Webdav 上传到本地遗失元数据(如修改时间) #4242
Comments
Thanks for opening your first issue here! Be sure to follow the issue template! |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
Hello @, this issue was closed due to inactive more than 52 days. You can reopen or recreate it if you think it should continue. Thank you for your contributions again. |
已经被解决: 4938#issuecomment-1694687680 本人使用正常 |
@potoo0 您好,麻烦问下这个是怎么解决的? 我目前使用最新版本,仍存在这个问题。使用本地挂载 + 复制到阿里云盘,还是出现 文件修改日期 改为 同步日期 的情况。 |
其他的我不清楚,我的是使用 rclone 做客户端向 alist 同步文件,而 rclone 多对原标准的 webdav 做了扩展:使用 |
讲的很详细,感谢!我一会儿搭建 RClone 做同步试试。 另外,您使用的是哪个驱动呢?我用的是 阿里云盘 Open。 @potoo0 |
我也遇到这个问题。 |
我也遇到了上面的问题,每一次备份都是从头开始备份。 |
rclone 的 vendor 要设置正确,不然不会处理 OC-Time 的。 rclone 支持的 OC-Time 的 vendor (源码 https://github.com/rclone/rclone/blob/783599114760d09684bc5ed44f4209813d127484/backend/webdav/webdav.go#L581):
配合 alist 的话只能使用 |
看到上面很多人有问题,我这里又测试了一遍,还是没有发现问题。 写下我的测试过程: rclone.conf:
测试目录结构:
脚本: RC_REMOTE=alist:local/z-tmp/test_bisync
# 复制命令 cmd-copy-to_remote
alias cmd-copy-to_remote='rclone copy . $RC_REMOTE -vvv'
# 复制命令 cmd-copy-from_remote
alias cmd-copy-from_remote='rclone copy $RC_REMOTE . -vvv'
# 同步命令 cmd-sync
alias cmd-sync='rclone bisync . $RC_REMOTE -vvv'
# 查看远程文件命令 cmd-cat
alias cmd-cat='rclone lsl $RC_REMOTE ; echo "---" ; rclone cat "$RC_REMOTE/ws1.txt" ; echo "---" ; rclone cat "$RC_REMOTE/ws2.txt"'
# 机器1: wsl, 修改文件命令 cmd-edit-workspace1
alias cmd-edit-ws1='echo "ws1 $(date -Iseconds)" | tee -a ws1.txt'
# 机器2: vm, 修改文件命令 cmd-edit-workspace2
alias cmd-edit-ws2='echo "ws2 $(date -Iseconds)" | tee -a ws2.txt'
测试流程:
wsl 测试输出的关键日志:
vm 测试输出的关键日志:
完整输出附件 |
@jiongxuan @cnjackchen @huoxingdawang 试下我上面的贴出来的测试过程 |
我大概知道是为什么了,我用truenas scale备份,但是这个truenas scale不大愿意等alist上传,然后我的文件都比较大,truenas scale的rclone传给alist以后没等alist上传到网盘truenas scale就觉的超时了,然后取消掉这个文件的上传再发一遍新的,然后他就进入了一种死循环不停重发同一个文件,造成了一种没有元数据不停上传同一个文件的假象。。。。。 具体的解决办法是在truenas scale里用这条指令让rclone的超时时间变长
|
@potoo0 |
选择正确的工具及配置就没问题,会有人愿意追根究底查明适用场景,而不应该用简单一句话否定。 |
这是个事关建设性的问题。如果整个系统各个环节都在社区掌控中,或者环节的掌控者都为自组织、自协商、自演化预留了接口,并愿意长期维护这些接口,那么整个系统将朝着健康的方向发展。但现在是云端厂商单方面地掐死了这种可能性,或者虽然保留了可能性却不稳定,那么这就给整个系统的演化引入了负建设性。这些负面性不是社区的过错,社区不为此负责,不为其善后,直接切割、剜除才是正道。 |
测试的很详细,谢谢。不过我的 vendor 用的是 rclone,在 阿里云 上 仍然复现。 话说,您测试的网盘是哪个?如果是 OneDrive 是没问题的,我也试了,但 阿里云 目前试了不行。 您有空的话,可以用上述方法在 阿里云、百度云 再验证下 @potoo0 |
@mo-han 赞同。像这种“云端厂商不可控”的地方,做好标注,避免后面同学踩坑就好。这也是我当时粘贴“客服截图”的目的。 不过作者也的确做了实验验证,值得肯定,唯一就是再用相同环境、相同设备,再验证下 阿里云、百度云 的情况,做个 Double Check 就好 |
简称和协定:
我之前说的两种同步完整是这样:
而 XXX=onedrive,我今天(20240418)测试发现其实是不行的,始终会更新所有文件的 modtime,alist 源码 onedrive.Put upSmall/upBig 没有像 rclone setModTime 的逻辑。而 rclone 不支持只比较 checkSum 而忽略时间,源码 operations.NeedTransfer 能看到一旦忽略时间后就立即返回 true,而忽略了后面 checkSum 一堆逻辑。 总结: 已知的 XXX存储 情况:
其他的先根据源码给个初步结论(下面 OK 只是说源码设置了时间,但网盘存不存不清楚,后面几天我会陆续补充验证):
update via releases v3.34.0 目前状态(v3.34.0):
|
百度云的我昨天晚上发现了个 bug,提交已经代码,到时候你测测看,我本地验证没有修改时间 问题了。 至于 阿里云的目前无解: 文件列表接口问题 |
我要是早看到你这个专业回答也不至于踩这么多坑了。原来阿里云盘根本就不支持将修改时间显示为源文件的修改时间,而是强制设置为上传时间。我以前以为是webdav协议的问题,现在才知道是阿里的问题。奇怪的是,即使我设置了--size only,从od同步到阿里云盘加密盘还是会遇到重复上传的问题。 |
|
不是的,我那里的文件创建时设置了,只不过过程评论放在了《文件上传》页面,没有放在《获取文件列表》页面,我刚补充评论链接了。 另外你怎么进开发群的?我四月底提交了申请和意见,但现在没有任何批准或回复。 为方便查阅这里也把评论内容复制过来。 文件上传
测试脚本: token='xx'
create_data='{
"drive_id": "xx",
"parent_file_id": "xx",
"name": "ws1.txt",
"type": "file",
"check_name_mode": "ignore",
"local_modified_at": "2024-04-20T12:00:01.000Z",
"local_created_at": "2024-04-20T12:10:02.000Z"
}'
# 1. create
create_resp=$(curl --location --request POST \
'https://open.aliyundrive.com/adrive/v1.0/openFile/create' \
--header "Authorization: Bearer $token" \
--header 'Content-Type: application/json' \
--data-raw "$create_data")
echo "create_resp=$create_resp"
# 2. get upload url
# get_upload_req=$(jq -n \
# --arg drive_id $(jq -r '.drive_id' <<< $create_data) \
# --arg file_id $(jq -r '.file_id' <<< $create_resp) \
# --arg upload_id $(jq -r '.upload_id' <<< $create_resp) \
# --argjson part_info_list '[{"part_number": 1}]' \
# '$ARGS.named')
# echo "get_upload_req=$get_upload_req"
# get_upload_resp=$(curl --location --request POST \
# 'https://open.aliyundrive.com/adrive/v1.0/openFile/getUploadUrl' \
# --header "Authorization: Bearer $token" \
# --header 'Content-Type: application/json' \
# --data-raw "$get_upload_req")
# echo "get_upload_resp=$get_upload_resp"
# 3. upload
# upload_url=$(jq -r '.part_info_list[0].upload_url' <<< $get_upload_resp)
# upload_url=$(jq -r '.part_info_list[0].upload_url' <<< $create_resp)
# echo "upload_url=$upload_url"
# curl --location --request PUT \
# "$upload_url" \
# --data-binary /tmp/test_modtime.txt
# 4. complete
complete_req=$(jq -n \
--arg drive_id $(jq -r '.drive_id' <<< $create_data) \
--arg file_id $(jq -r '.file_id' <<< $create_resp) \
--arg upload_id $(jq -r '.upload_id' <<< $create_resp) \
'$ARGS.named')
curl --location --request POST \
'https://open.aliyundrive.com/adrive/v1.0/openFile/complete' \
--header "Authorization: Bearer $token" \
--header 'Content-Type: application/json' \
--data-raw "$complete_req" 获取文件列表
测试脚本: token='xx'
list_req='{
"drive_id": "xx",
"parent_file_id": "xx"
}'
list_resq=$(curl --location --request POST \
'https://open.aliyundrive.com/adrive/v1.0/openFile/list' \
--header "Authorization: Bearer $token" \
--header 'Content-Type: application/json' \
--data-raw "$list_req")
jq '.items[] | {name,file_id,created_at,updated_at,local_created_at,local_modified_at}' <<< $list_resq 输出: {
"name": "ws1.txt",
"file_id": "6623bbd678bf7176300543669e7395d3ba0d93cf",
"created_at": "2024-04-20T12:57:58.870Z",
"updated_at": "2024-04-20T12:57:59.179Z",
"local_created_at": null,
"local_modified_at": null
}
{
"name": "ws2.txt",
"file_id": "6623b94f9ff3add28a4a40fa9bfe8d6b7d688814",
"created_at": "2024-04-20T12:47:11.186Z",
"updated_at": "2024-04-20T12:47:11.570Z",
"local_created_at": null,
"local_modified_at": null
} |
不好意思最近一直特别忙,刚看到。 @potoo0 @ypq123456789 麻烦问下,这个问题现在解决了吗?如果阿里云仍有问题的话,我想办法不走客服渠道,反馈给他们试试。
|
@jiongxuan |
@potoo0 好的。“没人做”是指 他们没人回复?还是他们已确认问题,但没有修复?还是说已经有可以 Alist 适配的办法,但是您没有时间搞?
|
@jiongxuan 群里有人在没有看测试脚本的情况下回复过一次,以为我没有传 这个问题必须网盘方提供这个时间的读写,阿里云盘目前情况是只能写没有读 (他们 api 有这个字段但是没有值),alist 不可能绕过阿里云盘来修复的。 |
@potoo0 好的。我上个月已和云盘同学反馈,他们还是非常重视的。 已收到官方回复,会在近期上线。届时辛苦再测试看下效果。 :) @potoo0 @ypq123456789 @mo-han @huoxingdawang 请知晓
|
@jiongxuan 有具体上线时间吗?我好及时在 alist 对接 |
好像大部分普通网盘都不支持保留文件修改时间,至少我用过的国内多家网盘都不支持。只有阿里云oss,aws s3这些专业的对象存储支持。 |
我在百度网盘挂载中使用KopiaUI,还多套了一层crypt。目前存储量1TB了,用着还可以。它的切片存储目录有两级,每一级都是三位名称,每一位是16进制字符。最后同目录下的文件数量极少,往往只有一两个,但目录数量比较多,目前每一级目录数量都有700多,不知道会不会超过限制。 |
对,Kopia可以的,700多文件夹应该没问题。restic是256个文件夹,只有一层,每个分片文件最大是128MB,假如每个文件夹放1000个文件,最大可以存储32TB,足够了。 |
@potoo0 和相关负责人沟通确认,已上线!新增 local_created_at 和 local_modified_at 可参考文档:https://www.yuque.com/aliyundrive/zpfszx/ezlzok
|
@jiongxuan 好的,我明天看看 |
@jiongxuan api 测试:
|
@potoo0 好的。我跟官方同学再反馈下。他们意思是 file/get file/list 都会加,目前正在 Check
|
Please make sure of the following things
alist
and not something else(such asDependencies
orOperational
).Alist Version / Alist 版本
v3.16.0
Driver used / 使用的存储驱动
local
Describe the bug / 问题描述
例如使用 rclone,复制到 alist 的本地挂载。原始文件修改时间是 2023-04-06 11:22:11,上传后时间变成了当前时间(2023-04-26 12:30:05)
# ls -hl src rclone copy src alist:/local/temp -P -vv
Reproduction / 复现链接
noop
Logs / 日志
No response
The text was updated successfully, but these errors were encountered: