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..