VPS의 데이터를 가정용 PC에 백업(rsync, OpenVPN)

나중에 조사해 보면 상당한 힘 기술 같다. 복원시에는 주의를.

글쎄, 긴급시의 설비용으로.

환경



공통


  • 우분투 15.04
  • OpenVPN 2.3.2
  • rsync 3.1.1

  • VPS


  • 백업 소스.
  • VPN 서버.

  • 집 PC


  • 백업 대상.
  • VPN 클라이언트.
  • 회선의 IP 주소가 고정되어 있지 않습니다.
  • 백업 대상 OS 환경이 VirtualBox에서 시작되었습니다.

  • 준비(OpenVPN)


  • VPN을 연결하십시오.
  • 클라이언트 측 IP 주소를 고정하십시오.

  • 준비 (rsync - 백업 대상)



    rsyncd.conf



    /etc/rsyncd.conf
    uid           = root
    gid           = backup
    log file      = /var/log/rsyncd.log
    pid file      = /var/run/rsyncd.pid
    hosts deny    = *
    dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png
    
    [backup-module-hostname]
    comment      = rsync server for backup
    path         = /mnt/backup/sakuravps/archive
    use chroot   = yes
    hosts allow  = 10.8.0.1
    auth users   = backup-user1
    secrets file = /etc/rsyncd.secrets
    read only    = no
    

    보충 및 메모


  • []
  • 모듈 이름.

  • 위의 모듈 이름의 hostname 부분은 백업 소스의 호스트 이름으로 바뀝니다.
  • 필수 설정은 아니지만, rsync 를 사용한 백업에서는 약간의 실수로 모든 것이 지워 버릴 가능성이 있다. 이것과 auth users 의 설정을 조합하는 것으로, 그러한 사고를 일으키기 어렵게 하는 목적.


  • hosts deny/allow
  • 백업 소스(이 경우 OpenVPN 서버)만 허용됩니다.

  • path
  • 경로에 포함된 디렉토리는 자동으로 작성되지 않습니다. 백업을 실행하기 전에 만들어 둡니다.
  • 이번과 같은 규모의 큰 백업의 경우 백업 전용으로 디스크 또는 가상 디스크를 준비하는 것이 분리하기 쉽다.

  • auth users
  • 액세스를 허용하는 rsync에 대한 사용자.
  • Linux의 사용자와 별도로 관리됩니다.
  • 설정은 후술 rsyncd.secrets 에서.


  • rsyncd.secrets



    /etc/rsyncd.secrets
    backup-user1:password1
    
  • 소유자는/etc/rsyncd.conf 설정과 동일한 uid .
  • 권한은 600 .
  • 패스워드는 평문.

  • 데몬 시작


    rsync --daemon
    
  • 기동중에도, 설정 파일이 변경되면 자동적으로 반영된다.

  • 준비 (rsync - 백업 소스)



    각 파일을 백업 소스 서버의 동일한 디렉토리에 설치.

    실행 스크립트



    backup.sh
    #!/bin/bash
    
    MY_DIR="`readlink -f "$0" | sed 's!/[^/]*$!!'`"
    REMOTE_ADDRESS=10.8.0.5
    REMOTE_MODULE="backup-module-`hostname`"
    REMOTE_PASSWORD=password1
    REMOTE_USER=backup-user1
    LOCAL_DIR=/
    
    RSYNC_PASSWORD=$REMOTE_PASSWORD \
    rsync \
        -aAHXv \
        --bwlimit=20m \
        --delete \
        --delete-excluded \
        --exclude-from="$MY_DIR/exclude.list" \
        --human-readable \
        --progress \
        "$LOCAL_DIR" \
        "rsync://${REMOTE_USER}@${REMOTE_ADDRESS}/${REMOTE_MODULE}"
    
  • 상태의 출력은 필요없다고 하는 경우는 -v 와 --human-readable 와 --progress 를 삭제.

  • 제외 파일



    exclude.list
    /dev/*
    /etc/fstab
    /etc/network/interfaces
    /lost+found
    /media/*
    /mnt/*
    /proc/*
    /ramdisk/*
    /run/*
    /sys/*
    /tmp/*
    /var/lib/apt/lists/*
    

    Ubuntu 환경의 백업으로서는, 기본은 상기를 제외해 두면 괜찮다고 생각한다.

    SSH를 통해 복원하고 싶은 경우는 다음을 작성해 두는 것이 좋을지도. 다만 rsync 에 의한 강제 복원은 위험하기 때문에 비추천.

    exclude.list
    /etc/ssh/ssh_host_*
    

    그 외, 전체 백업에 의존하지 않고 따로 관리하고 싶은 것이 있는 경우는 적는다.

    실행



    백업원에서 가동하고 있는 서버를 일단 떨어뜨려, 백업원의 스크립트를 실행.

    처음에는 스크립트를 다시 작성하고 --dry-run으로 실행하는 것이 좋습니다.

    참고



    OpenVPN



  • How To | OpenVPN.JP
  • VPN 서버 구축(OpenVPN) - Fedora로 집 서버 구축

  • rsync


  • 사쿠라 VPS에서 상위 플랜으로 전환하는 절차 - 사쿠라 인터넷 창업 일기
  • rsync에서 디렉토리 동기화 (백업) - maruko2 Note.
  • Full system backup with rsync - ArchWiki
  • 좋은 웹페이지 즐겨찾기