我有一个运行FreeNAS 8的家庭文件服务器。前几天我使用rsync从Mac上传我的整个iTunes资料库,这样我就可以通过networking加载我的资料库,而不是慢速的USB驱动器。 这大部分工作,iTunes现在运行得更好,但我遇到的问题访问任何非ASCII字符的歌曲(我第一次注意到加载Queensrÿche轨道时的问题)。 这些文件将显示在Finder中,但是任何尝试访问它们都会使它们消失,直到重新连接到服务器。
经过一番研究,我发现这是因为OSX使用了Linux中不同的UTF字符顺序。 OSX文件系统使用Unicode规范化表单D(NFD),其中linux使用表单C(NFC)。 当Rsync执行从我的mac到服务器的副本时,它不会转换这些表单,现在当iTunes试图通过networking访问具有特殊字符的文件时,服务器上的文件具有错误的编码和afpd报告,不存在。
解决这个问题的最好方法是什么? 是否有可能使rsync执行unicode转换,而上传基础库到服务器? 我可以configurationafpd以NFD格式发送/接收文件名吗? 有一个简单的解决scheme来更改服务器上的文件名? 我发现了一些关于名为convmv的程序的东西,但我不知道是否可以在FreeNAS上运行。
一些应该工作的是在源目录和挂载的远程文件系统 (SMB,NFS,AFP)之间进行rsyncing,rsync将把它视为本地文件系统。
但是,我不知道这在实际中是如何工作的,而且你必须解决不同的问题,例如Delta传输algorithm将不会被默认使用(因为源和目标是“本地”)(也许 – 没有整个文件会工作吗?),你必须检查,例如,SMB有效地保留修改时间等。
您可以使用rsync的--iconv
选项在UTF-8 NFC和NFD之间进行转换,至less在Mac上是如此。 有一个特殊的UTF-8 utf-8-mac
字符集,代表UTF-8 NFD。 因此,要将文件从Mac复制到NAS,您需要运行以下操作:
rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
这将在远程服务器上将所有本地文件名从UTF-8 NFD转换为UTF-8 NFC。 文件的内容不会受到影响。
目前我正在使用rsync --iconv
像这样:
你应该从OS X机器执行这个命令:
rsync -a --delete --iconv=UTF-8-MAC,UTF-8 '[email protected]:/home/username/path/on/server/' /Users/username/path/on/machine/
你应该从OS X机器执行这个命令:
rsync -a --delete --iconv=UTF-8-MAC,UTF-8 /Users/username/path/on/machine/ '[email protected]:/home/username/path/on/server/'
不要使用rsync将文件复制到您的NAS。 当您使用rsync复制文件时,文件名将以UTF NFD格式(即OSX格式)存储在您的NAS上,但在您的NAS上运行的Samba服务器只能理解UTF NFC格式文件名。 使用CIFS / SMB(Samba)接口复制文件,一切都会好的。