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

rsync执行mkstemp失败(错误22)且卡顿,如何解决?

解决rsync同步ext4到NTFS时的文件创建错误问题

问题原因

报错的核心是NTFS文件系统不允许文件名包含某些特殊字符,而源ext4系统支持这些字符。具体来看,出错的文件名里有冒号:(比如17:55:34时间戳部分),NTFS原生不允许这类字符存在于文件名中,导致rsync调用mkstemp创建临时文件时被系统拒绝,抛出Invalid argument错误。

为什么rsync没有跳过问题文件?

rsync默认不会自动跳过引发文件系统错误的文件,它会报告错误,但理论上应该继续处理其他文件。如果出现卡顿,可能是错误触发了重试逻辑,或者--info=progress2的进度输出让你误以为进程停滞(实际可能在处理其他文件)。若要强制rsync跳过错误文件并继续同步,需要显式添加参数。

解决方案

1. 排除垃圾目录(推荐)

.local/share/Trash是系统的垃圾回收目录,里面的文件都是已删除的内容,无需备份。直接在rsync命令中添加排除规则:

sudo rsync -ra --stats --human-readable \
--no-owner --no-group \
--info=progress2 \
--log-file=/home/myuser/rsync-log.log \
--exclude='.local/share/Trash' \
~ /media/myuser/1234ABCD/

2. 跳过错误文件

如果需要保留垃圾目录但忽略出错的文件,添加--ignore-errors参数让rsync遇到错误时继续执行:

sudo rsync -ra --stats --human-readable \
--no-owner --no-group \
--info=progress2 \
--log-file=/home/myuser/rsync-log.log \
--ignore-errors \
~ /media/myuser/1234ABCD/

3. 转换非法文件名(进阶)

若要彻底解决文件名兼容性问题,可以使用rsync的--iconv参数将ext4的UTF-8文件名转换为NTFS兼容格式,不过需要搭配字符映射表(比如utf-8,cp1252),但这种方式可能会导致文件名变更,需谨慎使用。

额外注意事项

由于你需要NTFS兼容Windows,需牢记NTFS与ext4的差异:

  • NTFS不支持Unix-style的所有者/组权限,所以--no-owner --no-group参数是正确的;
  • NTFS对文件名长度、特殊字符有严格限制,同步时尽量避免包含:*?"<>|等字符的文件;
  • NTFS的时间戳精度与ext4不同,可添加--modify-window=1参数来处理时间戳匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:16:17