向CIFS/NFS挂载的TrueNAS Core 13 NAS执行RSYNC同步时文件名异常变更的问题咨询
你好,我来帮你梳理这个文件名异常变更的问题,咱们一步步来分析和解决:
问题根源分析
你看到的PKOF8Y~2.M4V这种格式是DOS/Windows兼容的8.3短文件名,出现这种情况主要是因为网络共享协议(CIFS/NFS)的配置或者客户端挂载参数不兼容,导致包含特殊字符(比如你例子里的冒号:)的文件名被自动转义成了短格式。而本地ext4挂载没有这个问题,是因为ext4原生支持几乎所有特殊字符,且不需要经过网络协议的转换处理。
针对CIFS挂载的解决步骤
1. 调整TrueNAS的CIFS共享配置
登录TrueNAS Core的Web管理界面,找到对应的CIFS共享并编辑:
- 查找是否有**“启用8.3文件名”**的选项,如果是开启状态,直接关闭它(这个选项是为了兼容老旧Windows系统,会自动生成短文件名);
- 确认共享的字符编码设置为
UTF-8,确保字符集匹配。
2. 优化客户端的CIFS挂载参数
修改你的Kubuntu系统里的挂载配置(比如/etc/fstab里的对应行),使用更兼容的CIFS版本和参数,示例如下:
//你的TrueNASIP/共享名 /本地挂载点 cifs username=你的用户名,password=你的密码,iocharset=utf8,vers=3.1.1,nobrl,file_mode=0755,dir_mode=0755 0 0
重点说明:
vers=3.1.1:使用较新的CIFS协议版本,对特殊字符的支持更好;iocharset=utf8:确保字符集编码一致(你之前试过这个,但搭配新协议版本才会生效);nobrl:避免字节范围锁的问题,减少协议层面的兼容性冲突;file_mode和dir_mode:确保挂载后的文件/目录权限正常,避免因权限问题触发文件名转义。
修改后执行sudo mount -a重新挂载,再测试rsync同步。
针对NFS挂载的解决步骤
1. 调整TrueNAS的NFS共享配置
登录TrueNAS WebUI,找到对应的NFS共享并编辑:
- 将NFS版本设置为至少
4.0,优先选择4.2(NFSv4+对UTF-8和特殊字符的支持远好于旧版本的NFSv3); - 确认字符集设置为
UTF-8。
2. 优化客户端的NFS挂载参数
修改/etc/fstab里的NFS挂载行,使用新的NFS版本,示例如下:
你的TrueNASIP:/mnt/存储池/共享名 /本地挂载点 nfs nfsvers=4.2,rsize=1048576,wsize=1048576,hard,timeo=600 0 0
其中nfsvers=4.2是核心参数,确保协议版本支持特殊字符的正确传输。同样修改后执行sudo mount -a重新挂载测试。
额外的rsync参数建议
在执行rsync时,可以加上--iconv=utf-8,utf-8参数,强制指定字符集转换(虽然如果挂载配置正确的话可能不需要,但能进一步避免字符编码问题),示例命令:
rsync -av --iconv=utf-8,utf-8 /源目录/ /NAS挂载目录/
-a是归档模式,会保留文件的权限、属性等信息,也是rsync同步时常用的参数。
为什么ext4挂载没有问题
ext4文件系统本身对文件名的限制极少,支持几乎所有Unicode字符,而且是本地磁盘挂载,不需要经过网络协议的转换和处理,所以不会触发短文件名转义的逻辑,文件名自然保持原样。
备注:内容来源于stack exchange,提问作者Lost_Ones




