在 Linux 中,当您将一个硬链接复制到指向同一个文件的另一个硬链接之上时,会发生什么?

在 Linux 中,当您将一个硬链接复制到指向同一个文件的另一个硬链接之上时,会发生什么?

我在一个包含数十万个文件的大文件夹中使用了文件重复数据删除程序。该重复数据删除程序为它检测到的所有重复文件创建了硬链接。

如果我尝试合并一些包含指向相同文件的硬链接的目录并允许覆盖目标,那么相关文件会发生什么?

我不想接受基于涉及几个文件的测试案例的经验证据所发生的事情。我想确切地了解所涉及的过程,以了解是否存在因断电或其他未经请求的中断等各种原因而导致文件损坏的风险。

答案1

同步是一个很好的工具,您可能想使用它来将一个目录递归复制到另一个目录。当rsync -a Dir1/ Dir2遇到具有相同名称的文件时,它会首先取消链接*该文件,复制到临时文件,然后将文件重命名为原始名称。如果中断,您不会丢失任何文件,如果命令已完成,您不会丢失这些文件。只需再次运行相同的 rsync 命令即可完成它。

*取消链接意味着删除但不触及文件内容。其他硬链接不受影响。

如果您使用该--inplace参数,它可能会对硬链接文件造成不良影响,如 中更详细地描述的那样man rsync。所以不要使用它。

我使用 rsync 将超过 400 GB 的文件(约 200000 个)复制到 Ubuntu 操作系统的 ext4 文件系统中,这些文件跨多个网络挂载的 SSH 文件系统,并带有硬链接重复数据删除功能。即使出现网络超时和其他中断,我也没有丢失任何文件。没有使用 Unix 的经验。

答案2

当然,即使不考虑可能出现的各种硬件故障,在未指定的文件系统上执行主要(未指定的)文件系统操作也存在文件损坏的风险。

确保您有良好的备份。

相关内容