rsync 명령을 사용하고 차분·완전 백업을 사용하면

4844 단어 rsync
안녕하세요. 히타치 제작소 OSS 솔루션 센터의 신산직입니다.
일리야그룹 OSS Advent Calendar 2018의 11일째를 쓸 수 있게 허락해 주세요.
나는 회사 내부 시스템의 설계, 구축, 운용 등 업무를 책임진다.
이번에는 운용에 없어서는 안 될 백업,'rsync 명령(과cron)만 통해 차분·완전 백업'을 얻는 방법에 대해 소개한다.

개시하다


사전 요구 사항:
  • 공식 환경 1, 2대의 소형 환경
  • 미션 크리티컬이 아님
  • CentOS 7.x 운영 체제
  • 수백 G~T가량의 파일을 백업
  • 일주일에 한 번씩 전체 백업을 하고 싶고 매일 차분 백업을 하고 싶다
  • 상업용 제품부터 백업 목적의 OSS까지 백업하는 소프트웨어가 많다.
    이번에는 rsync를 이용해서(이번에는 2018/12/11시 CentOS 7.5에 설치할 수 있는 rsync version 3.1.2 protocol version 31을 사용했다.)

    rsync


    rsync는 오래된 원격 파일 디렉터리를 동기화하는 도구입니다.
    전용 프로토콜을 통해 고속 동기화를 실현할 수 있고 SSH를 통해 동기화를 할 수 있으며 동기화에 관해서는 매우 중요한 도구이다.
    참조:
  • https://linux.die.net/man/1/rsync
  • https://tech.nikkeibp.co.jp/it/article/COLUMN/20070822/280151/
  • 일반적인 용도는 동기화 원본, 목표 디렉터리를 지정하고 복사 파일의 수량과 내용이 일치하지만 하드 링크를 이용한 차분 백업 기능도 있다. 이 기능을 이용하면 고급 완전 백업과 차분 백업을 할 수 있다.

    전체 백업

    rsync -a --delete src/ dest/
    
    - a 옵션은 "압축 파일 모드"로 복사하는 옵션으로 디렉터리나 파일을 이 메타데이터를 포함하는 방식으로 동기화하는 옵션입니다.
    -- delete는 삭제된 파일이 있을 때 동기화 대상에서 파일을 삭제하는 옵션입니다.
    참고:
    rsync는 경로를 지정할 때/path/to/또는/path/to를 지정하느냐에 따라 동작을 변경합니다.전자는/path/to 디렉터리의 모든 내용을 대상으로 하고 후자는/path/to 디렉터리를 대상으로 한다.만약 이 지정을 잘못하면, 차분 백업을 사용할 때 디렉터리 구조가 일치하지 않아 문제가 발생할 수 있습니다. (실제로는 끼워 넣은 것입니다.)

    차등 백업

    rsync -a --delete --link-dest=/path/link_dest/ /path/src/ /path/dest/
    
    거의 전체 백업과 마찬가지로 --link-dest 옵션이 추가되었습니다.
    이 옵션을 선택하면 수정되지 않은 파일이 삭제됩니다dest/와/path/dest/공유 (하드 링크를 통해 파일 복사).
    디스크 소비는/path/link-dest에서 백업된 시간에서 명령을 실행하는 시간까지만 변경된 파일입니다.

    일반적으로 복구 차등 백업 시 복구 작업 필요
    이 방법으로 차분 백업을 할 때 파일 시스템에서/path/src/와/path/dest/는 완전한 디렉터리 구조를 유지하기 때문에 차분 백업을 참고할 때 특별한 조작이 필요 없고 간단한 파일 조작을 통해 참고할 수 있습니다.

    백업 활용


    cron에서 정기적으로 실행을 통해 자동으로 백업을 가져옵니다.
  • 일주일에 한 번
  • 전체 백업
  • 매일(전체 백업 제외)
  • 전체 백업에서 차등 백업 획득
  • 각 스크립트의 이미지는 다음과 같습니다.
    실제 스크립트는 기존 백업과 알림 등을 삭제하기 위한 것으로, 더욱 복잡한 내용을 활용하기 위해 이번 설명을 중심으로 게재된다.
    crontab (그림)
    /etc/crontab
    # 完全バックアップ
    30  4   *   *   6   root    COMMAND=/commands/full_backup.sh
    # 差分バックアップ
    30  4   *   *   1-5 root    COMMAND=/commands/incremental_backup.sh
    
    /commands/full_backup.sh (그림)
    /commands/full_backup.sh
    #!/bin/bash
    
    SRC=/var/my-system/
    
    SSH_TO=user@hostname
    DEST=/backup/full/$(date "+%Y%m%d-%H%M%S")
    
    rsync -a --delete -e ssh $SRC $SSH_TO:$DEST
    
    /commands/incremental_backup.sh (그림)
    /commands/incremental_backup.sh
    #!/bin/bash
    
    SRC=/var/my-system/
    
    SSH_TO=user@hostname
    DEST=/backup/incremental/$(date "+%Y%m%d-%H%M%S")
    
    BASE=`ssh $SSH_TO "ls /backup/full/ | tail -n 1"`
    
    rsync -a --delete -e ssh --link-dest=$BASE $SRC $SSH_TO:$DEST
    
    SSH를 통해 동기화하려면 -e ssh를 지정합니다.또한 자동 실행 시 암호 인증을 사용할 수 없기 때문에 키 등록을 미리 해야 한다.

    총결산


    실제 백업 솔루션에 추가할 필요는 없지만 백업을 자주 수행하고 싶습니다.그럼에도 불구하고 디스크 용량을 절약하고 싶습니다.
    이러한 상황에서 rsync를 사용하는 백업 방법을 소개했습니다.여러분을 도울 수 있다면 다행입니다.

    좋은 웹페이지 즐겨찾기