scp가 완료되면 파일 손상을 확인해야합니까?


17

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

scp -rp /source/folder myremoteusername@122.10.12.123:/destination/folder

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


stderr에 0이 아닌 종료 상태 scp와 그에 수반되는 오류 메시지가 표시 되지 않으면 모든 것이 올 바르고 완전히 복사 된 것입니다.
roaima

내 게시물에 약간의 tl; dr : 가능 rsync하다면 사용 하십시오. 트랜잭션이 완료된 후 모든 파일에 대한 유효성 검사를 복사하므로 조금 더 안전하게 사용하는 것이 좋습니다.
polemon

답변:


24

scp상대방이 보낸 모든 데이터를 복사했는지 확인합니다. 전송의 무결성은 암호화 채널 프로토콜에 의해 보장됩니다. 따라서 전송 후 무결성을 확인할 필요가 없습니다. 그것은 중복 될 것이고, 비교하는 데이터가 캐시에서 읽혀지기 때문에 하드웨어 오류를 잡을 가능성이 거의 없습니다. 데이터를 정기적으로 확인하는 것이 유용 할 수 있지만 전송 후 즉시 확인하는 것은 의미가 없습니다.

그러나 scp무언가 잘못되었다는 것을 알려주지 않도록해야합니다 . 오류 메시지가 있어야하지만 신뢰할 수있는 표시기는 문제 scp가 발생한 경우 0이 아닌 종료 코드 를 반환 한다는 것입니다.

보다 정확하게 scp는 0을 리턴 하면 (즉, 성공 상태 코드) 파일이 올바르게 전송되었음을 알 수 있습니다. 어쨌든 명령을 실행할 때 종료 상태가 0 인지 확인해야합니다. 만약 scp반환 오류 상태, 또는이 신호에 의해 죽인 경우, 또는 시스템이 충돌하거나 실행중인 동안, 당신은 보장이없는 전원 공급이 중단 있기 때문에 결코 죽지합니다. 특히 scp파일을 최종 이름으로 직접 복사하므로 시스템 충돌시 부분 파일로 끝날 수 있습니다. 복사 된 부분은 정확하지만 파일이 잘릴 수 있습니다.

안정성을 높이려면 scp 대신 rsync를 사용하십시오. 별도의 지시가없는 한, rsync는 임시 파일에 기록하고 완료되면 제 위치로 이동합니다. 따라서 rsync가 성공 코드를 반환하면 파일이 있고 올 바르고 완전한 사본임을 알 수 있습니다. rsync가 오류 코드를 반환하지 않으면 파일이 없습니다 (이전 버전의 파일이없는 경우 이전 버전은 수정되지 않음).


3

나는 scp무언가 후에 부패에 대해 아무런 문제가 없었지만 걱정이된다면 항상 md5sum <filename>두 시스템에서 모두 동일하게 작동 할 수 있습니다 .


3

@ david-king의 제안에 따르면, md5전송 후 파일의 무결성을 확인하기위한 기반 솔루션입니다. 한 번 한 후 다음 명령을 실행 cd에 보내고 /source/folder후 로컬 컴퓨터에서 한 번 cd에 보내고 /destination/folder원격 호스트 : find . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum. 성공적인 전송 후 결과 해시가 동일해야합니다.

최신 정보: 에 따르면 이 답변 에 비슷한 질문 에 Serverfault , scp하지 보장 파일의 무결성을한다(자세한 내용은 @Gilles 에서이 답변 을 확인 하십시오). 파일 해시의 전송 후 검사 대신 파일 rsync을 전송하고 리턴 코드를 확인할 수 있습니다 .

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


2
scp가 0을 반환하면 무결성 보장됩니다. 또한 scp가 0을 반환하지 않으면 문제는 일반적인 손상이 아니라 특히 잘리는 것입니다. 파일 크기 확인이 충분한 지 확인하십시오 (이전 버전의 대상 파일이없는 경우 : scp가 매우 일찍 중단 된 경우 이전 버전이 여전히 존재할 수 있음). 여기서 체크섬을 확인하는 것은 시간 낭비입니다.
Gilles 'SO- 악마 그만'

공정한. 내 답변을 업데이트했습니다.
Mani M

근본적인 결함을 수정하지 않았습니다. 검사 scp의 리턴 코드 충분하고, 해시를 확인하는 것은 쓸모가 없다.
Gilles 'SO- 악의를 그만두십시오'

1
scp0을 반환 하더라도 파일 시스템이 엉망이되지 않았 음을 보증하지 않으므로 누군가가 scpover 를 사용하기로 선택한 경우 해시 확인은 여전히 ​​중요한 데이터의 무결성을 확인하는 데 유용합니다 rsync.
Mani M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.