如果我有两个带有 btrfs 的独立 USB HDD(均为单模式,无 DUP 或 RAID)并将文件从一个 HDD 复制到另一个 HDD,btrfs 是否可以确保复制的文件根据其 btrfs 文件校验和与原始文件仍然相同?
所以我可以放心,如果将一堆文件从一个 btrfs HDD 复制到另一个 btrfs HDD 时没有报告错误,那么它们都没问题?
请注意,我不确定“cp”命令本身是否会进行一些基本检查,以确保在复制过程中不会发生任何变化,无论是 RAM 错误还是 USB 行为异常,或者复制过程中由于某种原因而翻转一个位。我从其他地方了解到,例如 scp(通过网络复制文件)会进行此类内部检查,但如果 btrfs 也会自动进行此类检查,那么这将是一个额外的保证。
这意味着我不需要手动将复制文件的 md5 或 sha256 校验和与原始文件进行比较,只是为了确保它们仍然相同,因为 btrfs 已经使用自己的校验和自动完成了这一操作?
答案1
不。
源 btrfs 文件系统只知道您正在读取文件,目标只知道您正在写入文件。源会在读取文件时检测到问题,目标会在写入文件时检测到问题,但 btrfs 并不关心它们之间发生了什么。
scp
也可以用于本地转账,但是它不提供完整性检查(TCP 确实会检查网络传输时的完整性,但它不能保证流的输入与您读取的内容相同,并且您写入的内容与流的输出相同)。
rsync
始终使用校验和但这些也是传输中的校验和,换句话说,它验证了文件已收到与原始文件匹配,但没有检查文件书面确实如此。您可以rsync
再次运行,并-c
选择强制传输前校验和计算。如果校验和匹配,则将跳过复制,否则rsync
将重试。
md5sum
并且sha1sum
也可用于手动哈希比较。
如果您的用例是备份,请考虑使用btrfs 快照. 这些确实保证了 btrfs 级别的完整性,并且应该比常规文件复制更有效率。