为了创建定期备份,我将rsync
一起使用--link-dest
,以便为未更改的文件创建硬链接。例如:
rsync -ax \
--partial --delete --delete-excluded --inplace \
--exclude-from=/tmp/temp_excludes \
--link-dest=/Volumes/Backup/current \
/Users /Volumes/Backup/2012-06-25
只要我从我的普通用户帐户启动该过程,它就会运行得很好。虽然我一开始使用这个程序,sudo
它就表现得很不稳定,这意味着rsync
副本所有未更改的文件,而不是硬链接他们。
由于sudo
修改了环境,我已经尝试过sudo -E
确保我的sudoers
文件具有相应的选项集。好吧,那也没用。
那么,问题是,我该如何rsync
使用sudo
?虽然上面的例子只显示了目录的备份Users
,但我还需要备份一些只能以 root 身份访问的系统文件。
答案1
我建议你rsync
先从开始-i --dry-run
,以找出它为什么要复制未更改的文件。该-i
选项将打印出所有更新以及指定为什么rsync
认为文件已更改的代码(校验和、时间戳等)。请参阅手册页以获取代码的完整说明。
您可能还应该指定--numeric-ids
源系统和目标系统上的用户 ID 是否不同。
答案2
虽然非常感谢Oliver的建议,但是问题的解决方案如下:
当(外部)设备安装在 OS X 上时,它们有相应的“忽略所有权”标志默认设置。OS X 为此维护一个特殊数据库,可通过vsdbutil
(已弃用) 和访问diskutil
。
根据一些谷歌搜索,这背后的原因似乎是,典型的 OS X 用户是消费产品用户,他们希望从任何其他计算机访问存储在外部 USB 磁盘上的数据,而无需经历所有权、权限等麻烦。
因此,对于所需的备份解决方案来说,使用rsync
和sudo
关掉这个标志:
# 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 磁盘。