Tengo un servidor de archivos de inicio que ejecuta FreeNAS 8. Hace unos días, utilicé rsync para cargar toda mi biblioteca de iTunes desde Mac para poder cargar mi biblioteca a través de la red en lugar de hacerlo desde una unidad USB lenta. Esto funcionó principalmente, e iTunes funciona mucho mejor ahora, pero me encuentro con problemas para acceder a cualquier canción que contenga caracteres no ASCII (noté el problema al cargar pistas de Queensrÿche). Los archivos aparecerían en el Finder, pero cualquier intento de acceder a ellos los hizo desaparecer hasta que me volví a conectar al servidor.
Después de algunas investigaciones descubrí que esto se debe a que OSX usa un orden de caracteres UTF diferente al de Linux. Los sistemas de archivos OSX usan la Forma de normalización Unicode D (NFD), donde Linux usa la Forma C (NFC). Rsync no convierte estos formularios cuando realiza la copia desde mi Mac al servidor, ahora cuando iTunes intenta acceder a un archivo con un carácter especial a través de la red, los archivos en el servidor tienen la codificación incorrecta y los informes de AFPD no lo hacen ' t existe.
¿Cuál es la mejor manera de abordar este problema? ¿Es posible hacer que rsync realice la conversión unicode mientras carga la biblioteca base al servidor? ¿Puedo configurar afpd para transmitir / recibir nombres de archivo en formato NFD? ¿Existe una solución fácil para cambiar los nombres de archivo en el servidor? Encontré algunas cosas sobre un programa llamado convmv, pero no sé si puedo ejecutarlo en FreeNAS.
Respuestas:
Algo que debería funcionar es la sincronización entre el directorio de origen y el sistema de archivos remoto montado (SMB, NFS, AFP), que rsync solo tratará como un sistema de archivos local.
Sin embargo, no sé qué tan bien funciona esto en la práctica, y tiene que trabajar en torno a diferentes problemas, por ejemplo, el algoritmo de transferencia delta no se usará de forma predeterminada (ya que el origen y el destino son "locales") (tal vez - ¿no funcionará todo el archivo?), debe verificar, por ejemplo, que SMB preserva efectivamente los tiempos de modificación, etc.
fuente
Puede usar la
--iconv
opción de rsync para convertir entre UTF-8 NFC y NFD, al menos si está en una Mac. Hay unutf-8-mac
conjunto de caracteres especial que significa UTF-8 NFD. Entonces, para copiar archivos de su Mac a su NAS, necesitaría ejecutar algo como:Esto convertirá todos los nombres de archivos locales de UTF-8 NFD a UTF-8 NFC en el servidor remoto. El contenido de los archivos no se verá afectado.
fuente
UTF8-MAC
significa NFD; cuando se usa consigoiconv
mismo, proporciona un mecanismo genérico para traducir de ida y vuelta entre NFC y NFD.brew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
rsync: --iconv: unknown option
Actualmente estoy usando
rsync --iconv
así:Copiar archivos del servidor Linux a la máquina OS X
Debe ejecutar este comando desde la máquina OS X :
Copiar archivos de la máquina OS X al servidor Linux
Debe ejecutar este comando desde la máquina OS X :
fuente
No use rsync para copiar los archivos a su NAS. Cuando usa rsync para copiar los archivos, los nombres de los archivos se almacenarán en su NAS en formato UTF NFD (es decir, el formato OSX), pero el servidor Samba que se ejecuta en su NAS solo entiende los nombres de archivos en formato UTF NFC. Use la interfaz CIFS / SMB (Samba) para copiar los archivos y todo estará bien.
fuente
Desde mi experiencia, recomiendo usar SMB en lugar de ssh. Iconv resuelve el problema con la codificación, pero todavía hay problemas con los caracteres permitidos en diferentes sistemas:
Nombre de archivo original en Mac:
Después de copiar por rsync sobre SMB:
Después de copiar por rsync sobre ssh (con hormiga sin bandera iconv):
fuente