scp 完成后是否需要检查文件损坏?

Fra*_*urt 22 scp

scp使用以下命令递归传输了许多文件和文件夹:

scp -rp /source/folder myremoteusername@122.10.12.123:/destination/folder
Run Code Online (Sandbox Code Playgroud)

传输完成后,我是否需要检查是否所有文件都被传输而没有任何损坏,或者是否scp需要处理(即,如果任何文件没有正确传输,则显示一些错误消息)?

Gil*_*il' 29

scp验证它复制了另一方发送的所有数据。传输的完整性由加密通道协议保证。所以你不需要在传输后验证完整性。这将是多余的,并且不太可能捕获任何硬件错误,因为您正在比较的数据可能会从缓存中读取。定期验证数据可能很有用,但在传输后立即验证毫无意义。

但是,您确实需要确保这scp不会告诉您出现问题。应该有一条错误消息,但可靠的指标是,scp如果出现问题,它会返回一个非零退出代码。

更准确地说,如果scp返回 0(即成功状态代码),您就知道文件已正确传输。无论如何,当您运行任何命令时,都需要检查退出状态是否为 0。如果scp返回错误状态,或者它被信号杀死,或者它永远不会因为系统在运行时崩溃或断电而死亡,那么您无法保证。特别是,由于scp将文件直接复制到其最终名称,这意味着您可以在系统崩溃的情况下最终得到部分文件。复制的部分保证是正确的,但文件可能会被截断。

为了获得更好的可靠性,请使用 rsync 而不是 scp。除非另有说明,rsync 写入临时文件,并在完成后将其移动到位。因此,如果 rsync 返回成功代码,您就知道该文件存在并且是正确、完整的副本;如果 rsync 未返回错误代码,则将不存在文件(除非存在较旧版本的文件,在这种情况下,不会修改旧版本)。