使用 rsync 保留文件和文件夹权限

使用 rsync 保留文件和文件夹权限

我使用以下命令维护我的电子邮件帐户的备份:

sudo rsync -av --delete --progress -e "ssh -p pNumber" --rsync-path="/usr/bin/rsync" /vmail/ user@my_backup_server:/home/user/backups/vmail/

来源:大多数电子邮件文件夹归用户所有vmail

目标(备份服务器):系统没有名为 的用户vmail

我的问题是,即使目标计算机没有名为 的用户,上述命令是否会保留文件和目录权限vmail?即使两台计算机之间的用户名不相同(备份服务器上缺少一些用户名),是否可以将文件和权限从目标完全恢复到源。

答案1

复制的rsync是文件的数字用户 ID,无论该文件是否存在于目标系统上。如果具有该 ID 的用户不存在ls等,则只会显示该数字而不是名称。如果该用户 ID 属于目标系统上的另一个用户名,则该用户现在将拥有该文件。

在这种情况下,备份和恢复将会顺利进行。

答案2

rsync 如何保留文件所有权取决于两件事:

  • 您是目标上的超级用户 (root) 吗?
    否则,您无法使用除您自己之外的其他用户创建文件和目录。

  • 您使用哪些选项标志?

-a选项包括-o, --owner-g, --group旨在保留所有权的选项。

在文件系统级别,用户和组所有权分别存储在 UID 和 GID 编号中。当没有从 UID/GID 到用户名和组名的映射时,工具将只显示这些编号。
具有相同名称的用户和组可以在不同的系统上拥有不同的 UID/GID 编号。

默认情况下,rsync 将尝试通过用户名和组名匹配所有权换句话说,当用户vmail是源文件的所有者时,rsync 会使该用户vmail也成为目标文件的所有者(即使他们有不同的 UID/GID 编号)。
这通常非常有弹性,并且对人类来说是最可预测的,因为我们通常不以 UID/GID 编号的形式来看待所有权。

当远程目标上没有匹配的用户时vmail,就会发生回退情况。然后,Rsync 将保留实际的底层 UID/GID 编号,并vmail使用源上的用户的 UID 编号来设置所有者。

当您反转 rsync 方向并恢复备份时,这应该保留正确的所有权。

man rsync

   -o, --owner
          This  option  causes  rsync to set the owner of the destination file to be the same as the source file,
          but only if the receiving rsync is being run as the super-user (see also the --super  and  --fake-super
          options).   Without this option, the owner of new and/or transferred files are set to the invoking user
          on the receiving side.

          The preservation of ownership will associate matching names by default, but may fall back to using  the
          ID number in some circumstances (see also the --numeric-ids option for a full discussion).


   --numeric-ids
          With  this option rsync will transfer numeric group and user IDs rather than using user and group names
          and mapping them at both ends.

          By default rsync will use the username and groupname to determine what ownership  to  give  files.  The
          special  uid  0 and the special group 0 are never mapped via user/group names even if the --numeric-ids
          option is not specified.

          If a user or group has no name on the source system or it has no match on the destination system,  then
          the  numeric ID from the source system is used instead.  See also the comments on the "use chroot" set‐
          ting in the rsyncd.conf manpage for information on how the chroot setting affects  rsync’s  ability  to
          look up the names of the users and groups and what you can do about it.

答案3

就您的情况而言,真正的问题出现在恢复文件时。关键是当您恢复文件时指定所需的所有者/组。--chown=vmail:vmail

假设您已经在要恢复到的新机器上创建了用户 vmail,您可以发出以下命令:

sudo rsync -av --chown=vmail:vmail --force --delete --progress user@my_backup_server:/home/user/backups/vmail/ /vmail/

这样做意味着只要您可以与该用户进行 rsync 操作(这在您的示例中已经暗示为真),谁拥有备份服务器上的文件并不重要。

相关内容