听起来这是正在发生的事情:
- rsnapshot将Mac的数字uid和gid复制到服务器
- 您的Mac帐户和服务器帐户的uid不同
- 复制文件的权限不允许您的服务器uid访问它们
有一些可能的解决方案。
解决方案1:使用rsync --usermap
和--groupmap
rsnapshot使用rsync来完成大部分工作,并且最新版本的rsync可以选择映射uid和gid。我不知道rsnapshot是否可以配置为将这些选项传递给rsync,但是如果可以,则可以解决您的问题。
解决方案2:同步您的用户ID和组ID。
如果您的工作站和服务器运行相同的操作系统,这可能是可能的,但是如果它们的配置已经不同,则可能不值得更改。如果他们运行不同的操作系统,则它们可能具有不兼容的uid分配方案,尽管有可能您只能为用户同步uid。(除非其中一个是Windows,否则根本不可能。)更改帐户uid不会更改任何文件上的所有者ID,因此,您必须单独执行此操作。更改用户的uid没什么大不了的,但是更改服务的uid可能很麻烦。
解决方案3:分开复制步骤
如果在运行rsnapshot之前将所有内容复制到服务器作为一个单独的步骤,则可以使用将使用字符串名称而不是数字uid的程序进行复制。这将转换任何匹配的用户名的uid。 我知道的唯一的双向文件同步工具Unison会做到这一点;它包含在大多数Linux发行版中(但默认情况下未安装),并且可通过MacPorts或作为App Bundle用于macOS 。如果您使用scp复制文件(Windows几乎所有内容都默认包含和安装了scp),则所有者将是登录接收系统的用户。
解决方案3:添加uid / gid转换步骤
您可以在rsnapshot完成后更改uid / gid。如果您只关心一个或两个uid,则可以根据以下答案调整解决方案:
find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;
这将修复您的uid / gid,但会破坏未更改文件的rsnapshots硬链接-rsnapshot不会以任何方式(包括对元数据的更改)硬链接文件。它不会硬链接具有不同所有者的文件,甚至不会具有不同时间戳的文件。(这是rsnapshot使用但未修改的rsync行为。)
当然,您可以添加另一个步骤来重做硬链接。