rsync和符号链接


69

我想每晚使用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它不够聪明,也不会尝试为相对目录更改纠正符号链接的内容。这个对吗?没关系,只要备份目录中的链接被修复并且只要需要恢复时就可以工作就可以了。

3
-L标志可能是您想要的。在Centos Linux上的rsync手册页中:“ -L,--copy-links将符号链接转换为引用文件/目录。” 我建议使用一些示例目录和链接对此进行测试,以确保您不会覆盖任何您不想要的数据。编辑为包含有关可能的数据丢失的警告。;)
Mick T

Answers:


90
  1. “将符号链接复制为符号链接”的含义恰恰是其含义:如果rsync在源目录中看到符号链接,它将在目标位置创建相同的符号链接。而已。

    (手册页中的以下几行,一个不同的选项,--copy-links描述了您所描述的不良行为(总是复制数据),这是您所不希望的。)

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

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

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

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

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

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

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


2
嗯,--copy-links和之间有什么区别--links
亚历山大·米尔斯

--copy-links= -L--links= -l。请参阅我的答案中有关文档的描述:superuser.com/a/1388910/425838
Gabriel Staples

12

@grawity有一个很好的答案,但这是文档中一些相关信息的屏幕截图。例如,这是-l-L选项的确切用语,这似乎是最相关的问题:

在此处输入图片说明

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

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

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.