10GB가 넘는 거대한 디렉터리를 압축하고 있는데, 압축하는 데 시간이 걸립니다. 하지만 그동안 다른 새 서버에 다운로드해야 합니다.
그러면 압축이 진행되는 동안 다른 서버에서 파일을 다운로드할 수 있나요? 다운로드 후 정상적으로 사용이 가능한가요?
답변1
tar, gzip, tee, nc를 사용하여 서버에 하나, 클라이언트에 하나라는 두 가지 명령으로 이 모든 작업을 수행할 수 있습니다.
서버에서:
tar cf - dirname/ | gzip -c - |tee dirname.tar.gz | nc -l 3333
클라이언트에서
nc serveraddress 3333 > dirname.tar.gz
nc는 네트워크에서 사용되는 cat처럼 동작하는 유용한 도구인 netcat을 나타냅니다.
nc -l 3333
로컬 포트 3333에 청취 소켓이 생성되고 stdin의 내용이 여기에 연결하는 사용자에게 스트리밍됩니다.
nc serveraddress 3333
서버에 대한 TCP 연결은 포트 3333에서 설정되고 소켓 연결에서 수신된 모든 내용은 stdout으로 스트리밍됩니다.
이는 다양한 명령 체인(예: tar/gzip/tee...)을 실행하는 동안 다른 컴퓨터에서 파일을 전송하는 매우 간단한 방법입니다.
답변2
rsync
기존 압축 프로세스를 다운로드할 수 있는지 확실하지 않지만 이 --inplace
지시문 과 함께 사용할 수 있습니다 . 호스트가 압축 프로세스를 완료할 때까지 이 작업을 반복해야 합니다. 압축이 완료된 후 변경 사항의 최종 델타를 얻으려면 압축을 다시 수행해야 합니다.
또 다른 방법은 아카이브를 생성할 때 파일 다운로드를 직접 시작하는 것입니다.
ssh user@host "tar cf - /path/to/files|gzip -c -| \
tee /path/to/compressed_file" > /path/to/local_compressed_file
위의 명령은 tar
에 아카이브를 생성하고 stdout
, 스트림을 압축하고, 파일을 호스트에 쓰는 데 stdout
사용하고 , 다시 로컬 복사본에 저장할 수 있습니다.tee
stdout