У меня есть домашний файловый сервер с FreeNAS 8. Несколько дней назад я использовал rsync для загрузки всей своей библиотеки iTunes с Mac, чтобы я мог загрузить свою библиотеку по сети, а не с медленного USB-накопителя. В основном это работало, и iTunes теперь работает намного лучше, но у меня возникают проблемы с доступом к любым песням, в которых есть не-ascii символы (я впервые заметил проблему при загрузке треков Queensrÿche). Файлы будут отображаться в Finder, но любая попытка доступа к ним приводила к исчезновению, пока я не подключился к серверу.
После некоторых исследований я обнаружил, что это связано с тем, что OSX использует другой порядок символов UTF по сравнению с Linux. Файловые системы OSX используют форму нормализации Unicode D (NFD), где linux использует форму C (NFC). Rsync не преобразует эти формы, когда выполняет копирование с моего компьютера Mac на сервер, теперь, когда iTunes пытается получить доступ к файлу со специальным символом по сети, файлы на сервере имеют неправильную кодировку, и отчеты afpd они не передают. не существует.
Как лучше всего решить эту проблему? Можно ли заставить rsync выполнять преобразование в юникод при загрузке базовой библиотеки на сервер? Могу ли я настроить afpd для передачи / получения имен файлов в формате NFD? Есть ли простое решение для изменения имен файлов на сервере? Я нашел кое-что о программе с именем convmv, но я не знаю, смогу ли я запустить ее на FreeNAS.
Ответы:
Что-то, что должно работать, это rsyncing между исходным каталогом и смонтированной удаленной файловой системой (SMB, NFS, AFP), который rsync будет рассматривать как локальную файловую систему.
Тем не менее, я не знаю, насколько хорошо это работает на практике, и вам приходится работать с различными проблемами, например, алгоритм дельта-передачи не будет использоваться по умолчанию (поскольку источник и пункт назначения являются «локальными») (возможно, - no-whole-file будет работать?), вы должны проверить, например, что SMB эффективно сохраняет время модификации и т. д.
источник
Вы можете использовать
--iconv
опцию rsync для конвертации между UTF-8 NFC и NFD, по крайней мере, если вы на Mac. Существует специальныйutf-8-mac
набор символов, который обозначает UTF-8 NFD. Поэтому, чтобы скопировать файлы с вашего Mac на NAS, вам нужно запустить что-то вроде:Это преобразует все локальные имена файлов из UTF-8 NFD в UTF-8 NFC на удаленном сервере. Содержание файлов не будет затронуто.
источник
UTF8-MAC
стоит за НФД; при использовании сiconv
самим собой это обеспечивает общий механизм для перевода туда и обратно между NFC и NFD.brew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
rsync: --iconv: unknown option
В настоящее время я использую
rsync --iconv
так:Копирование файлов с сервера Linux на компьютер с OS X
Вы должны выполнить эту команду с машины OS X :
Копирование файлов с машины OS X на сервер Linux
Вы должны выполнить эту команду с машины OS X :
источник
Не используйте rsync для копирования файлов на ваш NAS. Когда вы используете rsync для копирования файлов, имена файлов будут храниться на вашем NAS в формате UTF NFD (то есть в формате OSX), но сервер Samba, работающий на вашем NAS, распознает только имена файлов в формате UTF NFC. Используйте интерфейс CIFS / SMB (Samba) для копирования файлов, и все будет хорошо.
источник
Из моего опыта я рекомендую использовать SMB вместо SSH. Iconv решает проблему с кодированием, но все еще существует проблема с разрешенными символами в различных системах:
Исходное имя файла на Mac:
После копирования rsync через SMB:
После копирования с помощью rsync через ssh (с ant без флага iconv):
источник