为什么 rsync 仅硬链接一些未改变的文件?

为什么 rsync 仅硬链接一些未改变的文件?

我正在使用rsync增量备份,使用--link-dest指向上一个备份的选项,以便未更改的文件硬链接到那里。

这个方法有效,但并不适用于所有文件。例如,我的备份目录中包含三年多未修改过的文件。但出于某种奇怪的原因,只有其中一些是硬链接。

不方便的是,较大的文件都是副本(即只有一个文件链接,通过 检查ls -l)。但一些较小的文件也是如此,而且确实有些硬链接文件比一些复制的文件大。

似乎没有任何模式可以让我预测哪些是副本,哪些是硬链接。文件名长度和文件大小似乎无关紧要,修改日期也是如此:在复制列表和硬链接列表中,所有这些都是混合的。也就是说,文件确实似乎在多个备份中保持一致,因此一次备份发生的事情似乎也会在下一次备份中发生。

文件的某些属性(技术或其他)或某些特性是否会导致rsync复制它而不是硬链接它?

编辑1:提到“属性”让我怀疑是否存在一些ls -l未列出的可能产生影响的属性,但lsattr在源目录中执行表明所有文件都具有相同的属性。

编辑2:我之前说过(现已删除)权限都相同,但那是错的。目标(备份)目录中的权限相同。我正在使用--perms(保留权限),所以我不知道为什么权限没有被保留。我之前也以非 root 用户身份运行,但现在我试图以 root 用户身份运行,以防万一,但权限仍然没有被保留,这也许就是为什么有些文件看起来已经改变了 - 文件没有,但其权限显然已经改变了(至少与具有不正确权限的先前备份相比)。

编辑3:我现在认为这与我的 CIFS 服务器有关。mount.cifs手册页中有一些关于该file_mode选项的内容:“如果服务器不支持 CIFS Unix 扩展,这将覆盖默认文件模式。”当我运行mount不带参数的命令来列出挂载时,列出的选项包括file_mode=0755dir_mode=0755与我看到的内容相关的选项。我无法chmod在挂载上复制文件,因此那些最初没有0755权限的文件被视为已更改,因此被再次复制 - 并且由于挂载,在备份中再次获得错误的权限。

答案1

与其说是解决方案,不如说是一种变通方法。我现在避免使用--perms/-p或任何暗示它的符号。显然,我的权限不会被复制,但至少它不会因为权限不同而认为未更改的文件被更改。

相关内容