scpпроверяет, что он скопировал все данные, отправленные другой стороной. Целостность передачи гарантируется протоколом криптографического канала. Таким образом, вам не нужно проверять целостность после передачи. Это было бы избыточно, и очень маловероятно, что вы обнаружите какую-либо аппаратную ошибку, поскольку сравниваемые данные, вероятно, будут считываться из кеша. Периодическая проверка данных может быть полезной, но проверка сразу после передачи бессмысленна.
Однако вы должны убедиться, что scpэто не говорит о том, что что-то пошло не так. Должно быть сообщение об ошибке, но надежный индикатор - scpвозвращает ненулевой код выхода, если что-то пошло не так.
Точнее, вы знаете, что файл был передан правильно, если scpвозвращает 0 (т. Е. Код состояния успеха). Проверка того, что статус выхода равен 0 , необходима, когда вы все равно запускаете какую-либо команду. Если scpвозвращается статус ошибки, или если он был убит сигналом, или если он никогда не умирает, потому что система падает или теряет питание во время работы, то у вас нет никаких гарантий. В частности, поскольку scpфайл копируется непосредственно в его окончательное имя, это означает, что в случае сбоя системы вы можете получить неполный файл. Скопированная часть гарантированно будет правильной, но файл может быть обрезан.
Для большей надежности используйте rsync вместо scp. Если не указано иное, rsync записывает во временный файл и перемещает его на место после его завершения. Таким образом, если rsync возвращает код успеха, вы знаете, что файл присутствует и правильная полная копия; если rsync не вернул код ошибки, файл не будет представлен (если только не существовала более старая версия файла, в этом случае более старая версия не будет изменена).
scpи сопроводительное сообщение об ошибке в stderr , он скопирует все правильно и полностью.