我在用rsync(1)保持本地 Debian 存储库更新。最近,我用来存储它的磁盘开始空间不足,所以我决定使用符号链接,以便将一些目录移动到另一个类似大小的磁盘。
不幸的是,rsync 似乎正在删除符号链接并重新填充几乎已满的磁盘。经过一番搜索,我发现了--keep-dirlinks
rsync 选项,它似乎是为解决我的问题而量身定制的。
但事实并非如此。目标上的符号链接仍然被删除。
这是我的 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/
依此类推,符号链接被替换为充满文件的目录。
是否有其他 rsync 选项会干扰--keep-dirlinks
?哪些选项不能组合?还是选项顺序导致了我的问题?
答案1
--delete
和选项--delete-excluded
会干扰您的计划,因为他们注意到源上没有符号链接,因此将其删除。
仅当您使用符号(源后面的尾部斜杠)rsync
指示复制整个目录时才会发生这种情况。如果您使用,shell 将扩展要复制的文件和目录列表,并且不会发生这种情况(但请先尝试使用)。source/ target
source/* target
--dry-run
但是,我建议不要使用这种脆弱的设置,而是借助 LVM 将两个磁盘合并起来,形成一个大卷,而不需要这种技巧。