會用到的工具

  1. Rclone
    用來掛載雲端存儲並且加密
  2. Restic
    非常好用的備份程式,多平台支援、各種存儲類型 (其實它本身就有加密功能,所以如果你不是跟我一樣和人合租企業雲端的話可以不用 Rclone),產生的備份文件是快照式的,只會備份更改部分因此不會過度增加使用量,要恢復備份也很簡單
  3. Resticprofile
    用來控制 Restic 的工具,可以把 Restic 各種設定寫成 toml/yaml 等格式的設定檔,並且支援 systemd/crontab 等排程方式

    已棄用 Resticprofile, 轉用 Backrest, 一套 GUI 管理系統,更方便排程,並且集成 Webhook 通知功能,未來路線圖有管理多個伺服器上的備份任務,未來可期!

工作邏輯

Rclone 掛載雲端 -> Rclone 加密 -> Restic 備份
所有過程通過 Resticprofile 手動觸發或排程

Rclone 設定

首先輸入 sudo rclone config
這邊建議用 sudo 執行的原因是因為 Rclone 產生的設定檔會在當前使用者的 .config 裡面
如果沒有用 sudo 執行的話等一下後面要透過 Resticprofile 以 system 身分執行 (備份的路徑需要 root 權限) 時候他會抓不到 Rclone 的 config (例如他會抓到 /home/username/.config/rclone/rclone.conf 去導致你備份失敗)

sudo rclone config

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config

n

根據他給的選項增加你要的雲端提供商進去,一般來講大部分情況都是使用預設設定就可以,比較要注意的是如果你是在沒有桌面環境的 VPS 上進行操作需要去 Rclone document 看一下如何遠端驗證

再來再次新增一個 remote ,這次選 crypt
根據你想要的加密程度進行設定,然後後面的位置要填你剛剛創建的第一個 remote 名稱 + 路徑 (remoteName:path)
保存之後 Rclone 設定部分就結束了

Restic 安裝並準備儲存庫

Doc: https://restic.readthedocs.io/en/stable/index.html
Debian 系安裝很簡單

apt-get install restic

安裝完成後創建新的儲存庫 (以 Rclone 為例子)

restic -r rclone:加密的 remote 名稱:路徑 init

我自己的習慣是 rclone:encryptRemoteName:hostname,見仁見智,方便自己辨識哪個庫是自己的就好

Resticprofile 安裝與設定

Install:

curl -LO https://raw.githubusercontent.com/creativeprojects/resticprofile/master/install.sh
chmod +x install.sh
sudo ./install.sh -b /usr/local/bin

Update:

resticprofile self-update

設定檔:

我一般放在 /home/userName/restic

mkdir restic
cd restic
nano password.txt #儲存前面 Restic 創建儲存庫時候產生的加密密碼
nano profiles.toml

填入

version = "1"

[global]
# priority is using priority class on windows, and "nice" on unixes
priority = "low"
# ionice is available on Linux only
ionice = true
ionice-class = 2
ionice-level = 6

[default]
repository = "rclone:encryptRemoteName:hostname"
password-file = "password.txt"

[default.backup]
verbose = true
source = [ "/home", "/etc", "/var", "/usr/local", "/boot" ]
schedule = "06:00"
schedule-permission = "system"
schedule-priority = "background"

我自己 schedule 用的格式是 systemd
之後要進行排程

sudo resticprofile schedule

如果之後要更改排程時間,在修改完設定檔後還要

sudo resticprofile unschedule
sudo resticprofile schedule

修改才會生效

執行第一次備份

在 Resticprofile 路經中執行

resticprofile backup

第一次根據系統大小不同會跑一段時間,跑完後就一勞永逸了,之後會自動執行排程的備份任務不需要再手動操作