rsync 和符号链接

sea*_*ean 105 linux rsync symbolic-link

我想每晚使用cron要执行的作业将我的主目录备份到外部驱动器rsync。我不确定rsync的符号链接标志的确切行为。

  1. rsync-a标志包括-l标志(即“将符号链接复制为符号链接”)。这是否只是意味着它将复制链接或它将跟随链接并复制链接目录中的所有内容?我想避免这种情况,因为我有指向充满媒体文件的目录的链接,这些文件涉及复制不需要备份的数百 GB 数据。
  2. 由于担心(但不确定)rsync -a会复制所有这些媒体文件,我改为添加了--no-links标志。这似乎不是我想要的行为。它只是忽略复制任何有问题的链接,因为我确实有我想要复制的链接(例如,来自不同项目目录的公共头文件的链接)。
  3. 假设上面的#1(没有--no-links标志)是我真正想要的,它只是复制链接而不复制链接到的文件,链接备份时会断开吗?例如,我可以将rsync目录源/home/me/projects/misc/media/extdrive/backup/home/me/projects/misc. 在这种情况下,我认为rsync它不够聪明,也没有尝试纠正相关目录更改的符号链接内容。这样对吗?没关系,备份目录中的链接是否损坏并不重要,只要它们在需要恢复的时候能够修复并正常工作即可。

use*_*686 130

  1. “将符号链接复制为符号链接”的意思正是它所说的:如果 rsync 在源目录中看到一个符号链接,它将在目标中创建一个相同的符号链接。而已。

    (手册页中的几行,一个不同的选项,--copy-links描述了相反的行为(总是复制数据),你认为这是不受欢迎的。)

    另请参阅“符号链接”部分:

    如果--links指定,则使用目标上的相同目标重新创建符号链接。

  2. 这不是您想要的行为,因为您误解了--links行为并因此要求错误的行为(请参阅答案#1)。

  3. 默认情况下,它完全复制目标

    也就是说,如果链接指向一个绝对路径(例如/home/me/projects),它将继续指向相同的路径;它不会中断,它只会继续指向主目录中的文件,而不是备份中的文件。

    同时,如果链接指向相对路径(例如../../projects),它也会继续指向相同的路径,但由于它是相对于符号链接的位置,因此备份中的符号链接也将指向备份中的文件。

    不幸的是,似乎没有任何选项可以为他们的新基础翻译绝对符号链接(只有一个选项可以完全破坏它们)。为避免出现问题,您应该将现有的符号链接更改为相关的符号链接(对于 $HOME 内的链接,这通常是一个好主意)。

  • 嗯,那么`--copy-links` 和`--links` 之间有什么区别? (3认同)
  • `--copy-links` = `-L`,并且 `--links` = `-l`。请参阅我的答案中的文档说明:https://superuser.com/a/1388910/425838 (3认同)
  • 这样它就可以节省每个人的时间,而不仅仅是我 (2认同)

Gab*_*les 27

@grawity 有一个很好的答案,但这里是文档中一些相关信息的屏幕截图。例如,以下是 the-l-Loptions的确切措辞,这似乎是最相关的问题:

在此处输入图片说明

来源:https : //linux.die.net/man/1/rsyncman rsyncLinux 手册页。

另请注意,-a( --archive) 选项还包含其中的-l选项,这很棒,因为我真的很喜欢使用该-l选项将源中的符号链接保留为目标上的符号链接。从手册页:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
Run Code Online (Sandbox Code Playgroud)

请注意,对于我最喜欢的rsync命令和说明,包括复制、镜像、显示总进度...

...进行空运行,将 stderr 和 stdout 记录到(单独的)文件,显示统计信息,使用包含路径文件排除文件等,请参阅我在第二部分下的完整答案,标题为“ 2.rsync 命令行”工具(Linux,带有 Cygwin 的 Windows) “:https : //superuser.com/a/1464264/425838