![如何比较两个大文件夹(>2G,196,000 个文件)](https://linux22.com/image/1400925/%E5%A6%82%E4%BD%95%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E5%A4%A7%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%88%3E2G%EF%BC%8C196%2C000%20%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%89.png)
我必须将包含 196K 文件的 2G 以上的文件夹从一个外部硬盘传输到另一个。较旧的硬盘存在一些问题,因此在传输时出现错误。我跳过了有问题的文件。传输成功后,是否有一种有效的方法可以找出哪些文件未传输(或部分传输)。我正在寻找一种在 Windows 或 Linux(Centos/Ubuntu)上执行此操作的方法
答案1
较旧的驱动器存在一些问题
什么样的问题?你的意思是它会产生随机读取错误?
如果旧驱动器无法正常工作,则无法可靠地知道数据是否被正确传输,因为您甚至不能确定您是否从物理介质中读取了正确的数据!
例如:
要计算文件的 MD5 或 SHA1 和,您必须从磁盘读取整个文件。如果磁盘默默地(没有抛出错误)读取了错误的位怎么办?您会得到不同的哈希值。如果您再次读取它,第二次读取正确,并且这次您将其复制到另一个驱动器怎么办?那么您将在新驱动器上获得“正确”的数据,并且哈希值与您最初计算的结果不匹配。
要“删除”文件(如果你要移动它们),你必须写到旧驱动器上的文件系统的元数据。如果驱动器出现故障,我绝对不会信任它写道;读取已经够糟糕了。此时,光是打开驱动器就可能导致其性能下降,这很难说。
要将哈希(MD5/SHA1 总和)写入旧磁盘,需要读取和写入它,这确实不推荐。
此时,如果您非常重视旧驱动器上的内容,我强烈建议您拔下旧驱动器并请专业的数据恢复专家从中恢复尽可能多的数据。
如果不这样做,您就是在玩火。您随时都可能丢失所有数据。甚至在您尝试复制文件时,您复制的数据也可能越来越损坏,使情况变得更糟。我不知道您的磁盘故障有多严重,但某些情况可能会使这种情况变得极其紧迫。再次强调,如果数据非常有价值或无法替代,请停止您正在做的事情并拔下驱动器。
将来,我强烈建议您在任何包含不可替代数据的驱动器上使用以下文件系统之一。这些文件系统是“故障明显”的,因为所有数据都经过校验和,因此如果磁盘读取数据不正确(又称“静默损坏”),文件系统会知道并报告错误。您相当幸运,因为您已经从操作系统收到文件未正确复制的通知;磁盘可能会以磁盘控制器无法检测到的静默、隐蔽的方式发生故障,从而导致磁盘损坏没有在没有校验和的文件系统上,操作系统通常会通知您。
以下现代文件系统支持校验和:
- Linux 上的 Btrfs
- Linux、BSD 或 Solaris 上的 ZFS
- Windows Server 2012 或 Windows 8.1 上的 ReFS(尽管您无法从 ReFS 启动,因此您需要一个 NTFS 系统分区)
答案2
rsync 具有仅复制尚不存在的文件的功能,默认情况下仅更新已更改的文件。它还可以比较源文件和目标文件的简单哈希值,以检查它们是否已使用 -c 选项正确复制。
它有很多选项可用于配置复制的内容和方式。 http://linux.die.net/man/1/rsync