나는 우리의 서버 중 하나를 다시 설치해야하고, 예방 차원에서, 나는 이동할 /home
, /etc
, /opt
, 및 /Services
백업 서버에.
그러나 문제가 있습니다. 심볼릭 링크가 많기 때문에 많은 파일이 여러 번 복사됩니다.
scp
심볼릭 링크를 무시 하도록 만들 수 있습니까 (또는 실제로 링크를 디렉토리 나 파일이 아닌 링크로 복사)? 그렇지 않은 경우 다른 방법이 있습니까?
답변:
나는 그것이 가능하다는 것을 알았고 잘못된 도구를 사용했습니다. 나는 rsync로 해냈다.
rsync --progress -avhe ssh /usr/local/ XXX.XXX.XXX.XXX:/BackUp/usr/local/
나는 것을 발견 방법은 (나를 위해, 그러나 나는이 웹 사이트에 대한 작업을 한 대안을 찾을 작동하지 않았다 www.docstore.mik.ua/orellyrsync
).
특히 "O'Reilly : SSH : The Secure Shell. The Definitive Guide"의 섹션 7.5.3 .
7.5.3. 디렉터리의 재귀 복사본
...
scp는 디렉토리를 복사 할 수 있지만 반드시 최선의 방법은 아닙니다. 디렉토리에 하드 링크 또는 소프트 링크가 포함되어 있으면 복제되지 않습니다. 링크는 일반 파일 (링크 대상)로 복사되며, 더 나쁜 경우 순환 디렉토리 링크로 인해 scp1이 무한 반복됩니다. (scp2는 심볼릭 링크를 감지하고 대신 해당 대상을 복사합니다.) 명명 된 파이프와 같은 다른 유형의 특수 파일도 올바르게 복사되지 않습니다. 더 나은 해결책은 특수 파일을 올바르게 처리하는 tar를 사용하여 원격으로 보내는 것입니다. SSH를 통해 압축 해제 할 머신 :
$ tar cf - /usr/local/bin | ssh server.example.com tar xf -
scp
rsync
tar
over ssh
를 발신자와 수신자로 사용 하는 것도 트릭입니다.
cd $DEST_DIR
ssh user@remote-host 'cd $REMOTE_SRC_DIR; tar cf - ./' | tar xvf -
--one-file-system
과 대상 측에 추가했습니다 p
.
한 가지 해결책은 쉘 파이프를 사용하는 것입니다. 약간 더 짧은 이름을 가진 동일한 * .gz 파일에 연결하기 위해 일부 소프트웨어에서 생성 된 일부 * .gz 파일과 심볼릭 링크가있는 상황이 있습니다. 단순히 scp를 사용하면 심볼릭 링크가 일반 파일로 복사되어 중복됩니다. rsync가 심볼릭 링크를 무시할 수 있다는 것을 알고 있지만 내 gz 파일은 동기화 가능한 옵션으로 압축되지 않으며 이러한 gz 파일을 복사 할 때 동기화 속도가 매우 느립니다. 따라서 다음 스크립트를 사용하여 파일을 복사합니다.
find . -type f -exec scp {} target_host:/directory/name/data \;
-f 옵션은 일반 파일 만 찾고 기호 링크를 무시합니다. 소스 호스트에서이 명령을 제공해야합니다. 이것이 내 상황의 일부 사용자에게 도움이되기를 바랍니다. 내가 놓친 것이 있으면 알려주세요.
tar + ssh 명령을 사용하여 서버에서 폴더를 복사하기 위해 클라이언트에서 실행할 수있는 one liner 솔루션입니다.
ssh user@<Server IP/link> 'mkdir -p <Remote destination directory;cd <Remote destination directory>; tar cf - ./' | tar xf - C <Source destination directory>
참고 : mkdir은 필수입니다. 원격 대상 디렉토리가 없으면 명령은 원격 서버의 전체 홈을 압축하여 클라이언트로 추출합니다.