如果将文件从第一卷复制到第二卷,文件会保持不变吗?

如果将文件从第一卷复制到第二卷,文件会保持不变吗?

当我将外部硬盘驱动器连接到我的计算机(使用 FreeBSD 或其他 Unix 系统)并将文件从第一个外部硬盘驱动器复制到第二个硬盘驱动器时,第二个硬盘驱动器上的文件与源中的文件相同(第一个外部硬盘)?

我知道有一个哈希(校验和)。我在某处读到从不同的卷复制会产生不同的文件(因为它们是两个不同的卷)。

只有当我将文件复制到同一卷时,我才能保证它是同一个文件。

复制的建议是什么?我的文件会保持不变吗?

答案1

当制作文件的副本时,该副本是确切地与原件相同(假设复制过程中没有错误)。无论文件是复制到同一设备上的另一个位置还是复制到不同设备,都是如此。

该副本可能具有不同的文件名,或者可能具有不同的时间戳或不同的权限,但内容是相同的。

md5sum这可以通过在原始文件和副本上运行某种校验和或散列算法(例如)来验证。

例如:

$ cp original /tmp/thecopy
$ md5sum original /tmp/thecopy 
93d9d61139ff5f1287764f1c1994cbe3  original
93d9d61139ff5f1287764f1c1994cbe3  /tmp/thecopy

两个文件具有完全相同的 md5sum。 original存储在 NVME 上。 /tmp/是一个虚拟磁盘。

从技术上讲,两个不同的文件具有相同的md5sum.这种情况发生的概率极低。 md5sum对于许多简单的目的来说大多“足够好”,但是现在大多数人使用并推荐更强的散列方法来进一步降低概率。以下是sha512sum关于文件相同性的说明。

$ sha512sum original /tmp/thecopy 
5ba61d6f2a883c3afebc949b0f0d0a1c020498a1052771de98e6e1bbb42d438a0a53f49f381a2e1311c1bdf82a0cea9de646fc03c529fcb6fca0ab6476badf35  original
5ba61d6f2a883c3afebc949b0f0d0a1c020498a1052771de98e6e1bbb42d438a0a53f49f381a2e1311c1bdf82a0cea9de646fc03c529fcb6fca0ab6476badf35  /tmp/thecopy

再次,相同。

答案2

复制的建议是什么?我的文件会保持不变吗?

cp -a将复制数据,但它会不是复制创建时间,可能会丢失最后访问时间。如果您的源系统使用 SeLinux 上下文,则 cp 不了解 SeLinux 的其他系统将不会复制它。

至于crtime请参考复制或恢复 ext4fs 文件系统上文件/目录的 crtime

最后,md5sum复制后立即运行,特别是对于小文件不是建议这样做,因为当时的文件无法物理地转储到存储器中,而内核将使用存储在 RAM 中的脏缓冲区。

为了确保您已准确复制所有内容,您需要:

  • 复制所有文件
  • 创建它们的校验和(如果您的 CPU 足够现代,sha256sum则更可靠并且快点比 md5sum)
  • 删除缓存echo 3 | sudo tee /proc/sys/vm/drop_caches
  • 为新复制的文件创建校验和并将其与旧文件进行比较。

或者,对于 ext2/ext3/ext4 文件系统,您可以使用e2image它复制除可用空间之外的所有内容(所有时间戳,包括 crtime 和上次访问时间)。我通常用它来复制分区。


对于 NTFS,我曾ntfsclone多次使用过 - 它快速且可靠。


我认为其他文件系统也有类似的实用程序,但我只在我的设备上使用 ext4 和 NTFS。

相关内容