以sudo身份运行时rsync –link-dest行为

为了创build定期备份,我将rsync--link-dest一起使用,以便为未更改的文件创build硬链接。 例如:

 rsync -ax \ --partial --delete --delete-excluded --inplace \ --exclude-from=/tmp/temp_excludes \ --link-dest=/Volumes/Backup/current \ /Users /Volumes/Backup/2012-06-25 

只要我从我的普通用户帐户开始这个过程,这很好。 尽pipe只要我使用sudo启动进程,它的performance就会比较随意,这意味着rsync 复制所有未更改的文件,而不是硬链接它们。

由于sudo修改环境,我已经尝试了sudo -E ,并确保sudoers文件具有相应的选项集。 那么,也没有工作。

所以,问题是,我如何使用sudo运行rsync 而上面的例子只显示了Users目录的备份,我还需要备份一些我只能以root用户身份访问的系统文件。

我build议你用-i --dry-run启动rsync ,以便找出为什么要复制未更改的文件。 -i选项将打印出所有更新以及指定rsync为什么认为这些文件已更改的代码(校验和,时间戳记等)。 有关代码的完整说明,请参阅手册页。

如果用户ID在源系统和目标系统上不同,则应该指定--numeric-ids

虽然奥利弗的build议是非常赞赏的,但问题的解决scheme如下:

当(外部)设备安装在OS X上时,它们默认设置了相应的“忽略所有权”标志 。 OS X维护一个特殊的数据库,通过vsdbutil (不build议使用)和diskutil

根据一些谷歌search,这背后的原因似乎是,典型的OS X用户是一个消费产品用户,他们希望访问他们的数据,而这些数据已经存储在例如来自其他计算机的外部USB磁盘上,而没有经过所有权的麻烦,permissios等

因此,使用rsyncsudo closures此标志对于所需的备份解决scheme至关重要:

 # sudo diskutil enableOwnership <yourDeviceHere> sudo diskutil enableOwnership /Volumes/Backup 

然后,卸载并重新安装该设备,以确保一切正常。 最后,我已将我的rsync调用更新为以下内容:

 rsync -aNHAXx -i --fileflags --force-change \ --partial --delete --delete-excluded --inplace \ --exclude-from=/tmp/temp_excludes \ --link-dest=/Volumes/Backup/current \ /Users /Volumes/Backup/2012-06-25 

这个东西现在被塞进一个(稍微修改过的)bash脚本中,并允许在OS X下每日增量备份到外部USB磁盘上。

如果您使用LBackup (rsync包装器)进行备份,则在OS X系统上运行时执行的其中一项检查是启用目标磁盘映像/驱动器的权限。

如果权限未启用,则备份将不会继续,将发出警告以启用权限。

如果您希望继续使用您自己的脚本,您也可以从LBackup项目中find这个文档页面 。