홈페이지 » 어떻게 » Rsync로 데이터를 동기화하는 비 초보자 가이드

    Rsync로 데이터를 동기화하는 비 초보자 가이드

    rsync 프로토콜은 일반 백업 / 동기화 작업에 사용하기가 매우 쉽지만 고급 기능 중 일부는 사용자를 놀라게 할 수 있습니다. 이 기사에서는 가장 큰 데이터 호더 및 백업 애호가까지 모두 데이터 중복성 요구 사항에 대한 단일 솔루션으로 rsync를 활용할 수있는 방법을 보여줍니다.

    경고 : 고급 괴짜 전용

    "실제로 rsync가 무엇일까?"또는 "정말 간단한 작업에만 rsync를 사용합니다"라고 생각하면 rsync를 사용하여 Linux에서 데이터를 백업하는 방법에 대한 이전 기사를 확인하십시오. rsync에 대한 소개, 설치 과정을 안내하고보다 기본적인 기능을 소개합니다. rsync를 사용하는 방법에 대한 확실한 이해 (정직하게도 그렇게 복잡하지는 않음)와 Linux 터미널에 익숙하면 이제이 고급 가이드로 이동할 준비가되었습니다..

    Windows에서 rsync 실행하기

    먼저 Windows 개발자를 Linux 전문가와 같은 페이지로 만들어 봅시다. rsync는 Unix 계열 시스템에서 실행되도록 제작되었지만 Windows 에서처럼 쉽게 사용할 수는 없습니다. Cygwin은 rsync를 실행하는 데 사용할 수있는 멋진 Linux API를 제작하므로 컴퓨터에 따라 웹 사이트로 이동하여 32 비트 또는 64 비트 버전을 다운로드하십시오..

    설치가 간단합니다. "Select Packages"화면이 나타날 때까지 모든 옵션을 기본값으로 유지할 수 있습니다.

    이제 Vim 및 SSH에 대해 동일한 단계를 수행해야하지만 패키지를 선택하면 패키지가 조금 다르게 보일 것입니다. 다음은 일부 스크린 샷입니다.

    Vim 설치 :

    SSH 설치 :

    이 세 가지 패키지를 선택한 후에는 설치가 완료 될 때까지 다음을 계속 클릭하십시오. 그런 다음 설치 프로그램이 바탕 화면에 놓은 아이콘을 클릭하여 Cygwin을 열 수 있습니다.

    rsync 명령 : 단순에서 고급까지

    이제 Windows 사용자가 같은 페이지에 있으므로 간단한 rsync 명령을 살펴보고 고급 스위치를 사용하면 어떻게 복잡하게 만들 수 있는지 보여줍니다..

    백업해야하는 파일이 많이 있다고 가정 해 봅시다. 요즘에는 그렇지 않은 사람이 있습니까? 휴대용 하드 드라이브를 연결하여 컴퓨터 파일을 백업하고 다음 명령을 실행하십시오.

    rsync -a / home / 괴짜 / 파일 / / mnt / usb / 파일 /

    Cygwin을 사용하여 Windows 컴퓨터에서 보일 수도 있습니다.

    rsync -a / cygdrive / c / files / / cygdrive / e / files /

    아주 간단하고, 그 시점에서 rsync를 사용할 필요가 없습니다. 파일을 드래그 앤 드롭 할 수 있기 때문입니다. 그러나 다른 하드 드라이브에 이미 일부 파일이 있고 마지막 동기화 이후에 만들어진 파일과 업데이트 된 버전 만 필요한 경우이 명령은 새 데이터를 하드 드라이브로 보내기 때문에 유용합니다. 대용량 파일의 경우 특히 인터넷을 통해 파일을 전송할 때 큰 문제입니다..

    파일을 외장 하드 드라이브에 백업 한 다음 컴퓨터와 동일한 위치에 하드 드라이브를 보관하는 것은 매우 나쁜 생각이므로 인터넷을 통해 파일을 다른 컴퓨터로 보내기 시작하는 데 필요한 것이 있는지 살펴 보겠습니다. 당신이 임대 한 사람, 가족 구성원 등).

    rsync -av --delete -e 'ssh -p 12345'/ home / geek / files / [email protected] : / home / geek2 / files /

    위의 명령은 IP 주소가 10.1.1.1 인 다른 컴퓨터로 파일을 보냅니다. 소스 디렉토리에 더 이상 존재하지 않는 대상에서 불필요한 파일을 삭제하고, 전송중인 파일 이름을 출력하여 진행 상황을 파악하고, 포트 12345에서 SSH를 통한 rsync 터널링.

    그만큼 --v -e --delete 스위치는 가장 기본적이고 일반적으로 사용되는 스위치입니다. 이 자습서를 읽는다면 이미 그들에 대해 잘 알고 있어야합니다. 가끔 무시되지만 믿을 수 없을만큼 유용한 다른 스위치를 살펴 보겠습니다.

    --진행 - 이 스위치를 사용하면 각 파일의 전송 진행 상황을 볼 수 있습니다. 인터넷을 통해 대용량 파일을 전송할 때 특히 유용하지만 고속 네트워크를 통해 작은 파일을 전송할 때 무의미한 정보를 출력 할 수 있습니다.

    rsync 명령에 --진행 백업 진행 중 스위치 :

    --부분적인 - 이 스위치는 인터넷을 통해 대용량 파일을 전송할 때 특히 유용합니다. 파일 전송 도중에 rsync가 중단 된 경우 부분적으로 전송 된 파일은 대상 디렉토리에 보관되고 rsync 명령이 다시 실행되면 중단 된 위치에서 전송이 다시 시작됩니다. 인터넷을 통해 대용량 파일을 전송할 때 (몇 기가 바이트), 몇 초간의 인터넷 중단, 파란 화면 또는 파일 전송시 인적 오류가 발생하는 것보다 더 나쁜 것은 없습니다..

    -피 - 이 스위치는 --진행--부분적인, 그래서 대신 그것을 사용하여 rsync 명령을 조금 더 깨끗하게 만들 것입니다..

    -지 또는 --압박 붕대 - 이 스위치를 사용하면 rsync가 전송되는 파일 데이터를 압축하므로 대상으로 보내야하는 데이터 양이 줄어 듭니다. 실제로는 꽤 일반적인 스위치이지만, 느린 연결 사이의 전송에 대해서만 당신에게 정말로 도움이되는 것은 필수적이지 않습니다. 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

    -h 또는 --인간이 읽을 수있는 - 당신이 --진행 스위치를 사용하는 경우에도이 스위치를 사용하는 것이 좋습니다. 즉, 즉석에서 바이트를 메가 바이트로 변환하는 것을 원하지 않는다면 말입니다. 그만큼 -h 스위치는 출력 된 모든 숫자를 사람이 읽을 수있는 형식으로 변환하므로 실제로 전송되는 데이터의 양을 이해할 수 있습니다.

    -엔 또는 --드라이 런 - 이 스위치는 rsync 스크립트를 처음 작성하고 테스트 할 때 알아야합니다. 시험 가동을 수행하지만 실제로 변경하지는 않습니다. 변경 사항은 정상적으로 출력되므로 모든 내용을 검토하고 스크립트를 제작에 적용하기 전에 제대로 표시되는지 확인하십시오.

    -아르 자형 또는 --상대적인 - 이 스위치는 대상 디렉토리가 아직없는 경우 사용해야합니다. 이 가이드의 뒷부분에서이 옵션을 사용하여 폴더 이름에 타임 스탬프가있는 대상 컴퓨터의 디렉터리를 만들 수 있습니다.

    --제외 자 - 이 스위치는 백업하지 않으려는 디렉터리 경로가 포함 된 제외 목록에 연결하는 데 사용됩니다. 각 행에 디렉토리 또는 파일 경로가있는 일반 텍스트 파일 만 있으면됩니다..

    --포함시키다 - 비슷하다 --제외 자, 백업 할 데이터의 디렉토리 및 파일 경로가 포함 된 파일로 연결됩니다.

    --통계 - 실제로 중요한 스위치는 아니지만 시스템 관리자 인 경우 네트워크를 통해 전송되는 트래픽 양을 모니터링 할 수 있도록 각 백업의 자세한 통계를 파악하는 것이 편리 할 수 ​​있습니다..

    --로그 파일 - 이렇게하면 rsync 출력을 로그 파일로 보낼 수 있습니다. 자동 출력을 위해 출력물을 직접 읽을 필요가없는 자동화 된 백업에는이 방법을 권장합니다. 여유 시간에 항상 로그 파일을 제공하여 모든 것이 제대로 작동하는지 확인하십시오. 또한 시스템 관리자가 사용할 수있는 중요한 스위치이기 때문에 인턴을 담당하면서 백업 실패에 대해 궁금해하지 않아도됩니다..

    이제 rsync 명령을 살펴보고 몇 가지 추가 스위치가 추가되었습니다.

    rsync -avzhP --delete --stats --log-file = / home / geek / rsynclogs / backup.log --exclude-from '/home/geek/exclude.txt'-e 'ssh -p 12345'/ home / geek / files / [email protected] : / home / geek2 / files /

    명령은 여전히 ​​간단하지만 괜찮은 백업 솔루션을 만들지 못했습니다. 우리의 파일은 현재 서로 다른 두 위치에 있지만,이 백업은 데이터 손실의 주요 원인 중 하나 인 인간의 오류로부터 우리를 보호하지 못합니다..

    스냅 샷 백업

    실수로 파일을 삭제하면 바이러스가 파일을 손상 시키거나 파일이 바람직하지 않게 변경되어 rsync 백업 스크립트를 실행하면 백업 된 데이터가 원하지 않는 변경으로 덮어 씁니다. 이러한 문제가 발생했을 때 (때가 아닐 때) 백업 솔루션은 데이터 손실로부터 사용자를 보호하지 못했습니다..

    rsync를 만든 사람은 이것을 깨닫고 --지원--백업 디렉토리 인수를 사용하여 사용자가 차등 백업을 실행할 수 있습니다. rsync의 웹 사이트에있는 첫 번째 예제는 7 일마다 전체 백업이 실행되는 스크립트를 보여줍니다. 그런 다음 해당 파일의 변경 사항을 매일 다른 디렉토리에 백업합니다. 이 방법의 문제점은 파일을 복구 할 때 효과적으로 복구해야한다는 것입니다. 또한 대부분의 괴짜들은 하루에 여러 번 백업을 실행하므로 주어진 시간에 20 개 이상의 다른 백업 디렉토리를 쉽게 가질 수 있습니다. 이제는 파일을 복구하는 것이 어려울뿐만 아니라 백업 된 데이터를 살펴 보는 것 또한 시간이 많이 걸릴 수 있습니다. 파일을 마지막으로 백업 한 복사본을 찾으려면 파일을 마지막으로 변경 한 시간을 알아야합니다. 무엇보다도, 매주 (또는 경우에 따라서는 적지 만) 증분 백업 만 실행하는 것은 비효율적입니다..

    스냅 샷 백업! 스냅 샷 백업은 증분 백업 이상의 것이지만 하드 링크를 사용하여 원본 소스의 파일 구조를 유지합니다. 처음에는 머리를 감싸기가 어려울 수 있으므로 예제를 살펴 보겠습니다..

    2 시간마다 데이터를 자동으로 백업하는 백업 스크립트를 실행하는 척하십시오. rsync가이 작업을 수행 할 때마다 백업의 이름을 다음과 같이 지정합니다. 백업 - 월 - 일 -시 - 시간.

    그래서 결국 전형적인 날에 다음과 같이 대상 디렉토리에 폴더 목록이 생깁니다.

    이러한 디렉토리 중 하나를 탐색 할 때 원본 디렉토리의 모든 파일을 그 당시와 똑같이 볼 수 있습니다. 그러나 두 개의 디렉토리에서 중복 된 내용은 없습니다. rsync는 하드 링크를 통해 --link-dest = DIR 논의.

    물론, 이러한 멋지게 깔끔하게 만든 디렉토리 이름을 갖기 위해서는 우리의 rsync 스크립트를 약간 강화해야 할 것입니다. 다음과 같은 백업 솔루션을 구현하기 위해 필요한 사항을 살펴본 다음 스크립트에 대해 자세히 설명하겠습니다.

    #! / bin / bash

    #copy old time.txt to time2.txt

    예 | cp ~ / backup / time.txt ~ / backup / time2.txt

    # 이전 시간 .txt 파일을 새 시간으로 덮어 씁니다.

    echo 'date + "% F- % I % p"'> ~ / backup / time.txt

    #make 로그 파일

    echo ""> ~ / backup / rsync-wouldate + "% F- % I % p" '. 로그

    #rsync 명령

    rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - 삭제 --log- 파일 = ~ / 백업 / rsync-wouldate + "% F- % I % / home / geek2 / files / 'cat ~ / backup / time2.txt'-e 'ssh -p 12345'/ home / geek2 / files / 'cat ~ / backup / time2.txt' / geek / files / [email protected] : / home / geek2 / files / 'date + "% F- % I % p"'/

    # 로그 파일을 scp하고 백업과 함께 저장하는 것을 잊지 마라.

    scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt '.log [email protected] : / home / geek2 / files / 'cat ~ / backup / time.txt'/ rsync-'cat ~ / backup / time.txt'.log

    전형적인 스냅 샷 rsync 스크립트입니다. 우리가 당신을 어딘가에서 잃어버린 경우에, 조각별로 조각을 해봅시다.

    스크립트의 첫 번째 줄은 time.txt의 내용을 time2.txt로 복사합니다. 예 파이프는 파일을 덮어 쓸 것인지 확인하는 것입니다. 다음으로 현재 시간을 time.txt에 넣습니다. 이 파일들은 나중에 편리하게 사용할 수 있습니다..

    다음 줄은 rsync-date.log (date는 실제 날짜와 시간 임)라는 rsync 로그 파일을 만듭니다..

    이제 우리가 경고해온 복잡한 rsync 명령 :

    -avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest - 이전에 우리가 얘기했던 스위치들. 원기를 회복해야한다면 위로 스크롤하십시오..

    --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - 이것들은 대상 디렉토리에 대한 권한입니다. rsync 스크립트 중간에이 디렉토리를 만들고 있기 때문에 사용자가 파일을 쓸 수 있도록 권한을 지정해야합니다.

    날짜 및 cat 명령 사용

    우리는 rsync 명령 내에서 날짜와 cat 명령을 사용하는 순서대로 순서대로 진행할 것입니다. 참고 :이 기능을 구현하는 다른 방법이 있음을 알고 있습니다. 특히 변수 선언을 사용하는 경우에는 그렇지만이 가이드에서는이 방법을 사용하기로 결정했습니다..

    로그 파일은 다음과 같이 지정됩니다.

    ~ / backup / rsync-wouldate + "% F- % I % p" '. 로그

    또는 다음과 같이 지정할 수 있습니다.

    ~ / backup / rsync-'cat ~ / backup / time.txt '.log

    어느 쪽이든, --로그 파일 명령은 이전에 생성 된 날짜가 기록 된 로그 파일을 찾아서 쓸 수 있어야합니다..

    링크 대상 파일은 다음과 같이 지정됩니다.

    --link-dest = / home / geek2 / files / 'cat ~ / backup / time2.txt'

    이것은 --링크 목적지 명령에 이전 백업의 디렉토리가 제공됩니다. 2 시간마다 백업을 실행하고이 스크립트를 실행 한 시점의 오후 4 시가되면 --링크 목적지 명령은 오후 2시에 작성된 디렉토리를 찾고 그 이후에 변경된 데이터 만 전송합니다 (있는 경우).

    다시 말하면, time.txt가 스크립트 시작 부분에 time2.txt로 복사되는 것이므로 --링크 목적지 명령은 나중에 그 시간을 참조 할 수 있습니다..

    대상 디렉토리는 다음과 같이 지정됩니다.

    [email protected] : / home / geek2 / files / 'date + "% F- % I % p"'

    이 명령은 단순히 소스 파일을 현재 날짜 및 시간의 제목이있는 디렉토리에 넣습니다.

    마지막으로, 로그 파일의 사본이 백업 내부에 있는지 확인합니다.

    scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt '.log [email protected] : / home / geek2 / files / 'cat ~ / backup / time.txt'/ rsync-'cat ~ / backup / time.txt'.log

    우리는 포트 12345에서 보안 복사를 사용하여 rsync 로그를 가져 와서 적절한 디렉토리에 저장합니다. 올바른 로그 파일을 선택하고 올바른 위치에 있는지 확인하려면 time.txt 파일을 cat 명령을 통해 참조해야합니다. 왜 우리가 cat 명령을 사용하지 않고 time.txt를 사용하기로 결정했는지 궁금하다면 rsync 명령이 실행되는 동안 시간이 많이 걸릴 수 있으므로 올바른 시간을 갖기 위해 cat 이전에 작성한 텍스트 문서.

    오토메이션

    Linux의 Cron 또는 Windows의 Task Scheduler를 사용하여 rsync 스크립트를 자동화하십시오. 주의해야 할 사항 중 하나는 현재 실행중인 rsync 프로세스를 종료 한 후 새 프로세스를 계속 진행하는 것입니다. 작업 스케줄러는 이미 실행중인 인스턴스를 자동으로 닫는 것처럼 보이지만 Linux의 경우 좀 더 창의적이어야합니다..

    대부분의 Linux 배포판에서는 pkill 명령을 사용할 수 있으므로 rsync 스크립트 시작 부분에 다음을 추가하십시오.

    pkill -9 rsync

    암호화

    아니, 아직 안 끝났어. 우리는 마침내 환상적인 (무료!) 백업 솔루션을 갖추고 있지만 모든 파일은 여전히 ​​도난 당하기 쉽습니다. 다행히 수백 마일 떨어진 곳에 파일을 백업하는 것이 좋습니다. 아무리 멀리 떨어져 있더라도 도난 및 해킹은 항상 문제가 될 수 있습니다..

    이 예에서는 SSH를 통해 모든 rsync 트래픽을 터널링 했으므로 모든 파일이 대상으로 전송되는 동안 암호화됩니다. 그러나 대상을 보안 수준과 동일하게 유지해야합니다. rsync는 데이터가 전송되는 동안 만 암호화하지만 목적지에 도달하면 파일이 크게 열립니다.

    rsync의 가장 좋은 기능 중 하나는 각 파일의 변경 사항 만 전송한다는 것입니다. 모든 파일을 암호화하고 사소한 변경을 한 경우 변경 후 모든 데이터를 완전히 무작위로 암호화 한 결과 전체 파일을 다시 전송해야합니다.

    이러한 이유로 Windows 용 BitLocker 또는 Linux 용 dm-crypt와 같은 일부 유형의 디스크 암호화를 사용하는 것이 가장 쉽고 / 쉽습니다. 이렇게하면 도난시 데이터가 보호되지만 rsync를 사용하여 파일을 전송할 수 있으며 암호화가 성능을 저해하지는 않습니다. rsync와 유사하게 작동하거나 Duplicity와 같은 일부 형식을 구현할 수있는 다른 옵션도 있지만 rsync가 제공해야하는 기능이 부족합니다..

    오프 사이트 위치에서 스냅 샷 백업을 설정하고 원본 및 대상 하드 드라이브를 암호화 한 후에는 rsync 마스터 링 및 가능한 가장 완벽한 데이터 백업 솔루션 구현을 위해 뒤에서 두 드릴 수 있습니다..