본문 바로가기
Development/기타 개발관련

rsync를 사용해서 Synology NAS로 데이터 자동 백업하기 (리눅스용)

by Nahwasa 2022. 2. 8.

 rsync를 사용해서 시놀로지NAS(이하 NAS)에 로컬 혹은 서버의 데이터를 백업하는 방법에 대해 작성한다. 

 

목차

     

     

    [ Synology NAS 설정 ]

    1. 주의점

      Synology NAS에서는 quickconnect로 로컬망에 있는 NAS도 외부에서 쓸 수 있도록 해준다. 하지만 rsync를 통한 백업의 경우 quickconnect로 불가하므로, 외부망에서 사용하려면 별도로 작업이 필요하다.

     

     

    2. NAS에서 rsync 서비스 활성화

      NAS 관리자 권한 계정으로 접속 후 '제어판 -> 파일 서비스 -> rsync -> rsync 서비스 활성화 및 포트 작성'

      외부망에 열려있는 NAS라면 특히 포트는 기본 포트보다는 변경하는것이 좋다.

     

     

    3. 백업용 유저 생성

      기존 유저로 해도 되겠지만, 아무래도 백업용으로 별도 계정을 쓰는 것이 보안이나 관리 측면에서 더 좋을 것이다. '제어판 -> 사용자 및 그룹 -> 생성 -> 백업용 계정 생성'

     

      그리고 해당 계정의 '권한'에서 'NetBackup'에 '읽기/쓰기'권한을 줘야 한다.

     

     

    [ Linux에서 NAS로 데이터 백업 ]

    1. 목표

      쉘스크립트('.sh')로 백업 과정에 필요한 모든 명령어를 작성한 후 이걸 crontab에 등록하여 주기적으로 자동 실행되도록 할 것이다. 이 때, NAS에 접속하기 위해 비밀번호를 입력해야하는데 이 부분은 쉘스크립트 만으로는 처리할 수 없다 (비밀번호를 입력하라고 하면 그 때 입력을 해야 함). 이를 해결하기 위해서는 키를 NAS의 OS에 ssh로 접속하여 등록해두어야 한다.

     

      개인 NAS라면 당연히 별 문제없이 그렇게 하면 되겠지만, 여러명이 사용하는 NAS라면 ssh를 열어 권한을 주기엔 좀 부담스럽다. 내 경우엔 공용 NAS를 세팅하는 것이므로 ssh는 열지 않았다. 따라서 이걸 해결하기 위해 expect라는걸 추가로 사용해서 특정 문자가 입력되면, 특정 문자를 키입력해주도록 처리했다. 이 과정에 대해 작성한다.

     

     

    2. rsync 설치

      대부분 기본적으로 설치되어 있을 것이다. 확인을 해보자.

    rsync --help

    없을 경우 아래와 같이 설치한다. (centOS라면 yum, 우분투라면 apt 등 사용중인 리눅스에 맞게 설치된 패키지를 사용하면 된다.)

    yum -y install rsync
    apt -y install rsync

     

     

    3. expect 설치

      현재 사용중인 리눅스에 설치된 패키지에 맞게 사용하면 된다. 예를들어 centOS라면 yum, 우분투라면 apt를 사용하면 된다. 당연히 권한에 따라 앞에 sudo를 붙여야 할 수도 있다.

    apt install expect
    yum install expect

     

     

    4. 쉘스크립트 작성

      다음과 같은 형태로 작성한다. 여기서 '[ ]'안의 내용은 직접 작성해야 하는 부분이다.

    # NAS backup script
    PW="[백업 계정의 비밀번호]\r"
    
    [백업 진행 전에 처리할게 있다면 처리(예를들어 DB 백업)]
    
    expect <<EOF
    spawn rsync -e "ssh -p [NAS rsync 포트]" -avx [백업할 폴더 위치(절대 경로)] [NAS rsync 백업 권한 줬던 계정명]@[NAS ip]:/volume1/NetBackup/[백업 폴더 나눈다면 해당 폴더명]
    expect "password"
    send ${PW}
    expect eof
    EOF

     

      예를들어 다음은 내가 작성한 테스트 스크립트이다. 마리아 DB를 백업한 후 NAS로 rsync를 통해 백업하는 스크립트이다.

     

      이 때 주의점은, 단순히 쉘스크립트를 실행만 할 때는 './backup-test'와 같이 상대경로를 작성해도 된다. 하지만 crontab에 등록해서 스케쥴링 되도록 할 것이므로 모든 주소를 절대 경로로 입력해야 한다. 위의 내 예시의 경우엔 WSL을 사용해서 /mnt 라는 이상한 위치로 시작하지만, 예를들어 centos라면 다음과 같을 것이다. '/home/centos/backup'

     

     

    5. 쉘스크립트 실행해보기

      우선 실행해보기 전에 추가로 할게 있다. 작성한 스크립트에서 'spawn'이 들어가있는 문장을 옵션에 'n'을 추가해서 한번 실행해야한다. 그래야 이후 바로 패스워드만 물어본다. 예를들어 내가 작성한 예시에서는 다음과 같이 실행하면 된다.

    rsync -e "ssh -p 21022" -avnx /mnt/c/Users/dev/backup-test/maria-all-tables-backup backup@110.8.124.30:/volume1/NetBackup/hsy-db-backup-test

     

      그 후 './backup.sh'과 같이 쉘 스크립트를 실행해서 정상적으로 작동하는지 확인해보자.

     

     

    6. crontab 등록

      'crontab -e'를 실행한 후 다음과 같은 방식으로 crontab을 등록한다. crontab 사용법에 대해 자세히 알고싶다면 별도로 구글링을 통해 확인하면 된다. 이하의 문장은 매일 0시 0분에 백업 스크립트를 실행하도록 하는 것이다.

    # [분] [시] [일] [월] [요일] [실행할 스크립트 절대경로]
    
    0 0 * * * /mnt/c/Users/dev/backup-test/maria-all-tables-backup/backup.sh

      crontab이 편집될 경우 아마도 crontab 서비스가 꺼질 수 있다. 아래와 같이 실행하면 된다.

    service crond start

     

     

    [ References ]

    https://kb.synology.com/ko-kr/DSM/tutorial/How_to_back_up_Linux_computer_to_Synology_NAS

     

    Linux 장치를 Synology NAS에 어떻게 백업합니까? - Synology 지식 센터

     

    kb.synology.com

     

    https://www.wundertech.net/how-to-backup-a-linux-pc-to-a-synology-nas-using-rsync/

     

    Backup a Linux PC to a Synology NAS using Rsync! - WunderTech

    This tutorial will show you how to backup a Linux PC to a Synology NAS using Rsync! This process ensures all of your data is secured!

    www.wundertech.net

     

    https://linuxhint.com/use-rsync-synology-nas/

     

    How to Use rsync on Synology NAS

    Freelancer & Linux System Administrator. Also loves Web API development with Node.js and JavaScript. I was born in Bangladesh. I am currently studying Electronics and Communication Engineering at Khulna University of Engineering & Technology (KUET), one of

    linuxhint.com

     

    https://engineer-mole.tistory.com/233

     

    [Linux] expect를 이용한 Linux 커맨드 입력 자동화

     Linux환경에서 어떤 패키지를 설치할 때 yes를 입력해야거나 선택지를 입력해야할 경우가 있는데, 이럴 때 그러한 입력을 자동화할 수 있는 것이 expect이다.  expect란? Linux에서의 커맨드 대화를

    engineer-mole.tistory.com

     

    https://www.bytebang.at/Blog/Reverse+backup+your+Linux+machine+with+a+Synology+NAS 

     

    Reverse backup your Linux machine with a Synology NAS

    When it comes to backups, then it should not possible for maleware to spread to your backup server. Here is an approach how to setup such a safe backup with a Synology NAS.\\

    www.bytebang.at

     

    https://jdm.kr/blog/2

     

    리눅스 크론탭(Linux Crontab) 사용법 :: JDM's Blog

    * 이 포스팅은 네이버 블로그에서 작성(2013.04.01)한 내용을 옮겨온 것입니다. 오늘은 리눅스 크론탭에 대해 알아볼까 합니다. 음, 윈도우에서는 스케줄러와 비슷하다고 보면 되겠네요. "특정 시간

    jdm.kr

     

    댓글