그래서 우리는 직장에서 이전 서버에서 새 서버로 많은 파일을 복사해야 합니다. 각각 약 200,000개의 파일이 포함되어 있고 누적 크기가 20GB가 넘는 두 개의 데이터 백업을 전송해야 했습니다. 작은 파일은 많고 큰 파일은 없으므로 scp 이 전송을 수행하는 올바른 방법이라고 생각합니다.
그러나 원격으로 server2에 ssh를 접속하고 server1의 파일을 scp로 연결하면 터미널에서 해당 파일에 액세스하는 것을 볼 수 있습니다. 그런데 퇴사할 때 WiFi 연결을 끊어야 해서 이제 단말기에 배관이 끊어진 모습이 보입니다. 따라서 scp 프로세스가 아직 실행 중인지, 얼마나 남았는지 알 방법이 없습니다. 시간이 지남에 따라 디렉터리 크기를 변경할 수 있지만 더 좋은 방법이 있는지 궁금합니다. 내 터미널에서 실행 중인 프로세스를 표시할 수 있나요?
첫 번째 데이터세트에 대해 이 작업을 수행했지만 아직 두 번째 데이터세트에 대한 프로세스를 시작하지 않았습니다. 대규모 SCP와 관련된 문제를 방지/해결하기 위해 명령을 실행하기 전/실행하는 동안 무엇을 할 수 있나요?
게다가 이게 며칠이나 지속될 것 같나요? 중요한 경우 한 서버는 AWS이고 다른 서버는 Google입니다.
답변1
사용 rsync
.
rsync -av --progress /from/dir/ server:/to/dir/
답변2
@hschou님이 답변하지 못한 다양한 부분에 대해 답변해드리겠습니다.
따라서 scp 프로세스가 아직 실행 중인지, 얼마나 남았는지 알 방법이 없습니다.
내 터미널에서 실행 중인 프로세스를 표시할 수 있나요?
실행 중인 프로세스 목록을 얻으려면 다음 명령을 사용할 수 있습니다 ps
(매뉴얼 페이지)
ps aux | grep scp
이를 모니터링하려면 명령을 사용 watch
하거나 간단한 루프를 직접 만들 수 있습니다.
while true; do clear; ps aux | grep scp; sleep 5; done
이는 ps aux | grep scp
5초마다 실행됩니다.
답변3
좋은 성능을 얻기 위해 scp를 사용하면 백그라운드 프로세스를 사용하여 쉘 스크립트에서 큰(작은) 파일을 보낼 수 있습니다.
filename 및 filename.done과 같은 세마포어(태그) 파일을 사용합니다. 수신 작업에서 filename.done을 확인하면 filename이 완전히 전송되었음을 알 수 있습니다.
쉘 스크립트는 입력 디렉토리에서 파일 쌍을 가져와 작업 디렉토리로 이동하고 백그라운드 기능을 실행하여 쌍을 전송할 수 있습니다.
백그라운드 기능은 scp 명령을 통해 쌍을 전송하므로 작업은 [준] 원자적이며 scp 반환 코드를 확인합니다. 성공하면 백업 위치로 이동하고 종료합니다. 실패하면 다시 시도할 때 선택할 수 있도록 원래 입력 디렉터리로 다시 이동합니다. 소프트 오류를 처리하는 편리한 방법입니다.
동시 하위 프로세스 수에 대한 제한을 구성합니다. 몇 개를 시작하고 실행 중인 PID 수(pstree)를 확인하고 필요한 경우 하위 PID 수를 제한 내에서 유지하기 위해 기다립니다.
로깅 기능을 최대한 활용하는 것이 도움이 될 수 있습니다.