我遇到了一个问题,文件被复制到远程服务器,但目标服务器上复制文件的所有者/组始终是“1002”。源的权限得到尊重,并在目标上正确复制。我就是想不出一种方法来保留复制文件的所有者(和组)。
Lsyncd 版本:2.2.2
我的设置如下:
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
default.rsyncssh,
source="/home",
host="1*52.*.15",
targetdir="/home/",
delete = "running", -- prevents deletion of files on startup (ie when a server comes back online, don't delete files that are new on the backup)
delay = 5, -- run every 5 seconds instead of default 20
exclude = {
"/home/backup",
},
rsync = {
archive = true, -- use the archive flag in rsync
perms = true, -- Keep the permissions
owner = true, -- Keep the owner
compress = true,
acls = true,
xattrs = true,
_extra = {"-a"}, -- Sometimes permissions and owners isn't copied correctly so the _extra can be used for any flag in rsync
}
}
lsyncd 日志错误:
Dec 15 21:42:47 server1.*.group lsyncd[21033]: sending incremental file list
Dec 15 21:42:47 server1.*.group lsyncd[21033]: rsync: failed to set times on "/home/admin/conf": Operation not permitted (1)
Dec 15 21:42:47 server1.*.group lsyncd[21033]: admin/conf/
Dec 15 21:42:47 server1.*.group lsyncd[21033]: sent 5,387 bytes received 160 bytes 3,698.00 bytes/sec
Dec 15 21:42:47 server1.*.group lsyncd[21033]: total size is 2,849,404,839 speedup is 513,683.94
Dec 15 21:42:47 server1.*.group lsyncd[21033]: rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
答案1
我认为问题在于本地系统上的文件的 uid/gid 与目标系统上的 uid/gid 不对应。
检查本地系统上的用户/组 ID,并在目标系统上创建相同的用户/组。
# On source system
$ ls -l /home/admin/conf
-rw-r--r--. 1 user1 user1 1.0K Jul 13 2018 /home/admin/conf
$ id user1
uid=1002(user1) gid=1002(user1) groups=1002(user1)
# On target system
$ useradd -u 1002 -g 1002 user1
答案2
当 RSYNC 传输具有保留所有权的文件时,它传输的不是用户名/组名,而是所有者的 UID 和 GID。
因此,您对 1002 的体验意味着该 UID 未在目标系统上使用。
您可以通过以下两种方式之一解决此问题:
- 删除旧用户,然后使用 useradd 中的 UID 设置重新创建它。——这可能是执行此操作的最干净的方法,因为您不必 chown 或 chmod 任何内容。
- 使用 usermod 更新 UID 和 GID。——如果这样做,您将需要改变主目录中文件的所有权,并且可能会对该用户拥有的其他文件产生其他意外的副作用。
项目清单