지난 주에 200MB 파일을 원격 컴퓨터로 전송하려고 했습니다. 그런 다음 30MB 파일을 얻었습니다. 오늘 나는 전체 디렉토리에 대해 scp를 시도했고 많은 파일을 잃었습니다.
scp는 정상인가요? 이런 일이 발생하는 것을 방지하는 방법은 무엇입니까?
편집하다:
scp 파일에 Expect 스크립트를 작성했는데, 관련이 있나요?
이 스크립트는 매우 간단합니다.
#!/usr/bin/expect
set file [lindex $argv 0];
set ip [lindex $argv 1];
spawn scp -r $file $ip
expect {
"*password*" {send "password\r"}
"*(yes/no)?*" {send "yes\r";exp_continue}
}
expect eof
오류 메시지는 없지만 복사되지 않은 파일이 누락되었습니다.
답변1
scp는 복사가 올바르게 수행된다는 것을 보장하지 않습니다. 어떤 소프트웨어도 복사가 올바르게 수행된다는 것을 보장할 수 없습니다. 정전이나 네트워크 장애, 소스 파일을 읽을 수 없게 되거나 대상 볼륨이 가득 찰 가능성은 항상 존재합니다.
파일 복사 소프트웨어가 할 수 있는 최대한의 일은 종료 시 복사본이 정확하거나 소프트웨어가 오류를 보고한다는 것을 보장하는 것입니다. 오류를 확인하는 신뢰할 수 있는 방법은 프로세스의 반환 상태를 확인하는 것입니다. 0은 성공을 의미하고 다른 값은 오류를 의미합니다. 절반 정도의 프로그램과 마찬가지로 scp는 성공하면 0을 반환하고 실패하면 0이 아닌 값을 반환합니다.
Expect 스크립트는 반환 상태를 확인하지 않으므로 scp
scp가 복사가 성공했음을 알려줬는지 알 방법이 없습니다.
여기서 Expect는 유용한 도구가 아닙니다. 넌 정말 그래야 해공개 키 인증 사용. 정말로 키를 설정할 수 없다면 다음을 사용하십시오.SSH패스직접 굴리는 대신.
또는 다음을 사용해야 합니다.동기화scp 대신 Rsync에는 한 가지 주요 이점이 있습니다. 복제가 중단된 경우 다시 실행할 수 있으며 중단된 부분부터 다시 시작됩니다. 다음과 같은 타당한 이유가 없는 한 타임스탬프와 기타 메타데이터를 보존하도록 지시하십시오.
rsync -a SOURCE/ DESTINATION/