scp가 완료된 후 파일이 손상되었는지 확인해야 합니까?

scp가 완료된 후 파일이 손상되었는지 확인해야 합니까?

scp다음 명령을 사용하여 많은 파일과 폴더를 재귀적으로 전송했습니다.

scp -rp /source/folder [email protected]:/destination/folder

scp전송이 완료된 후 모든 파일이 손상 없이 전송되었는지, 아니면 처리되었는지(예: 파일이 올바르게 전송되지 않은 경우 일부 오류 메시지가 표시됨) 확인해야 합니까 ?

답변1

scp상대방이 보낸 데이터를 모두 복사했는지 확인하세요. 전송의 무결성은 암호화된 채널 프로토콜에 의해 보장됩니다. 따라서 전송 후에는 무결성을 확인할 필요가 없습니다. 비교하는 데이터는 아마도 캐시에서 읽혀지기 때문에 이는 중복되며 하드웨어 오류를 포착할 가능성이 낮습니다. 주기적으로 데이터 유효성을 검사하는 것이 유용할 수 있지만 전송 후 즉시 유효성을 검사하는 것은 의미가 없습니다.

scp그러나 이것이 뭔가 잘못되었다는 것을 알려주지는 않는지 확인하고 싶을 것입니다 . 오류 메시지가 있어야 하지만, scp뭔가 잘못되면 0이 아닌 종료 코드가 반환된다는 것이 신뢰할 수 있는 지표입니다.

scp보다 정확하게는 0(즉, 성공 상태 코드)을 반환하면 파일이 올바르게 전송되었음을 알 수 있습니다.종료 상태가 0인지 확인하십시오.그럼에도 불구하고 명령을 실행할 때 필요합니다. 오류 상태를 반환 하거나 scp, 신호에 의해 종료되거나, 시스템 충돌이나 런타임 시 전력 손실로 인해 종료되지 않는 경우에는 보장할 수 없습니다. 특히, scp파일은 최종 이름까지 직접 복사되기 때문에 시스템 충돌 시 부분적인 파일만 남게 될 수도 있습니다. 복사된 부분은 올바른 것으로 보장되지만 파일이 잘릴 수 있습니다.

안정성을 높이려면 scp 대신 rsync를 사용하세요. 달리 지시하지 않는 한, rsync는 임시 파일에 쓰고 완료되면 해당 파일을 제자리로 이동합니다. 따라서 rsync가 성공 코드를 반환하면 파일이 존재하고 정확하고 완전한 복사본이라는 것을 알 수 있습니다. rsync가 오류 코드를 반환하지 않으면 파일이 존재하지 않는 것입니다(이 경우 이전 버전의 파일이 존재하지 않는 한). 이전 버전은 수정되지 않습니다).

답변2

저는 손상 문제를 겪은 적이 없지만 scp걱정된다면 언제든지 md5sum <filename>두 시스템에서 실행하여 동일한지 확인할 수 있습니다.

답변3

@david-king이 제안한 대로 md5전송 후 파일 무결성을 확인하기 위한 기본 솔루션은 다음과 같습니다. 로컬 컴퓨터에서 한 번, cd원격 호스트에서 한 번 다음 명령을 실행합니다. 성공적인 전송 후 결과 해시 값은 동일해야 합니다./source/foldercd/destination/folderfind . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum

고쳐 쓰다: ~에 따르면이 답변유제서버 장애, scp파일 무결성을 보장하지 않습니다(확인하시기 바랍니다이 답변자세한 내용은 @Gilles가 작성함) 전송 후 파일 해시를 확인하는 것 외에도 rsync파일을 전송하고 반환 코드를 확인하는 데 사용할 수도 있습니다.

업데이트 2:다음은 전송 후 파일과 해당 크기가 일치하는지 확인합니다.find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum

관련 정보