4

我正在创建一个 bash 脚本来使用 rsync 备份我的文件。

备份都来自一个目录。我只想备份新的或修改过的文件。

目前,我告诉 rsync 备份目录,并检查与上次备份相比的文件。

我这样做的方式是

THE_TIME=`date "+%Y-%m-%dT%H:%M:%S"`
rsync -aP --link-dest=/Backup/Current /usr/home/user/backup /Backup/Backup-$THE_TIME
rm -f /Backup/Current
ln -s /Backup/Backup-$THE_TIME /Backup/Current

我很确定我的语法是正确的。每个备份都将检查“当前”文件夹,并仅在必要时上传。然后它将删除当前文件夹,并重新创建指向刚刚执行的最新备份的符号链接。

运行脚本时出现错误:

rsync: link "/Backup/Backup-2010-08-04-12:21:15/dgs1200series_manual_310.pdf"

=> /Backup/Current/dgs1200series_manual_310.pdf 失败:不支持操作 (45)

主机操作系统正在运行支持硬链接的 HFS 文件系统。我试图弄清楚是否有其他东西不支持这一点,或者我的代码是否有问题。

谢谢你的帮助

编辑:

我能够在我的本地机器上创建一个硬链接。我还能够在远程服务器上创建硬链接(在本地登录时)我无法在通过 afp 挂载时在远程服务器上创建硬链接。即使这两个文件都存在于服务器上。

我猜这是afp的限制。

4

3 回答 3

3

以防万一您的命令行只是一个示例:请务必始终使用绝对路径名指定链接目标目录!这是我花了很长时间才弄清楚的事情……</p>

于 2010-10-01T12:57:21.080 回答
1

我不知道这是否是同一个问题,但我知道当目标是 FAT32 分区并且文件名中包含“:”(冒号)时,rsync 无法同步文件。[源文件系统为 ext3,目标文件系统为 FAT32]

尝试重新配置date命令,使其不使用冒号,看看是否有区别。

例如

THE_TIME=`date "+%Y-%m-%dT%H_%_%S"`
于 2010-08-05T04:47:18.500 回答
1

手册页中有两件事值得检查:

如果文件没有链接,请仔细检查它们的属性。还要检查某些属性是否被强制超出 rsync 的控制,例如将 root 压缩到单个用户的挂载选项,或者挂载具有通用所有权的可移动驱动器(例如 OS X 的“忽略此卷上的所有权”选项)。

请注意,2.6.1 之前的 rsync 版本有一个错误,当指定 -o(或由 -a 暗示)时,可能会阻止 --link-dest 对非超级用户正常工作。您可以通过在发送到旧的 rsync 时避免使用 -o 选项来解决此错误。

您是否打开了“忽略所有权”选项?你有什么版本的rsync

ln另外,您是否尝试过在命令行使用手动创建类似的硬链接?

于 2010-08-04T16:49:25.603 回答