You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsync同步MTP挂载Android文件报Operation not supported(95)错误

问题根因

报Operation not supported (95)和权限、安卓设备是否root没有关系,本质是MTP协议自身的功能限制:

  • MTP是面向媒体传输设计的简单协议,不支持类Unix文件系统的常规操作:包括修改文件修改时间戳、设置文件权限、创建临时文件再原子重命名的写入逻辑,刚好和rsync默认的工作逻辑冲突。
  • 你访问的/run/user/1000/gvfs/下的MTP路径是GVFS提供的用户态虚拟文件系统,哪怕加sudo提权也绕不开协议层面的功能缺失。rsync默认的-ra参数中,-a归档模式隐含了保留修改时间、保留权限、临时文件写入等操作,必然触发报错。
解决方案

方案1:调整rsync参数适配MTP挂载(无额外安卓端配置)

直接调整rsync参数,避开所有MTP不支持的操作,不需要在手机上装任何软件:

# 从PC同步到手机示例
rsync -r --checksum --no-perms --no-owner --no-group --no-times --inplace /home/yourname/Obsidian/ /run/user/1000/gvfs/mtp:host=243c3c45/cellular/Obsidian/
# 从手机同步到PC示例
rsync -r --checksum --no-perms --no-owner --no-group --no-times --inplace /run/user/1000/gvfs/mtp:host=243c3c45/cellular/Obsidian/ /home/yourname/Obsidian/

参数说明:

  • -r:仅递归遍历子目录,去掉-a附带的所有属性保留逻辑
  • --checksum:通过文件内容校验和判断版本新旧,替代默认的修改时间比对逻辑,精准识别文件更新;如果追求速度可以换成--size-only,仅当文件大小不一致时才同步
  • --no-perms --no-owner --no-group --no-times:显式关闭所有属性同步操作,完全不尝试修改MTP不支持的文件元数据
  • --inplace:直接写入目标文件,不生成.xxx.随机后缀的临时文件,解决mkstemp失败的报错

双向同步注意:不要直接连续执行两次单向rsync,需要先比对两端同名文件的校验和,确认哪端是更新版本后再执行单方向覆盖,避免旧文件覆盖新内容。

方案2:基于ADB的同步方案(稳定性优于MTP)

MTP传输大量小文件时容易出现断连、文件属性读取异常的问题,用ADB传输可以完全绕过GVFS的MTP挂载逻辑:

  • 在安卓端开启系统自带的「USB调试」,PC端安装adb工具,连接后执行adb devices确认设备被正常识别
  • 使用adb自带的sync功能,或者基于adb实现的同步工具直接双向同步Obsidian目录,不需要在安卓端安装额外应用,未root设备完全可用,不会触发操作不支持的报错。

方案3:Termux SSH通道同步(支持原生rsync全特性)

如果需要保留基于文件修改时间的比对逻辑,可以在安卓端安装Termux配置SSH环境:

  • 安卓端安装Termux,执行pkg install openssh rsync,给Termux授予存储访问权限后启动sshd服务
  • PC端通过USB做端口转发连接Termux的SSH服务,直接用标准rsync命令同步目录即可。此时rsync操作的是Termux有权限访问的本地存储,完全支持时间戳修改、临时文件写入等所有操作,同步可靠性和速度都远高于MTP挂载。

内容的提问来源于stack exchange,提问作者macbeto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:57:15