UnRAID에 Backblaze B2로 백업하는 Duplicacy 설치하기

!
경고: 이 글이 작성된 지 365일이 넘었습니다. 글의 정보가 오래되어 부정확할 수 있습니다.

이 글에선 Duplicacy라는 만능 데이터 백업 툴을 알아보겠습니다.

Duplicacy가 뭔가요?

Duplicacy는 서버를 위한 백업/복원 툴입니다. CLI 버전과 GUI 버전이 있는데, 터미널을 사용하실 수 있다면 무료 버전으로도 충분합니다.

경고

  • Duplicacy는 백업에 단일 연결만을 지원합니다. 만약 한 머신에서 백업을 진행하고 있는데 다른 머신에서 prune 명령을 실행한다면 정보가 모두 유실될 수 있으니 주의하셔야 합니다. 한 번에 한 개의 Duplicacy 인스턴스만을 돌려야 합니다.
  • RAID는 백업이 아닙니다. 만약 RAID가 백업이라고 하는 분이 있다면 멍청하다고 알려 주세요.
  • 복원을 할 수 없으면 백업이 아닙니다. Amazon Glacier 같은 서비스를 사용해서 데이터를 다 백업했는데 집이 화재로 몽땅 타 버린다면 집 구하기에 신경을 쓰지, Glacier에서 복원은 정신나간 가격 때문에 상상도 못 합니다. 언제나 쉽게 접근할 수 있는 저장소에 백업하고 어쩌다가 한 번씩 백업을 테스트해서 나중에 복원 시 문제가 없도록 해야 됩니다.

그럼 가이드를 진행하겠습니다!

설치 방법

UnRAID 시스템은 USB 메모리에서 부팅해서 램으로 복사되기에, 시스템 폴더에 그냥 Duplicacy 실행 파일을 복사한다면 서버가 재시작되면 파일이 사라지게 됩니다. 따라서 USB 메모리 자체에 먼저 Duplicacy를 설치한 다음 매번 부팅 때마다 실행 파일을 링크해 오는 것이 중요합니다.

UnRAID 서버의 USB 저장소로 이동합니다:

cd /boot/config/plugins

여기에 Duplicacy 실행 파일을 다운받습니다.

wget -O duplicacy https://github.com/gilbertchen/duplicacy/releases/download/v2.2.3/duplicacy_linux_x64_2.2.3

아마도 이걸 읽으실 쯤엔 Duplicacy의 새 버전이 나와있을 테니, Duplicacy의 깃허브 릴리스 탭으로 가셔서, duplicacy_linux_x64_xxx (여기에서 xxx는 버전을 가르킵니다)를 우클릭한 다음 링크 주소를 복사해서 wget -O duplicacy 다음에 붙여넣으면 됩니다.

그 다음으로 go 파일을 수정해서 실행 파일을 매번 부팅 시 링크하도록 하겠습니다. /boot/config/go를 연 다음 파일 끝에 다음 두 줄을 추가해 주세요:

# Duplicacy 링크
ln -s /boot/config/plugins/duplicacy /usr/local/bin/

이렇게 두 줄을 추가하면 매번 부팅마다 Duplicacy 실행 파일이 시스템 디렉터리로 링크됩니다.

이제 서버를 재시작하거나 ln -s /boot/config/plugins/duplicacy /usr/local/bin/를 한 번 실행하신 다음 duplicacy -h를 입력해서 터미널에 Duplicacy가 설치되었는지 확인하세요.

Duplicacy “repository” 만들기

이제 Duplicacy로 “repository” (저장소)를 init으로 만들겠습니다. 이렇게 저장소를 생성하면 현재 경로에 있는 모든 파일을 백업 대상으로 지정하게 됩니다. 이렇게 지정된 저장소 경로에 .duplicacy라는 새로운 숨겨진 폴더가 하나 추가되고, Duplicacy는 여기에 저장소 정보를 저장합니다.

duplicacy init 저장소_이름 b2://서버_이름-duplicacy -e

명령 설명은 다음과 같습니다:

  • 현재 있는 경로가 /mnt/user 라면 이 경로 아래 있는 모든 파일과 폴더들이 백업됩니다. 예를 들어서, Duplicacy는 /mnt/user/Movies, /mnt/user/Music 같은 폴더와 파일을 모두 백업합니다.
  • init은 Duplicacy에게 “여기에 저장소를 만들어줘"라고 알려줍니다.
  • 저장소_이름은 그냥 저장소 이름입니다. 아무렇게나 적으셔도 됩니다.
  • b2://는 프로토콜 정보입니다. 여기에서 쓰는 프로토콜은 Backblaze B2입니다. 만약 다른 백업 서버 제공업체를 사용하신다면 알맞게 다른 설정을 하시면 됩니다 (예를 들어, sftp://, 등등).
  • 서버_이름-duplicacy는 B2 서버 상에 파일을 저장할 “bucket"입니다. 이 명령을 실행하기 전에 만드셔야 합니다.
  • -e는 클라이언트-암호화를 활성화합니다.

UnRAID에선 share 폴더 루트(/mnt/user/*)에다가 저장소를 생성할 수 있습니다. 이렿게 생성하시게 된다면 duplicacy는 모든 저장소 정보와 설정을 /mnt/user/.duplicacy/*에 저장합니다.

Duplicacy 키 저장해두기

이제 본격적으로 이 프로세스를 자동화하려면 Duplicacy가 매번 어플리케이션 ID와 비밀번호를 물어보지 않게 키를 저장해두는 것입니다. 아니면 매번 백업할 때마다 키를 제공해야 되는데, 그럼 백업이 귀찮아져서 잘 하지 않게 되기에 그냥 자동화하는 것을 추천합니다.

여기에서 주의할 점은, 이 명령들을 실행할 경우 어플리케이션 키와 암호화 비밀번호가 평문으로 .duplicacy 폴더에 저장됩니다. 이 폴더에 접근할 수 있다면 키를 볼 수 있기에, 서버 보안과 관리에 신경을 쓸 필요가 있습니다.

다음 명령들을 실행합니다:

duplicacy set -storage b2://서버_이름-duplicacy -key b2_id -value b2_아이디
duplicacy set -storage b2://서버_이름-duplicacy -key b2_key -value b2_키
duplicacy set -storage b2://서버_이름-duplicacy -key password -value 암호화-키

폴더/파일 제외하기

다음으로 백업을 실행하기 전, 특정 폴더나 파일을 제외하고 싶다면 .duplicacy/ 폴더 안 필터를 조절해야 합니다. 저는 여기에서 손쉽게 재생성할 수 있는 Docker 볼륨 폴더, VM 폴더, 그리고 Docker 이미지를 제외하도록 설정했습니다.

자세한 사항은 공식 설명서에서 확인하시면 됩니다. 정규식 표현이 많은데 전 잘 몰라서 UnRAID의 filters 파일을 그냥 다음과 같이 설정했습니다:

-appdata/
-backup/
-VM/
-Downloads/
-ISO/
-docker.img
-libvrt.img

백업 자동화하기

이제 마지막으로 “User Scripts"를 사용해서 백업을 자동화해야 됩니다. 이렇게 자동화를 하면 매번 서버에 로그인해서 백업 명령을 실행할 필요가 없습니다.

“User Scripts"를 다운받아서 UnRAID 서버에 설치합니다 (온라인에 튜토리얼이 많으니 여기에선 자세하게 다루진 않겠습니다). 설치가 완료되면 다음 스크립트를 만듭니다:

#!/bin/bash

# https://stackoverflow.com/a/185473/1388019
lockfile="/tmp/duplicacy.lock"

if [ -e ${lockfile} ] && kill -0 `cat ${lockfile}`; then
    echo "duplicacy 이미 실행중"
    exit
fi

# 종료 시 삭제되는 lockfile 생성하기
trap "rm -f ${lockfile}; exit" INT TERM EXIT
echo $$ > ${lockfile}

# 기본 설정으로 백업 수행
cd /mnt/user
/usr/local/bin/duplicacy -log backup -threads 2 -stats

# lockfile 삭제
rm -f ${lockfile}

스크립트를 간단히 설명하자면, 처음 몇 줄에선 (lockfile부터 시작해서 echo $$까지) lockfile이란 파일을 생성합니다. 만약 “User Scripts"에서 스크립트를 여러 번 실행할 경우 Duplicacy가 백업을 손상시키지 않게 먼저 lockfile의 존재를 확인한 다음, 파일이 이미 존재하면 스크립트 동작을 중단합니다.

그 다음 두 줄은 백업을 2개의 쓰레드로 실행합니다. CPU의 쓰레드 수에 맞게 조정하시면 됩니다. -stats 플래그는 무슨 파일을 백업하는지 로그에 기록합니다.

이제 이 스크립트를 알맞는 제목과 설명을 적어 저장한 다음 스케줄을 선택하시면 됩니다. 그럼 백업이 자동으로 설정된 스케줄에 맞춰서 진행됩니다.

낡은 백업 삭제하기

Duplicacy는 자동으로 낡은 백업을 삭제하진 않는데, 낡은 백업을 삭제하기 위해 prune이라는 명령을 사용하겠습니다.

다음 두 줄을 원래 스크립트에 추가합니다 (“lockfile 삭제” 부분 위에 추가하시면 됩니다):

# 120일보다 오래된 백업 삭제하기
duplicacy prune -exhaustive -exclusive -keep 0:120

이 줄은 120일보다 오래된 백업을 삭제하는데, 날짜를 알맞게 조정하시면 됩니다.

복원은 어떻게 하나요?

서버에서 데이터를 아직까지 잃은 적이 없어서 이 부분은 못 적었습니다. 만약 복원해야 된다면 이 섹션을 업데이트하겠습니다.

근데, 절차가 간단할 것으로 예상합니다. 새로운 서버에 설정 파일을 복원한 후, duplicacy restore 명령을 사용해서 복원하시면 되겠습니다.

제거하기

  1. /boot/config/plugins/duplicacy 실행 파일을 제거합니다.
  2. /boot/config/go 파일을 수정해서 추가했던 두 줄을 삭제합니다.
  3. 필요하다면 설정 파일을 삭제합니다. 소스 폴더에 들어가서 .duplicacy 폴더를 삭제하시면 됩니다.
  4. “User Scripts” 플러그인을 삭제합니다.

그 다음 UnRAID 서버를 재시작하시면 됩니다.

댓글