为什么“du”报告我的“rsync”备份与原始备份大小不同?

为什么“du”报告我的“rsync”备份与原始备份大小不同?

我正在使用以下选项$HOME在外部存储驱动器上创建目录的备份:rsync

--archive --xattrs --hard-links

全新备份后,du报告某些备份目录的大小与原始目录的大小不同。例如,du -bs ~/.mozilla/firefox/<profile>/datareporting/archived/2024-01/输出3198125,而备份副本的等效命令输出3194029

但是,添加 a*并运行du -bs ~/.mozilla/firefox/<profile>/datareporting/archived/2024-01/*并对输出文件大小求和会得到3165357,并且备份副本的等效命令会得到相同的结果。

所以,我的问题是:

  • 是否rsync未能备份所有数据~/.mozilla?或者我只是使用du不当?
  • 为什么du备份副本.mozilla/firefox/<profile>/datareporting/archived/2024-01/与原始文件的文件大小不同,但目录中包含的文件的大小相同?
  • 如果我使用du不正确,如何才能准确确认我的备份与原始目录的大小完全相同$HOME

笔记:

  • 我已经shopt -s dotglob设置了,因此点文件不对 . 报告的大小差异负责du
  • 我的$HOME文件系统位于 SSD 上,而我的备份驱动器是 HDD。
  • 两个文件系统都是ext4.
  • 我使用的是 Debian 12。

答案1

为了清楚起见,让我们一一解答您的每个问题:

1. rsync是否无法备份~/.mozilla下的所有数据?或者我只是错误地使用了 du ?

根据您提供的信息,听起来似乎rsync没有备份数据失败。事实上,当您汇总目录中各个文件的大小时,原始文件和备份之间的总数匹配,表明rsync正在成功复制所有数据。您在du整个目录报告的总大小与其内容总和中看到的差异可能是由于文件系统为目录元数据和文件本身分配空间的方式不同,而不是由于du或者rsyncdu根据文件系统的块大小和分配计算目录和文件使用的空间,这些空间可能会有所不同,特别是在不同驱动器(SSD 与 HDD)之间,即使它们使用相同的文件系统类型 (ext4)。

2. 为什么 du 报告 .mozilla/firefox//datareporting/archived/2024-01/ 的备份副本与原始文件大小不同,但报告目录中包含的文件大小相同?

du由于每个驱动器上的文件系统如何为目录分配空间并存储元数据,因此报告目录本身的大小不同。每个文件系统可以以不同的方式处理目录元数据和块分配,这可能会导致报告的目录大小略有差异,即使这些目录中的文件具有相同的大小也是如此。这可能受到文件系统的块大小、目录中的文件数量(由于元数据存储影响目录大小)以及任何特定于文件系统的优化或处理元数据方面的差异等因素的影响。由于您提到文件大小在总结时完全匹配,这强化了文件本身已正确备份的想法,并且大小差异源于目录元数据或文件系统分配差异。

3. 如果我错误地使用了 du,如何准确确认我的备份与原始 $HOME 目录的大小完全相同?

为了准确确认备份的完整性和完整性,特别是在处理目录等关键数据时,由于上述原因,$HOME使用大小比较可能不是最可靠的方法。du相反,请考虑使用以下方法:

  • 校验和验证:您可以使用md5sum或等工具sha256sum生成原始目录和备份目录中文件的校验和,然后比较这些校验和以确保它们匹配。这可以通过结合使用 find、xargs 和您选择的校验和工具来完成,以递归方式处理所有文件。

    # Generate checksums for the original directory
    find /path/to/original -type f -exec sha256sum {} + > original_checksums.txt
    
    # Generate checksums for the backup directory
    find /path/to/backup -type f -exec sha256sum {} + > backup_checksums.txt
    
    # Compare the checksum files
    diff original_checksums.txt backup_checksums.txt
    

    如果该diff命令没有显示任何输出,则意味着所有文件都完美匹配。

  • 校验和模式下的 Rsyncrsync使用该-c选项运行会强制它比较文件内容(校验和)而不是大小和修改时间,这可以是确保所有文件均已正确复制且相同的更可靠方法。

这些方法侧重于文件的内容而不是其在磁盘上分配的空间,从而提供更准确的备份完整性验证。

相关内容