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