当 uid/gid 不同时,rsync 如何保留所有权?

bil*_*oah 4 rsync ownership

在部署新的服务器和迁移的全部内容/home使用rsync我注意到,组和用户的所有权实际上是保存下来,尽管该ID的两个服务器之间的差异。

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

rsync -avz oldserver:/home/ /home
Run Code Online (Sandbox Code Playgroud)

尽管我在新服务器上重新创建了所有相同的用户和组,但其中大多数具有与旧服务器不同的 ID,但不知何故,此命令神奇地保留了正确的所有权(基于名称)并在适用的情况下分配了新的 gid 和 uid。我可以用ls -n /home.

这怎么可能?rsync 是否进行某种名称查找?

Sch*_*ern 6

是的,默认情况下 rsync 按名称匹配所有者和组。详细信息在文档中--numeric-ids

--numeric-ids

使用此选项 rsync 将传输数字组和用户 ID,而不是使用用户和组名称并在两端映射它们。

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

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

rsync大概使用getpwnamgetgrnam查找与用户名和组名关联的 uid 和 gid。

  • @Znik 这对我有用,在 rysnc 之后,即使新系统中没有这样的用户,也会保留 gid 和 uid。但是,该命令必须在目标文件夹的 root 权限下执行。 (2认同)