Paul Ortman
2007-Oct-30 22:48 UTC
Rsync 3.0.0pre4 errors with ACLs and Xattrs between OSX and Linux
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 It's my understanding that as of 3.0 rsync supports OS X ACLs and extended attributes, and that it should be possible to backup a tree from an OS X system that contains files and folders with ACLs and extended attributes to a Linux host filesystem that has both "user_xattrs" and "acl" enabled on the destination file system. I've attempted to set up a test environment for exactly that purpose, but I'm running into various "protocol" errors. Client: OS X "Leopard" 10.5 rsync 3.0.0pre4 compiled from source, version gives: rsync version 3.0.0pre4 protocol version 30.PR12 Capabilities: 64-bit files, 32-bit inums, 32-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, ACLs, xattrs, iconv Server: Ubuntu Linux "Gutsy Gibbon" 7.10 rsync 3.0.0pre4 compiled from source, version gives: rsync version 3.0.0pre4 protocol version 30.PR12 Capabilities: 64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, ACLs, xattrs, iconv target filesystem = /tmp/xacl /tmp/xacl_fs on /tmp/xacl type ext3 (rw,loop=/dev/loop0,user_xattr,acl) Tests: On server run: sudo ./rsync --daemon --config=./rsyncd.conf --no-detach -v Server config file: pid file = /var/run/rsyncd.pid [test-tmp] path = /tmp/xacl/ read only = no use chroot = yes uid = 0 gid = 0 On client run: sudo rsync -avHAX ~manager/RSYNC_TEST/ server::test-tmp/ Results in this error msg on client: sending incremental file list recv_acl_access: value out of range: 7d3001 rsync error: error in rsync protocol data stream (code 12) at acls.c(658) [receiver=3.0.0pre4] rsync: read error: Connection reset by peer (54) rsync error: error in rsync protocol data stream (code 12) at io.c(762) [sender=3.0.0pre4] No data is ever transfered to the server. Now, without the acls, we get a bit further. On the client run: sudo rsync -avHX ~manager/RSYNC_TEST/ server::test-tmp/ Results in this error msg on client: sending incremental file list created directory /RSYNC ./ .DS_Store file_with_ACLs file_with_resource_fork file_with_xattrs file_with_xattrs copy dir_with_ACLS/ macosx_metadata_test/ macosx_metadata_test/catty_with_no_resource.jpg macosx_metadata_test/catty_with_resource.jpg macosx_metadata_test/readme.txt rsync: rsync_xal_set: lsetxattr(".file_with_xattrs.EGbmPN","user.com.apple.ResourceFork") failed: Argument list too long (7) rsync: rsync_xal_set: lsetxattr(".file_with_xattrs copy.Tnlkcp","user.com.apple.ResourceFork") failed: Argument list too long (7) rsync: rsync_xal_set: lsetxattr("macosx_metadata_test/.catty_with_resource.jpg.ZkxEYB","user.com.apple.ResourceFork") failed: Argument list too long (7) sent 675079 bytes received 187 bytes 1350532.00 bytes/sec total size is 134108 speedup is 0.20 rsync error: some files could not be transferred (code 23) at main.c(1053) [sender=3.0.0pre4] The files seem to be sent just fine, but I can't tell that the xattrs have been transfered at all. The test files as they appear on OS X are available as a xar archive at: http://www.goshen.edu/~portman/OSX/rsync_test.xar Is this a bug, or isn't this supposed to work? Thanks for all your help in advance. - -- Paul Ortman PGP Key: 55602C81 - -- -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFHJ7M8fw8KGlVgLIERAsWrAJwPJQ4voHhp1pPBQbXS5p+jRt6UQgCfd1YB jh509+/+O8CsdOipNLzY64E=YVbY -----END PGP SIGNATURE-----
Wayne Davison
2007-Oct-31 00:46 UTC
Rsync 3.0.0pre4 errors with ACLs and Xattrs between OSX and Linux
On Tue, Oct 30, 2007 at 06:42:04PM -0400, Paul Ortman wrote:> It's my understanding that as of 3.0 rsync supports OS X ACLs and > extended attributes, and that it should be possible to backup a tree > from an OS X system that contains files and folders with ACLs and > extended attributes to a Linux host filesystem that has both > "user_xattrs" and "acl" enabled on the destination file system.No, OS X ACLs are not standard POSIX ACLs, and cannot be directly sent to an incompatible host. You can instead tell the receiving host to use --fake-super, which will store/retrieve the ACL information as an xattr (among other things). This incompatible ACL data is the cause of this error:> recv_acl_access: value out of range: 7d3001That number is nonsensical to a POSIX ACL system, such as Linux. The next error you cite is a limitation of your file system (probably ext3) in how large the extended attribute data can be:> rsync: rsync_xal_set: lsetxattr(".file_with_xattrs.EGbmPN","user.com.apple.ResourceFork") failed: Argument list too long (7)If lsetxattr() is complaining, there's nothing rsync can do about it (not without outside assistance). A helpful user here, Wesley Terpstra, posted a solution that uses an LD_PRELOAD library to redirect the ResourceFork xattr data into a DB. Look for the posting with the subject "Linux backup server LD_PRELOAD". (I haven't tried it, but the code looked good.) Another solution is to choose a different filesystem, such as (I believe, but double-check to be sure) xfs. ..wayne..