使用rsync保留现有的目标符号链接

我正在使用rsync(1)保持本地debian库更新。 最近,我用来存储磁盘的磁盘空间开始很小,所以我决定使用符号链接来将一些目录移动到另一个相似大小的磁盘上。

不幸的是,似乎rsync删除符号链接并重新填充几乎完整的磁盘。 经过一番search之后,我发现了rsync的--keep-dirlinks选项,这似乎是为解决我的问题量身定做的。

只有它不。 目标上的符号链接仍然被删除。
这是我的rsync命令:

 rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \ --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \ $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/ 

EXCLUDE扩展到消除大量的架构,我不感兴趣,沿着 – 排除--exclude binary-alpha/ --exclude disks-alpha ... 。 在rsync启动之前,我的池目录如下所示:

 lrwxrwxrwx 1 root root 23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main lrwxrwxrwx 1 root root 24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free 

一旦rsync启动,我得到这个:

 receiving incremental file list deleting non-free deleting contrib ./ contrib/ contrib/a/ 

依此类推,符号链接被replace为完整的文件目录。

其他一些rsync选项会干扰--keep-dirlinks吗? 哪些我不能合并? 或者是导致我的问题的选项顺序?

--delete--delete-excluded选项会干扰您的计划,因为他们注意到符号链接不在源代码中,因此将其删除。

这只有当你告诉rsync复制整个目录的source/ target符号(源代码后面的斜线)时才会发生。 如果你使用source/* target ,shell会扩展文件和目录的列表来复制,这不会发生(但是先用--dry-run试试)。

但是,我build议在LVM的帮助下将两个磁盘结合起来,形成一个不需要这种欺骗的大卷,而不是这个脆弱的设置。