TrueNAS 데이터 백업하기 – Snapshot, Backblaze

TrueNAS 서버를 만들었으면 백업이 필수적입니다. 사실, 백업은 꼭 서버가 아니더라도 평소에 필요한 것이긴 하지요.

백업의 방법에는 여러 가지가 있지만, 가장 편한 방법은 돈을 내고 외부 저장소에 저장하는 방법이지요. 이번에는 TrueNAS의 데이터들을 백업하는 방법에 대해서 다루어 보겠습니다.

TrueNAS에서 기본적으로 제공해주는 기능인 Snapshot을 이용하여 백업 파일을 생성하고, Rclone을 이용하여 Backblaze에 백업 데이터를 자동으로 업로드할 예정입니다. 또한, Snapshot 백업의 경우 증분 백업을 이용하여 효율적으로 백업할 예정입니다.

 

Backblaze 가입하기

Backblaze는 데이터 백업을 전문으로 하는 미국의 기업입니다. 아마 많은 분들에게는 처음 들어보시는 기업이겠지만, 데이터 백업 분야에서는 꽤나 유명한 기업입니다. Backblaze말고도 다른 데이터 백업 솔루션을 제공하는 기업들이 많지만, 아마존의 AWS S3보다 저렴한 편이고 백업이나 다운로드가 굉장히 편리하다는 장점이 있어서 Backblaze를 사용하겠습니다.

요금은 Backblaze B2 솔루션의 경우 저장은 1GB당 0.005$입니다. 즉, 1TB를 백업하면 한달에 5$가 요금으로 청구된다는 것이지요. 굉장히 저렴합니다.

Backblaze B2 회원가입으로 접속하셔서 B2 계정을 만들어 주세요. 사이트에서 하라는 대로 하시고, 신용카드를 등록해 주시면 됩니다.

 

Backblaze Bucket 만들기

Bucket은 ‘데이터를 저장하는 통’ 정도로 생각할 수 있습니다. 쉽게 말하면 폴더와 비슷합니다. 다만 특수한 ID를 가지고 있어서 외부에서 접속할 수 있다는 특징이 있지요. 모든 데이터는 Bucket 내부에 저장되며, 데이터의 종류에 따라 다른 Bucket에 저장함으로서 분류할 수도 있습니다.

B2 Cloud Storage – Buckets에서 Create a Bucket을 통해서 Bucket을 만들 수 있습니다.

  • Bucket Unique Name에는 Bucket의 이름을 넣어 주세요. 저는 Bongtae-NAS-Backup이라고 설정하겠습니다.
  • File in Bucket arePrivate
  • Default EncryptionDisable로 해 주세요. 어차피 파일을 암호화 한 이후에 업로드 할 예정이기 때문에, 굳이 한번 더 암호화를 하지 않아도 됩니다.
  • Object LockDisable로 해주세요.

 

(선택) Bucket Lifecycle 설정하기

백업 파일을 주기적으로 업로드 하다 보면 이름은 같지만 업로드한 날짜가 다른 파일들이 존재하게 됩니다. 이때, 예전에 업로드한 파일을 자동으로 삭제해 주는 기능이 있는데 이것이 Lifecycle Settings 입니다.

이름이 같은 파일이 여러 개 있다면, 특정 기간 이후의 파일들만 남기고 나머지를 지워줍니다. 예를 들어서, Lifecycle을 한 달로 설정해 놓았다면 지금으로부터 한 달 이전의 파일들은 삭제합니다.

물론, 파일이 한 개 밖에 없다면 Lifecycle이 지나도 삭제하지 않습니다. Lifecycle은 이름이 같은 여러 개의 파일들이 있을 때만 작동합니다.

모든 백업 파일을 남기고 싶으시다면 설정하지 않으셔도 됩니다. 하지만 그만큼 용량을 더 차지하게 될 것이고, 그만큼 많은 요금을 내야 할 것입니다.

B2 Cloud Storage – Buckets – Lifecycle Settings에서 설정할 수 있습니다.

  • Keep all versions of the file (default) : 모든 백업 파일들을 남기는 설정입니다. lifecycle 기능을 비활성화 하겠다는 뜻입니다.
  • Keep only the last version of the file : 최신 파일 하나만 남기는 설정입니다. 하지만 증분 백업을 사용한다면 이전의 증분 백업 파일들을 지워 버리므로 선택해서는 안 됩니다.
  • Keep prior versions for this number of days : 특정 기간 이전까지의 파일을만 남기는 설정입니다. 저는 해당 설정을 선택하였고, 기간은 60일로 설정하였습니다.

 

Bucket App Key 만들기

Bucket App Key는 외부에서 bucket에 접근할 수 있도록 해주는 Key 입니다. App Key의 장점은 모든 bucket에 접속할 수 있는 계정 Key와 달리, 특정 bucket만 접근이 가능하므로 보안성 면에서 우수합니다.

Account – App Keys로 가 주세요. Add a New Application Key를 이용하여 만들 수 있습니다.

  • Name of Key : Key의 이름을 설정해 주세요. 저는 Bongtae_app_key라고 하겠습니다.
  • Allow access to Bucket : 만든 bucket을 선택해 주세요.
  • Type of Access : Read and Write로 설정해 주세요.
  • 나머지는 다 빈칸으로 두고, Create New Key를 눌러 Key를 만들어 주세요.

만들고 나면 Key ID와 App Key가 뜰 것입니다. 이때, App Key는 한번만 뜨니 꼭 메모해 두세요. App Key를 잊어버렸다면 새로 Key를 만들어야 합니다.

 

Dataset 만들기

Rclone을 실행할 유저의 dataset을 만들도록 하겠습니다.

  • /Data/Personal/backup_usr

또한, 백업 파일이 임시로 저장될 dataset도 만들겠습니다. Compressionoff 되어있는지 확인해주세요.

  • /Temp/backup_temp

 

Rclone 설정하기

백업 파일을 Backblaze에 업로드 할 때 Rclone이라는 프로그램을 사용할 것입니다. Rsync의 클라우드 버전이며, AWS나 Backblaze와 같은 클라우드로 파일을 업로드 하는 데 특화되어 있습니다.

Rclone의 TrueNAS에 기본적으로 설치되어 있습니다. 하지만, root 계정으로 rclone을 수행하는 것은 보안상 그리 좋지 못하므로, 백업 task를 수행할 유저를 따로 만들도록 하겠습니다. 저는 이 유저의 이름을 backup_usr라고 하겠습니다.

먼저, TrueNAS WebUI에 접속해 주세요.

Storage – Pools로 가셔서 backup_usr을 위한 dataset을 만들어 줍니다. /mnt/Data/Personal/backup_usr으로 설정해 주세요.

Accounts – Users – ADD로 가셔서 유저를 만듭니다.

  • Usernamebackup_usr
  • User ID3001
  • New Primary Group 체크해 주시고
  • Home Directory/mnt/Data/Personal/backup_usr
  • Disable PasswordYes
  • Shellbash
  • Samba Authentication은 체크 해제해 주세요.

 

이제 Putty를 이용하여 ssh로 접속해 주세요.

sudo su

루트 권한으로 로그인합니다.

su backup_usr

backup_usr 쉘로 접속합니다. 이제부터 backup_usr의 권한으로 명령을 실행하게 됩니다.

rclone config

Rclone 설정을 시작합니다.

NOTICE: Config file "/mnt/Data/Personal/backup_usr/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

새로운 설정 파일을 만듭니다. n입력 후 엔터.

name> bb_backup

이름을 입력합니다. 저는 bb_backup이라고 설정하였습니다.

Option Storage.
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value.
 1 / 1Fichier
   \ "fichier"
(.....)
 5 / Backblaze B2
   \ "b2"
 6 / Better checksums for other remotes
   \ "hasher"
(.....)
44 / premiumize.me
   \ "premiumizeme"
45 / seafile
   \ "seafile"
Storage> 5

스토리지 종류를 선택하라고 뜹니다. 저희의 경우 Backblaze b2 서비스를 이용할 것이므로 5를 선택하면 됩니다. 5 입력 후 엔터.

Option account.
Account ID or Application Key ID.
Enter a string value. Press Enter for the default ("").
account> 000b8243f57ec790000000002

아까 기록해 두었던 App KeyID를 입력합니다.

Option key.
Application Key.
Enter a string value. Press Enter for the default ("").
key> K000OHotB3M9JxhSVLWNgkAhjI9TCIo

이번에는 applicationKey를 입력합니다.

Option hard_delete.
Permanently delete files on remote removal, otherwise hide files.
Enter a boolean value (true or false). Press Enter for the default ("false").
hard_delete> false

Hard_delete는 rclone에서 원격으로 삭제를 요청했을 때, 영구적으로 삭제하도록 하는 옵션입니다. 특별한 경우가 아니면 사용하지 않는것이 좋습니다. false를 입력하고 엔터.

Edit advanced config?
y) Yes
n) No (default)
y/n> y

고급 설정을 진행할 지 묻습니다. y를 입력하고 엔터.

Option endpoint.
Endpoint for the service.
Leave blank normally.
Enter a string value. Press Enter for the default ("").
endpoint>에

엔드포인트를 설정할 지 묻습니다. 설정하지 않을 것이므로, 그냥 엔터를 눌러주세요.

Option versions.
Include old versions in directory listings.
Note that when using this no file write operations are permitted,
so you can't upload files or delete them.
Enter a boolean value (true or false). Press Enter for the default ("false").
versions>

이전 버전을 포함할 지 묻습니다. 사용하지 않을 것이므로, 그냥 엔터를 눌러주세요.

Option upload_cutoff.
Cutoff for switching to chunked upload.
Files above this size will be uploaded in chunks of "--b2-chunk-size".
This value should be set no larger than 4.657 GiB (== 5 GB).
Enter a size with suffix K,M,G,T. Press Enter for the default ("200Mi").
upload_cutoff>

Upload_cutoff는 파일을 업로드 할 때, 파일이 특정 크기 이상이면 쪼개서 보내는 옵션입니다. 기본적으로 200MiB로 설정되어 있으나, 저는 1G로 설정하도록 하겠습니다. 크기는 마음대로 설정할 수 있습니다. 줄여도 되고, 늘려도 됩니다.

Option copy_cutoff.
Cutoff for switching to multipart copy.
Any files larger than this that need to be server-side copied will be
copied in chunks of this size.
The minimum is 0 and the maximum is 4.6 GiB.
Enter a size with suffix K,M,G,T. Press Enter for the default ("4Gi").
copy_cutoff>

Copy_cutoff는 어떤 파일을 다른 서버로 복사할 때, 파일이 특정 크기 이상이면 쪼개서 보내는 옵션입니다. Rclone을 통해서 다른 서버로 파일을 복사하지는 않을 것이므로, 건드리지 않도록 하겠습니다. 그냥 엔터를 눌러주세요.

Option chunk_size.
Upload chunk size.
When uploading large files, chunk the file into this size.
Must fit in memory. These chunks are buffered in memory and there
might a maximum of "--transfers" chunks in progress at once.
5,000,000 Bytes is the minimum size.
Enter a size with suffix K,M,G,T. Press Enter for the default ("96Mi").
chunk_size>

업로드 할 때, 청크 사이즈를 지정하는 옵션입니다. 여기서 청크 사이즈는, 업로드 하는 프로세스가 사용하는 메모리 크기라고 생각하시면 됩니다. 예를 들어서, 청크 사이즈가 96MiB고 multipart upload를 통해서 20개의 업로드 프로세스를 돌린다면 사용하는 메모리의 사이즈는 약 1.9GiB가 되는 식이지요.

저는 메모리가 넉넉한 편이라서 기본값으로 두었지만, 메모리가 적으신 분들은 30MiB이나 60MiB 등으로 줄이시는 것을 추천 드립니다.

Option disable_checksum.
Disable checksums for large (> upload cutoff) files.
Normally rclone will calculate the SHA1 checksum of the input before
uploading it so it can add it to metadata on the object. This is great
for data integrity checking but can cause long delays for large files
to start uploading.
Enter a boolean value (true or false). Press Enter for the default ("false").
disable_checksum>

크기가 큰 파일에 대해서 체크섬을 끄는 옵션입니다. 해당 옵션을 끄면 업로드는 빨리 될 수 있겠으나, 데이터의 무결성에 큰 흠이 생기므로 권장하지 않습니다. 그냥 엔터를 눌러주세요.

Option download_url.
Custom endpoint for downloads.
This is usually set to a Cloudflare CDN URL as Backblaze offers
free egress for data downloaded through the Cloudflare network.
Rclone works with private buckets by sending an "Authorization" header.
If the custom endpoint rewrites the requests for authentication,
e.g., in Cloudflare Workers, this header needs to be handled properly.
Leave blank if you want to use the endpoint provided by Backblaze.
Enter a string value. Press Enter for the default ("").
download_url>

Cloudflare CDN 서버를 사용하는 경우 엔드포인트를 설정하는 옵션입니다. 저희는 사용하지 않으므로 그냥 엔터를 눌러주세요.

Option download_auth_duration.
Time before the authorization token will expire in s or suffix ms|s|m|h|d.
The duration before the download authorization token will expire.
The minimum value is 1 second. The maximum value is one week.
Enter a duration s,m,h,d,w,M,y. Press Enter for the default ("1w").
download_auth_duration>

Rclone의 인증 토큰을 얼마 주기로 갱신할 것인지 묻습니다. 기본값으로 설정하겠습니다. 그냥 엔터를 눌러주세요.

Option memory_pool_flush_time.
How often internal memory buffer pools will be flushed.
Uploads which requires additional buffers (f.e multipart) will use memory pool for allocations.
This option controls how often unused buffers will be removed from the pool.
Enter a duration s,m,h,d,w,M,y. Press Enter for the default ("1m0s").
memory_pool_flush_time>

업로드 하는 과정 등에서 사용되는 메모리 버퍼를 얼마 주기로 flush할 것인지를 묻습니다. 기본값으로 설정합니다. 그냥 엔터를 눌러주세요.

Option memory_pool_use_mmap.
Whether to use mmap buffers in internal memory pool.
Enter a boolean value (true or false). Press Enter for the default ("false").
memory_pool_use_mmap>

mmap 버퍼를 사용할 것인지 묻습니다. 사용하지 않을 것이므로 그냥 엔터를 눌러주세요.

Option encoding.
This sets the encoding for the backend.
See the [encoding section in the overview](/overview/#encoding) for more info.
Enter a encoder.MultiEncoder value. Press Enter for the default ("Slash,BackSlash,Del,Ctl,InvalidUtf8,Dot").
encoding>

백엔드에서 어떻게 encoding 할 것인지 묻습니다. 기본값을 이용하겠습니다. 그냥 엔터를 눌러주세요.

--------------------
[bb_backup]
type = b2
account = 000b8243f57ec790000000002
key = K000OHotB3M9JxhSVLWNgkAhjI9TCIo
upload_cutoff = 1Gi
chunk_size = 30Mi
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

제대로 입력되었는지 확인하고, 확인하였으면 y를 눌러 완료합니다.

Current remotes:

Name                 Type
====                 ====
bb_backup            b2

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

그럼 위와 같이 방금 설정한 rclone 설정이 뜰 것입니다. q를 눌러 나와주세요.

 

Backup script 만들기

스냅샷을 이용하여 백업을 진행할 때, 크게 두가지 방법으로 백업을 할 수 있습니다. 전체 백업을 하거나, 증분 백업을 하는 것이죠.

전체 백업의 경우 흔히 우리가 생각하는 백업과 동일합니다. 어떤 디렉토리 안에 있는 모든 파일을 백업하는 것입니다.

증분 백업의 경우 이전에 백업했던 시점부터 내용이 변한 파일들만 따로 모아서 백업한다고 생각하시면 됩니다. 스냅샷은 기본적으로는 증분 백업의 형태를 띕니다. 스냅샷을 찍으면 용량을 최소화 하기 위해 지난번에 찍은 스냅샷으로 부터 변한 내용만 기록되게 됩니다.

이번에는 한달에 한번 전체 백업을 하며, 한주에 한번씩 증분 백업을 진행하는 스크립트를 제작하여 cron task에 올려보도록 하겠습니다.

 

mkdir -p /mnt/System/data/script

스크립트들을 저장할 폴더를 만들었습니다. 해당 스크립트 위치는 편한대로 설정하셔도 됩니다. 다만, 다르게 설정하셨으면 아래에 있는 모든 스크립트에서 파일 위치를 바꾸어 주셔야 합니다.

전체 백업 스크립트

vi /mnt/System/data/script/zfs_fullbackup.sh

방금 만든 폴더 내에 전체 백업 스크립트 파일을 만듭니다.

#!/bin/bash

for before_snapshots in $(zfs list -t snapshot -o name -s creation -r ${1} | grep ${1}@backup_); do
    zfs destroy -r "${before_snapshots}"
done

zfs snapshot -r ${1}@backup_`date \+%Y\%m\%d\%H\%M\%S`

last_snap=`zfs list -t snapshot -o name -s creation -r ${1} | grep ${1}@backup_ | tail -1`

snapname=`echo ${1} | sed 's/\//-/g'`

zfs send -R ${last_snap} | openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 10000 -salt -pass file:${3} |
gzip -9 > ${2}/${snapname}.snap.aes.gz

chown -R backup_usr:backup_usr ${2}/${snapname}.snap.aes.gz
chmod 700 ${2}/${snapname}.snap.aes.gz

export _file_loc=${2}/${snapname}.snap.aes.gz
export _b2_dest=${4}

su backup_usr -c 'rclone --fast-list --transfers 16 copy ${_file_loc} ${_b2_dest} -q'

rm ${_file_loc}

상당히 복잡해 보일 수 있지만, 내용은 생각보다 단순합니다. 설명을 드리자면,

  • 먼저, 이전에 찍은 스냅샷이 있는지 확인 한 후, 스냅샷이 있다면 해당 스냅샷을 지웁니다. (모든 스냅샷을 지우는 게 아닌, backup_ 문자가 붙은 스냅샷만 삭제합니다.)
  • 현재 시간 정보를 스냅샷 이름에 넣어서 스냅샷을 찍습니다.
  • 가장 최근에 찍은 스냅샷의 이름 정보를 얻습니다. 이 스냅샷은 방금 만든 스냅샷입니다.
  • 스냅샷의 이름을 바꿉니다. 파일 이름에 디렉토리 관련 기호가 있으면 문제가 생길 수 있으므로 ‘-‘ 기호로 바꾸어줍니다.
  • 방금 만든 스냅샷을 aes-256으로 암호화하고 gzip-9으로 압축합니다.
  • 찍은 스냅샷을 backup_usr에 권한을 줍니다.
  • 환경 변수를 설정합니다.
  • Rclone을 이용해 backblaze으로 만든 백업 파일을 보냅니다.
  • 마지막으로 만든 백업 파일을 지워서 Backup_temp dataset에 공간을 확보합니다.

 

증분 백업 스크립트

vi /mnt/System/data/script/zfs_fullbackup_inc.sh

방금 만든 폴더 내에 증분 백업 스크립트 파일을 만듭니다.

#!/bin/bash

before_snap=`zfs list -t snapshot -o name -s creation -r ${1} | grep ${1}@backup_ | tail -1 | cut -d'@' -f
2`

zfs snapshot -r ${1}@backup_`date \+%Y\%m\%d\%H\%M\%S`

last_snap=`zfs list -t snapshot -o name -s creation -r ${1} | grep ${1}@backup_ | tail -1`

snapname=`echo ${1} | sed 's/\//-/g'`_inc

zfs send -R -I ${before_snap} ${last_snap} | openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 10000 -salt
-pass file:${3} | gzip -9 > ${2}/${snapname}.snap.aes.gz

chown -R backup_usr:backup_usr ${2}/${snapname}.snap.aes.gz
chmod 700 ${2}/${snapname}.snap.aes.gz

export _file_loc=${2}/${snapname}.snap.aes.gz
export _b2_dest=${4}

su backup_usr -c 'rclone --fast-list --transfers 16 copy ${_file_loc} ${_b2_dest} -q'

rm ${_file_loc}

zfs destroy -r ${1}@${before_snap}

증분 백업 스크립트는 사실상 전체 백업 스크립트와 거의 유사하니 설명은 생략하도록 하겠습니다.

 

Cron 스크립트 만들기

이제 증분 백업 및 전체 백업 스크립트는 모두 완성했습니다. 해당 스크립트를 바로 사용할 수는 없고, 백업 위치나 암호화 할때 패스워드 설정 등을 거쳐야 합니다. 따라서 스크립트를 Cron job에 등록하기 위한 스크립트를 만들도록 하겠습니다.

예시로 저는 Bongtae라는 개인 폴더를 백업해 보도록 하겠습니다.

패스워드 파일 만들기

스냅샷 파일의 패스워드를 스크립트에 저장하지 않고 따로 보관하도록 하겠습니다.

mkdir -p /mnt/System/data/passwd
vi /mnt/System/data/passwd/.passwd

패스워드 파일을 만듭니다. 해당 파일 안에 패스워드를 입력하신 뒤 저장하고 나오시면 됩니다.

chmod 400 /mnt/System/data/passwd/.passwd

보안을 위해 해당 패스워드 파일은 root만 읽을 수 있도록 설정해줍니다.

 

전체 백업

vi /mnt/System/data/script/bongtae_zfs_backup.sh

전체 백업 스크립트를 만들었습니다.

#!/bin/bash

tmp_backup_loc="/mnt/Temp/backup_temp"
passwd_file_loc="/mnt/System/data/passwd/.passwd"
destination_loc="backblaze_backup:Bongtae-NAS-Backup/Personal/Bongtae"

bash /mnt/System/data/script/zfs_fullbackup.sh Data/Personal/Bongtae ${tmp_backup_loc} ${passwd_file_loc}
${destination_loc} &

위와 같이 입력해 줍니다. 내용을 설명 하자면,

  • tmp_backup_loc은 백업 파일을 임시 저장할 위치를 뜻합니다.
  • passwd_file_loc은 암호가 저장된 위치를 의미합니다.
  • destination_loc은 Backblaze에서 bucket 내부에 파일을 저장할 위치를 뜻합니다.

 

똑같은 방법으로, 증분 백업 스크립트도 만들어 줍니다.

vi /mnt/System/data/script/bongtae_zfs_backup_inc.sh

증분 백업 스크립트를 만들고

#!/bin/bash

tmp_backup_loc="/mnt/Temp/backup_temp"
passwd_file_loc="/mnt/System/data/passwd/.passwd"
destination_loc="backblaze_backup:Bongtae-NAS-Backup/Personal/Bongtae"

bash /mnt/System/data/script/zfs_fullbackup_inc.sh Data/Personal/Bongtae ${tmp_backup_loc} ${passwd_file_l
oc} ${destination_loc} &

위와 같이 입력해 줍니다.

 

위에서 만든 스크립트는 Data/Personal/Bongtae라는 dataset만 백업하게 됩니다. 다른 사용자의 dataset 등 다른 dataset도 Backblaze를 이용해 백업하고 싶다면 cron 스크립트만 새로 만들어주면 됩니다.

destination_loc과 맨 밑에 bash 커맨드에서 dataset만 변경해주시면 다른 dataset도 백업되게 됩니다. 또한, 해당 파일을 (데이터셋이름)_zfs_backup.sh과 같은 형태로 저장한다면 제목만 보고 어느 dataset을 백업하려는지 알 수 있어서 편리합니다.

 

Cron job 등록하기

TrueNAS WebUI에서 Cron job을 등록하도록 하겠습니다. Tasks-Cron Jobs로 가 주세요. 오른쪽에 있는 ADD버튼을 눌러 새로운 Cron job을 만듭니다.

전체 백업 스크립트

  • Description은 cron job 이름을 설정하면 됩니다. 저는 Bongtae_zfs_backup으로 하겠습니다.
  • Command에 위에서 만든 cron 스크립트를 입력하면 됩니다. 저는 bash /mnt/System/data/script/bongtae_zfs_backup.sh입니다.
  • Run As userroot를 입력해 주세요.
  • Schedule는 한달에 한번 할 것이므로 Monthly를 선택해 주시면 됩니다.

 

증분 백업 스크립트

증분 백업 스크립트도 거의 동일합니다. 새로운 Cron job을 만들어 주신 뒤

  • DescriptionBongtae_zfs_backup_inc
  • Commandbash /mnt/System/data/script/bongtae_zfs_backup_inc.sh입니다.
  • Run As userroot
  • Schedule는 일주일에 한번 할 것이므로 Weekly를 선택해 주시면 됩니다.

 

만약 어러개의 cron job 스크립트를 만드셨다면 위와 같이 모두 등록해 주시면 됩니다.

 

마치면서

이렇게 Backblaze 버킷을 생성하고, rclone을 설정한 뒤, zfs 백업을 만들고 전체/증분 백업을 하는 방법에 대해서 알아보았습니다. 백업은 매우 중요한 요소이므로 위와 같이 백업 시스템을 구축 하시는 것을 추천드립니다. 다양한 백업 솔루션등이 있지만, TrueNAS의 강점 중 하나는 zfs를 사용할 수 있다는 것이므로 이를 최대한 활용해서 스냅샷으로 간편하게 백업을 진행하였습니다.

백업은 2중 3중으로 하는 것이 좋으니 위의 방법 말고도 주기적으로 따로 백업을 하시는 등 백업은 철저히 해 두시기를 권장드립니다.

읽어주셔서 감사합니다.

답글 남기기