![rsync 和符号链接](https://linux22.com/image/1419717/rsync%20%E5%92%8C%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5.png)
我想每晚使用cron
要执行的作业将我的主目录备份到外部驱动器rsync
。我不确定rsync
符号链接标志的确切行为。
rsync
的-a
标志包括-l
标志(即“将符号链接复制为符号链接”)。这是否意味着它将复制链接或者它会跟随链接并复制链接目录中的所有内容?我想避免这种情况,因为我有指向充满媒体文件的目录的链接,这将涉及复制数百 GB 的数据,而我不需要备份。- 由于担心(但不确定)这
rsync -a
会复制所有这些媒体文件,因此我添加了标志--no-links
。这似乎不是我想要的行为。它只是忽略复制任何有问题的链接,因为我确实有想要复制的链接(例如来自不同项目目录的公共头文件的链接)。 - 假设上面的 #1(没有标志
--no-links
)是我真正想要的,并且它只是复制链接而不复制链接到的文件,那么备份时链接会断开吗?例如,我可能会将rsync
目录源/home/me/projects/misc
化为/media/extdrive/backup/home/me/projects/misc
。在这种情况下,我认为rsync
它不够智能,也不会尝试更正相对目录更改的符号链接内容。这样对吗?没关系,如果链接在备份目录中断开,只要在需要恢复时修复并正常工作,那就没关系了。
答案1
“将符号链接复制为符号链接”的意思正是:如果 rsync 在源目录中看到符号链接,它将在目标目录中创建一个相同的符号链接。而已。
(在手册页的下面几行,不同的选项
--copy-links
,描述了您所描述的不受欢迎的相反行为(总是复制数据)。)另请参阅“符号链接”部分:
如果
--links
指定了,则在目标上使用相同的目标重新创建符号链接。这不是您想要的行为,因为您误解了
--links
行为的含义,因此要求错误的行为(参见答案 1)。默认情况下,它会复制目标确切地。
也就是说,如果链接指向绝对路径(例如
/home/me/projects
),它将继续指向相同的路径;它不会休息,它将继续指向你的主目录中的文件,而不是备份中的文件。同时,如果链接指向相对路径(例如
../../projects
),它将还继续指向相同的路径,但由于它相对于符号链接的位置,所以备份中的符号链接也将指向备份中的文件。不幸的是,似乎没有任何选项可以将绝对符号链接转换为新基址(只有完全破坏它们的选项)。为了避免出现问题,您应该将现有符号链接更改为相对符号链接(对于 $HOME 内的链接,这通常是一个好主意)。
答案2
@grawity 的回答很棒,但以下是一些相关信息的截图文档-l
。例如,以下是(小写字母 L,而不是一个)和选项的确切措辞-L
,它们似乎是与问题最相关的:
来源:https://linux.die.net/man/1/rsync或man rsync
Linux 上的手册页。
还请注意,-a
( --archive
) 选项中还包含-l
选项,这很棒,因为我非常喜欢使用该-l
选项将来自源的符号链接保留为目标上的符号链接。从手册页 ( man rsync
) 中:
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
以下是 的含义-rlptgoD
,也来自man rsync
:
--recursive, -r recurse into directories
--links, -l copy symlinks as symlinks
--perms, -p preserve permissions
--times, -t preserve modification times
--group, -g preserve group
--owner, -o preserve owner (super-user only)
-D same as --devices --specials
--devices preserve device files (super-user only)
--specials preserve special files ["such as named sockets and fifos"]
重要的!:
如果rsync
使用外置FAT或者胖的然而,文件系统确实不是不支持符号链接,也不支持 POSIX 所有者、组和权限,因此删除-lpgo
,并使用-rtD
代替-a
!如果需要,您-v
也可以添加“详细”,然后使用-vrtD
。
更多详情请见:
- [我的答案]在 FAT 和 exFAT 文件系统中使用 rsync 的最佳设置
- rsync 似乎会覆盖 ExFat 上已经存在的文件
- https://superuser.com/a/384849/425838
- https://learn.microsoft.com/en-us/windows/win32/fileio/filesystem-function-comparison
注意,对于我最喜欢的rsync
命令和指令,包括复制、镜像、显示总进度......
...进行试运行,将 stderr 和 stdout 记录到(单独的)文件中,显示统计数据,使用包含路径文件和排除文件等等,请参阅我在第二部分的完整回答,标题为“2. rsync 命令行工具(Linux、Windows 带有 Cygwin)“:https://superuser.com/a/1464264/425838