カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

データのバックアップ方法を restic + rclone という組み合わせに変えた

以前、僕は、

the.nyarla.net

という記事を書いた様に、

という組み合わせでバックアップを取っていました。

しかしながら、この組み合わせを使ってた際には、バックアップの暗号化を rclone 側で行なっていて、

暗号化鍵の含まれる rclone の設定ファイルのバックアップめんどい

とか言う理由で、 バックアップを取る事への心理的コストが上がり 、 結局、実際には定期的なバックアップを取らずじまいにまっていました。

それで、その辺りもうそろそろなんとかしないとなーとは前々から思っていたのですが、 今日になり、

もうそろそろ、バックアップ周りを本気出して改善しよう

と思えるぐらいにはなったので、色々試したり shell script を書いていた結果、

と言う組み合わせで、

あ、これなら行けそう

と思える環境が出来たので、とりあえずその辺りを書きます。

restic とはなんぞや?

は、一言で言えば、

golang で書かれた、割とイケてるバックアップツール

です。

あと 、golang 製なので、

  • バイナリを GitHub から取ってきてポン付け配置で実行可能

という特長もあり、 Linux は勿論のコト、macOS や Windows でも使えるっぽいので、 そういった意味では、割とプラットフォームを選ばない感じ、だと思います。

実際にどの様にバックアップを取っているか

ザックリ言うと、

  1. restic を使って、USB 3.0 接続の外付け HDD の repository へ暗号化バックアップ
  2. その 暗号化済み repository を rclone を使って Google Drive へ sync
  3. あとは、その一連の流れを systemd の timer とか使って実行

という感じです。

なお (3) に関して言えば、実際には未だ作業中で、NixOS のシステムにはまだ登録は出来てないです。はい。

また、 (1) と (2) を行う際に、手作業でコレを行うのはダルいので、実際には、 下記の様な shell script を、結構ザツに書いて使っています:

#!/usr/bin/env zsh

function restic-wrapper() {
  exec /home/nyarla/local/bin/restic \
    -r /data/mnt/backup/data/restic \
    -p /etc/restic/config \
    -q \
      ${@}
}

function restic-store() {
  restic-wrapper backup \
    -e '**/.DS_Store' \
    -e '**/node_modules/' \
    -e '/data/live/downloads' \
    --tag "$(date +%Y-%m-%d)" \
      /data/archive \
      /data/live \
      /data/sync
}

function restic-upload() {
  rclone sync /data/mnt/backup/data/restic gdrive:/Backup/NyXPS15 --quiet
}

case "${1:-}" in
  store)  restic-store          ;;
  upload) restic-upload         ;;
  *)      restic-wrapper ${@:-} ;;
esac

なお、この shell script 、 Path 周りがそのままベタ書きなため、再利用性は低いですが、 まあ、なんかの役に立つでしょ、という感じで公開しておきます。

使ってみた感想

雑に (多分) 堅牢なバックアップ取れるって良いですね!!!

以上

って、 雑にブログ書いてどーすんだ 、って感じも無きにしも有らずですが、 雑に書いてないと毎日もブログ書くネタとかネーヨって感じなので、まあ キニスンナ です、はい。

ま、あとはまあ、今日、昼から夕方にかけて、天候に引き摺られて、結構、精神的にアレな感じだったのも、 ブログが雑になってる要因の一つですが、まあそんなコト知ったこっちゃねぇって感じ デスヨネー 。


まぁ、今日、調子が悪かったにしろ、ここの所、懸案だったバックアップ周りがなんとかなったので、 とりあえず自分的には満足しています。はい。