Я рекурсивно перенес много файлов и папок с scp
помощью команды:
scp -rp /source/folder myremoteusername@122.10.12.123:/destination/folder
После завершения передачи мне нужно проверить, все ли файлы были переданы без каких-либо повреждений или scp
позаботились об этом (т.е. отображает ли какое-либо сообщение об ошибке, если какой-либо файл передан неправильно)?
scp
и сопроводительное сообщение об ошибке в stderr , он скопирует все правильно и полностью.rsync
если можете. Он копирует проверки для каждого файла после завершения транзакции, поэтому рекомендуется использовать его, чтобы быть немного более безопасным.Ответы:
scp
проверяет, что он скопировал все данные, отправленные другой стороной. Целостность передачи гарантируется протоколом криптографического канала. Таким образом, вам не нужно проверять целостность после передачи. Это было бы избыточно, и очень маловероятно, что вы обнаружите какую-либо аппаратную ошибку, поскольку сравниваемые данные, вероятно, будут считываться из кеша. Периодическая проверка данных может быть полезной, но проверка сразу после передачи бессмысленна.Однако вы должны убедиться, что
scp
это не говорит о том, что что-то пошло не так. Должно быть сообщение об ошибке, но надежный индикатор -scp
возвращает ненулевой код выхода, если что-то пошло не так.Точнее, вы знаете, что файл был передан правильно, если
scp
возвращает 0 (т. Е. Код состояния успеха). Проверка того, что статус выхода равен 0 , необходима, когда вы все равно запускаете какую-либо команду. Еслиscp
возвращается статус ошибки, или если он был убит сигналом, или если он никогда не умирает, потому что система падает или теряет питание во время работы, то у вас нет никаких гарантий. В частности, посколькуscp
файл копируется непосредственно в его окончательное имя, это означает, что в случае сбоя системы вы можете получить неполный файл. Скопированная часть гарантированно будет правильной, но файл может быть обрезан.Для большей надежности используйте rsync вместо scp. Если не указано иное, rsync записывает во временный файл и перемещает его на место после его завершения. Таким образом, если rsync возвращает код успеха, вы знаете, что файл присутствует и правильная полная копия; если rsync не вернул код ошибки, файл не будет представлен (если только не существовала более старая версия файла, в этом случае более старая версия не будет изменена).
источник
У меня никогда не было проблем с коррупцией после того, как я
scp
что-то сделал, но если вы беспокоитесь об этом, вы всегда можете запуститьmd5sum <filename>
обе системы, чтобы убедиться, что они одинаковы.источник
Согласно предложению @ david-king, это
md5
основанное решение для проверки целостности файлов после передачи. Выполните следующую команду сразу послеcd
ИНГ/source/folder
на локальной машине , и сразу же послеcd
ИНГ/destination/folder
на удаленном хосте:find . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum
. Полученный хэш должен быть идентичен после успешной передачи.Обновить:
Согласно этому ответу на аналогичный вопрос о ServerFault ,(Пожалуйста, проверьте этот ответ @Gilles для деталей). Альтернативу проверке файловых хэшей послеscp
не гарантирует целостность файлаrsync
передачи можно использовать для передачи файлов и проверки их кода возврата.Обновление 2: Следующее только проверяет, совпадают ли файлы и их соответствующие размеры после передачи:
find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum
источник
scp
кода возврата достаточно, а проверка хэшей бесполезна.scp
возвращается 0, это не гарантирует, что файловая система ничего не испортила, поэтому проверка хешей по-прежнему полезна для проверки целостности конфиденциальных данных, если кто-то решит использовать ихscp
повторноrsync
.