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

unk*_*eeg 12 linux rsync symbolic-link

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

不幸的是,rsync 似乎正在删除符号链接并重新填充几乎已满的磁盘。经过一番搜索,我发现了--keep-dirlinksrsync 选项,它似乎是为解决我的问题而量身定制的。

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

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
 --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
 $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

rsync 启动后,我得到以下信息:

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/
Run Code Online (Sandbox Code Playgroud)

依此类推,符号链接被替换为充满文件的目录。

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

Sve*_*ven 8

--delete--delete-excluded你的计划的选项干扰,因为他们注意到符号链接是不存在的来源,从而将其删除。

仅当您告诉rsync使用source/ target符号(源后的斜杠)复制整个目录时才会发生这种情况。如果您source/* target改为使用,shell 将展开要复制的文件和目录列表,这不会发生(但请先尝试--dry-run)。

但是,我建议不要使用这种脆弱的设置,而是在 LVM 的帮助下将两个磁盘组合起来,形成一个不需要这种技巧的大卷。