errores de copyfile y archivos de puntos usando rsync

Leí la pregunta de @SwisherSweet sobre la manera más rápida y segura de copiar datos masivos de una unidad externa a otra , junto con la excelente respuesta de @GrahamMiln .

Estoy en una situación similar en la que quiero copiar datos de un HD externo conectado Firewire 800 a Drobo 5N, que está conectado al enrutador al que está conectado el iMac: ExternalHd — iMac — Router —
Drobo5N

Ejecuté el comando ( sudo rsync -vaE --progress /Volumes/SourceName /Volumes/DestinationName) y funciona en parte, pero en ocasiones aparece el siguiente error (inserté algunos saltos de línea para una mejor legibilidad):

Boxx:~ Alex$ sudo rsync -vaE --progress /Volumes/ExternalHd/path/to/MyDirectory /Volumes/Drobo5N/path/to/

building file list ... 
6 files to consider

._MyDirectory
        1104 100%    0.00kB/s    0:00:00 (xfer#1, to-check=5/6)

MyDirectory/._file1.dmg
        1430 100%   34.06kB/s    0:00:00 (xfer#2, to-check=3/6)

MyDirectory/._file2.dmg
        1430 100%   27.38kB/s    0:00:00 (xfer#3, to-check=2/6)

copyfile(.._MyDirectory.drJHX3,./MyDirectory, COPYFILE_UNPACK) failed:45
copyfile(MyDirectory/.._file1.dmg.PQTcsU,MyDirectory/file1.dmg, COPYFILE_UNPACK) failed:45
rsync: rename "/Volumes/Drobo5N/path/to/MyDirectory/.._file1.dmg.PQTcsU" -> "MyDirectory/._file1.dmg": No such file or directory (2)
copyfile(MyDirectory/.._file2.dmg.gx7VTP,MyDirectory/file2.dmg, COPYFILE_UNPACK) failed:45
rsync: rename "/Volumes/Drobo5N/path/to/MyDirectory/.._file2.dmg.gx7VTP" -> "MyDirectory/._file2.dmg": No such file or directory (2)

sent 4369 bytes  received 86 bytes  8910.00 bytes/sec
total size is 48176733  speedup is 10814.08

rsync error: some files could not be transferred (code 23) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-47/rsync/main.c(992) [sender=2.6.9]

Algunas preguntas:

  1. ¿ Por qué recibo estos copyfile(...) failed:45errores?
    Encontré el código fuente de copyfile.c , pero no pude averiguar qué desencadena el error. Allí dice sobre COPYFILE_UNPACK:

    COPYFILE_UNPACK es la anulación de COPYFILE_PACK, obviamente. El objetivo allí es tomar un archivo Apple Double y convertirlo en un archivo normal (con bifurcación de datos, bifurcación de recursos, modos, atributos extendidos, ACL, etc.).

    Mi mensaje de error dice algo sobre COPYFILE_UNPACK, pero ¿qué significa y cómo puedo solucionar el error?

  2. ¿ Por qué el rsynccomando crea el archivo de puntos como ._file1.dmg?
    Cuando rsyncse completa con éxito, sigo viendo el archivo de puntos en el directorio de destino sincronizado (/Volumes/Drobo5N/path/to/) además del archivo sincronizado real. ¿Porqué es eso?
  3. ¿ Por qué rsynccrea extensiones como .drJHX3? ¿Es ese un nombre temporal?

PD: Lo siento si esto se ha preguntado en otro lugar. Busqué este error usando rsync, pero no pude encontrar ninguno.

El rsync de Apple es antiguo, por lo que buscaría uno más actualizado, especialmente con problemas de metadatos. También de qué formato son las unidades
¿Está diciendo que los errores del archivo de copia se deben a problemas de metadatos? ¿Con "formato" se refiere al sistema de archivos? Tendré que buscarlo cuando vuelva a mi escritorio... ¿Debería sorprenderme si el sistema de archivos es HFS+ porque la bifurcación de recursos/metadatos se almacena como un archivo separado?
@Mark ¿Recomendaría actualizar a través de MacPorts ?
@ graham-miln Dado que diste la respuesta ganadora para la pregunta que provocó mi pregunta aquí, me preguntaba si tienes algún aporte, si quieres.
El error 45 se define en /usr/include/sys/errno.h-#define ENOTSUP 45 /* Operation not supported */
Yo también veo esto mucho. Creo que tiene algo que ver con la transferencia de datos de HFS+ a un sistema de archivos que no sea HFS+, que no es compatible con las funciones del sistema de archivos macOS.

Respuestas (2)

Estaba usando la opción -E para copiar archivos de alias en macOS (como sin la opción -E, los archivos de alias se copian como archivos ejecutables). Las Opciones -E funcionaron para copiar los archivos Alias, pero causaron el mismo error que aquí en otros archivos ( COPYFILE_UNPACK failed:45). Por lo tanto, el error probablemente se deba al uso de la opción -E en macOS.

Afortunadamente, usar Homebrew y ejecutar brew install rsyncpara instalar una versión más reciente de rsyncsolucionó el problema.

Fuente: https://bayton.org/2018/07/how-to-update-rsync-on-mac-os-high-sierra/

Copyfile es responsable de dividir un archivo HFS+ en dos archivos. La bifurcación de datos filey una bifurcación de metadatos ._file. Eso sucede cuando usas la -Eopción con el Apple suministrado rsync. No tengo idea de por qué está fallando. rsynccrea archivos temporales y luego los mueve a su lugar.