关于macos:Rsync bash脚本和硬链接文件

Rsync bash script and hard linking files

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

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

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

我这样做的方式是

1
2
3
4
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

我很确定我的语法是正确的。每个备份将对照"当前"文件夹进行检查,并且仅在必要时上载。然后它将删除当前文件夹,并重新创建符号链接到它刚刚做的最新备份。

运行脚本时出错:

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

=> /Backup/Current/dgs1200series_manual_310.pdf
failed: Operation not supported (45)

主机操作系统正在运行支持硬链接的HFS文件系统。我正在尝试找出是否有其他东西不支持这个,或者我的代码中是否有问题。

谢谢你的帮助

编辑:

我可以在本地机器上创建硬链接。我还可以在远程服务器上创建硬链接(本地登录时)当通过AFP装载时,我无法在远程服务器上创建硬链接。即使两个文件都存在于服务器上。

我猜这是法新社的限制。


以防万一您的命令行只是一个例子:一定要始终用绝对路径名指定link dest目录!我花了不少时间才弄明白…


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

尝试重新配置date命令,使其不使用冒号,看看这是否会有影响。

例如

1
THE_TIME=`date"+%Y-%m-%dT%H_%_%S"`


有两件事值得一看:

If file's aren't linking, double-check their attributes. Also
check if some attributes are getting forced outside of rsync's
control, such a mount option that squishes root to a single
user, or mounts a removable drive with generic ownership (such
as OS X's"Ignore ownership on this volume" option).

Note that rsync versions prior to 2.6.1 had a bug that could
prevent --link-dest from working properly for a non-super-user
when -o was specified (or implied by -a). You can work-around
this bug by avoiding the -o option when sending to an old rsync.

是否启用了"忽略所有权"选项?你有什么版本的rsync

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