当UID/GID不同时,rsync如何保留所有权?

7

在部署新服务器并使用rsync迁移整个/home目录的内容时,我注意到尽管两台服务器之间的ID不同,但组和用户所有权实际上得到了保留。

具体来说,我运行的命令是:

rsync -avz oldserver:/home/ /home

虽然我已经在新服务器上重新创建了所有相同的用户和组,但其中大部分与旧服务器上的不同,但不知何故,这个命令神奇地保持了正确的所有权(基于名称),并在适用的情况下分配了新的gid和uid。 我可以使用ls -n /home进行验证。

这是如何实现的? rsync是否执行某种名称查找?

1个回答

10

默认情况下,rsync 根据名称匹配所有者和组。详细信息可以在 --numeric-ids 的文档中找到。

--numeric-ids

使用此选项,rsync 将传输数值组和用户ID,而不是在源端和目的地端使用用户和组名称进行映射。

默认情况下,rsync 将使用用户名和组名来确定要赋予文件的所有权。即使没有指定 --numeric-ids 选项,特殊的 uid 0 和特殊的 gid 0 也从不通过用户/组名称映射。

如果源系统上的用户或组没有名称,或者在目标系统上没有匹配项,则使用源系统中的数值 ID。

rsync 可能使用 getpwnamgetgrnam 查找与用户和组名称相关联的 UID 和 GID。


哇,我完全不知道这背后还有这么多事情。谢谢你发现了这个! - But those new buttons though..
不幸的是,它并没有像应该的那样工作。当在目标计算机上找到相同名称(用户或组)但具有不同uid/gid时,它仍然尝试进行一些重新映射。我在版本3.1.3 debian 10下在两台物理计算机之间传输时遇到了这个“笑话”。 - Znik
3
@Znik 这对我起作用,在使用rsync后,即使新系统中没有这样的用户,gid和uid也会被保留。然而,该命令必须以目标文件夹的root权限执行。 - Walty Yeung
这是rsync手册中的内容。通常,rsync尝试在目标主机上分配相同的用户,如果需要,rsync会更改gid和uid。如果找不到名称,则uid / gid不会更改,并分配给dest中定义的任何用户/组。但是您可以添加--numeric-ids标志,然后rsync将uid / gid分配为没有任何映射的值。最终,/etc/groups / etc/passwd中的目标定义定义了映射关系。 - Znik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接