Rsync not copying some files with extended attributes
I am attempting to rsync from a network mounted volume to my Desktop. However some but not alll of the files are not copying because of an rsync error. I am using rsync 3.1.1 from Brew. I'm using this command:
rsync -aXv /Volumes/Scotts\ Stuff/Backgrounds ~/Desktop/Temp
However, I receive this error for some of the files:
get_xattr_data: lgetxattr(""/Volumes/Scotts Stuff/Backgrounds/chalkboard-black.jpg"","com.apple.ResourceFork",88644) returned 65536
Any ideas? Some files with extended attributes copy just fine but some receive the error. If I leave off the "X" option then rsync works but of course the extended attributes are not preserved.
Solution 1:
The problem I reproduced on many versions of MacOS X (Mountain Lion, Mavericks, Yosemite, El Capitan) which are using a much too old version
of rsync
(2.6.9) and with more recent versions built with Macports (3.x) is solved with version 3.1.2.
Standard MacOS X rsync 2.6.9 → failure
••On_my_Mac••% /usr/bin/rsync -avE example example2
building file list ... done
._example
example/color-profile-1
example/._color-profile-1
example/index.xml.gz
example/Contents/
rsync: recv_generator: mkdir "/Users/Shared/tmp/example2/example/Contents" failed: Permission denied (13)
*** Skipping everything below this failed directory ***
example/QuickLook/
rsync: recv_generator: mkdir "/Users/Shared/tmp/example2/example/QuickLook" failed: Permission denied (13)
*** Skipping everything below this failed directory ***
rsync: mkstemp "/Users/Shared/tmp/example2/example/.color-profile-1.zFdjjF" failed: Permission denied (13)
rsync: mkstemp "/Users/Shared/tmp/example2/example/.._color-profile-1.ySmazZ" failed: Permission denied (13)
rsync: mkstemp "/Users/Shared/tmp/example2/example/.index.xml.gz.zB0WUl" failed: Permission denied (13)
copyfile(/dev/null, example/Contents, COPYFILE_METADATA) failed:2
copyfile(/dev/null, example/QuickLook, COPYFILE_METADATA) failed:13
sent 157793 bytes received 120 bytes 315826.00 bytes/sec
total size is 461293 speedup is 2.92
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-45/rsync/main.c(992) [sender=2.6.9]
••On_my_Mac••%
Built rsync 3.1.2 → success
••On_my_Mac••% type rsync
rsync is /opt/local/bin/rsync
••On_my_Mac••% rsync --version
rsync version 3.1.2 protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes, no prealloc, file-flags,
HFS-compression
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
••On_my_Mac••%
••On_my_Mac••% /usr/bin/sudo rm -rf example2
••On_my_Mac••% /opt/local/bin/rsync -avAX --fake-super example example2
sending incremental file list
created directory example2
example/
example/color-profile-1
example/index.xml.gz
example/Contents/
example/Contents/PkgInfo
example/QuickLook/
example/QuickLook/Preview.pdf
example/QuickLook/Thumbnail.jpg
sent 462,152 bytes received 167 bytes 924,638.00 bytes/sec
total size is 461,293 speedup is 1.00
••On_my_Mac••%
2 key details to note:
- the
-E
option changed to-AX
(ACL & extended attributes) - the use of
--fake-super
to be able to copy file inside read only directories
How to use it on different Macs
If you want to make an rsync on a remote Mac, you will have to explictly call the built rsync
on the remote Mac with the --rsync-command
option:
/opt/local/bin/rsync -avAX --fake-super --rsync-command=/opt/local/bin/rsync example remote_MAC:/tmp/example2