0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Backupいろいろ

0
Posted at

そうだ、バックアップしよう。

えいやっとrsyncでバックアップを取っていたサーバについて、そろそろちゃんとデータ管理しないとつらくなってきました。
変更したファイルの世代管理とかやらんとさすがになぁ、、、と。

で、ちゃんとバックアップ、というと昔々に使ったことがあるBaculaを思い出したのですが、いかんせん10年以上昔の話。
改めていろいろ調べてみようと思います。

バックアップに求める要件

  • あるサーバのデータを別のサーバにバックアップしたい
  • 変更したファイルについては世代管理をしたい
  • 世代間のdiffをとりたい(このファイルの1世代前に戻したいなら、どのスナップショットつかめばいいんだ?)
  • 最小のパッケージで動かしたい(管理が面倒になるから)
  • スケジューラ(cron)機能はあってもなくてもいい(なければ自分でcron登録するから)
  • コンテナバックアップとかいらない。指定のディレクトリのバックアップだけでOK
  • ウイルスチェックとかも不要。別途やるから。
  • debianで動く

こんなとこですね。

バックアップOSSいろいろ

検索の上の方にある比較サイトを参考にさせていただき、ちょこちょこ試してみました。

1. restic

軽くdocを読んだ感じ、コマンドたたいて使う感じ。
ごてごてしたUIや過度な機能もなく、世代管理(snapshot)は抑えている。
diffもできるっぽい。
aptで入るし依存も少ない。
かなりの好印象、、、なんですが。

使ってみると要検討事項が。

データの流れが想定と逆!

バックアップサーバが1台あって、それがリモートサーバのデータを落としてきて管理、という脳内だったのですが、、
reticは逆で、SFTPでリモートのサーバに「データを押し出す」という動きをします。
バックアップしたいデータを持っているサーバにresticを置いて、データ保存したい外部サーバを指定してresticを動作させるんですね。

当初想定の、バックアップサーバからバックアップ対象のでデータを回収する、という方向で使うには、、
chatgptにご相談してみたところ、sshfs使えばいいじゃんとご回答。
まずバックアップサーバからバックアップ対象サーバに対してsshfsして、バックアップ対象サーバの指定領域がバックアップサーバのローカルディレクトリとして見えるようにする。
で、resticでローカルディレクトリ間のバックアップをさせる、ということです。

バックアップ対象サーバに追加パッケージを入れて汚す、バックアップ対象サーバ側でCPUを使う処理をする、というのは避けたいのでsshfs構成を使いたい気もしますが、逆に余計なsshfs入れずに押し出す方法で使うのも、それはそれできれいに見えますね。

どうしようかな。

スナップショット時にパスワードをかける

なるほどー最近はそうなのかーと受け入れそうになったのですが、、、これcronでバックアップするときどうしよう。
パスワードをファイルに書いておいて、環境変数で渡す方法があるようですが。
気持ち悪い。
元々パスワードかけたいという思いがあったわけではないのですけれど、やはり、気持ちは悪い。
後述のとおり、Baculaとかでも結局コンフィグファイルの中にパスワードを平打ちするんですが、、うーん。。

またchatgptとご相談してみたのですが、こんな方法をご提案いただきました。

gpg -q --decrypt /path/to/restic-password.gpg | restic --password-file /dev/stdin backup ~/remote_mount

gpg自体のパスワードどうする?という話。
gpg以外の方法に考えを広げるとTPMデータを使うなどのひねりはききそうな気はしますが、やりすぎかな。。

一旦置いといて、別のを見てみます。

2. Bacula

https://www.bacula.org/
商用版とCommunity Editionを併設する形になってるんですね。

調べてから投稿まで結構立っちゃったのですが、、2025年の春頃に調べた結果。
linux(debian 12で調査)のレポジトリでは付されているのは9.6.7。
一方Baculaサイトで公開されている最新版は、、、15!?
しかもEnterprise Editionまで見ると18。。

乖離がすさまじいなぁ、、、
とりあえずcommunityで15と9を比べてみよう、、と思ったのですが。
https://packages.debian.org/search?keywords=bacula

現状のdebian13(trixie)では15になるようです。

以下は、当時、debian12 + ver.9で試してみたときのメモ。

ver.9をインストールしてみる

user01@bkup:~$ sudo apt install bacula
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  bacula-bscan bacula-client bacula-common bacula-common-pgsql bacula-console bacula-director bacula-director-pgsql bacula-fd bacula-sd bacula-server bsd-mailx dbconfig-common dbconfig-pgsql exim4-base
  exim4-config exim4-daemon-light libcommon-sense-perl libevent-2.1-7 libgnutls-dane0 libidn12 libjson-perl libjson-xs-perl libllvm14 liblockfile1 liblzo2-2 libpq5 libsensors-config libsensors5
  libtypes-serialiser-perl libunbound8 libxslt1.1 libz3-4 mt-st mtx postgresql postgresql-15 postgresql-client postgresql-client-15 postgresql-client-common postgresql-common psmisc ssl-cert sysstat
Suggested packages:
  gdb bacula-doc gawk dds2tar scsitools sg3-utils exim4-doc-html | exim4-doc-info eximon4 spf-tools-perl swaks dns-root-data lm-sensors postgresql-doc postgresql-doc-15 isag
The following NEW packages will be installed:
  bacula bacula-bscan bacula-client bacula-common bacula-common-pgsql bacula-console bacula-director bacula-director-pgsql bacula-fd bacula-sd bacula-server bsd-mailx dbconfig-common dbconfig-pgsql
  exim4-base exim4-config exim4-daemon-light libcommon-sense-perl libevent-2.1-7 libgnutls-dane0 libidn12 libjson-perl libjson-xs-perl libllvm14 liblockfile1 liblzo2-2 libpq5 libsensors-config libsensors5
  libtypes-serialiser-perl libunbound8 libxslt1.1 libz3-4 mt-st mtx postgresql postgresql-15 postgresql-client postgresql-client-15 postgresql-client-common postgresql-common psmisc ssl-cert sysstat
0 upgraded, 44 newly installed, 0 to remove and 0 not upgraded.
Need to get 55.3 MB of archives.
After this operation, 216 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

RDBのpostgresにメールのexim。
結構入るなぁ、、
postgresのDB初期化も併せて実施できるので、お任せします。

パスワードも、インストーラに従えば、適切にパスワード自動生成してコンフィグに書き込んでくれる。
バックアップ対象などは自分で設定。

Bacula ver.9をつかってみる

以下で概要を勉強させていただいて、つかってみると。。
(ざっと構成を理解するには分かりやすかったのですが、さすがに8年前。。いろいろ変わってる。)
https://gihyo.jp/admin/serial/01/bacula/0002

基本的に、コンフィグファイルに入れた設定で、スケジュールに従って、対象サーバの対象領域のデータを、指定したRDBに保存する。

都度実行したいときや復元するときはbconsoleという対話型コマンドで処理。
ただし、/usr/sbin配下に配置されるので、sudoしないとたたけないてとこが備忘録でしょうか。

で、バックアップ対象サーバ側にもエージェント(bacula-fd)を入れるんですね。

スナップショット間差分機能は、、ざっと見は見つからず。

脱線 バックアップサーバのバックアップ

一応視野に入れておきます。

素直に考えるなら、Baculaなら保存先のデータベース(サーバ)の2つ目を用意して、そちらに対して穂損するJobを追加する、でしょうか。
注意点としては、Bacula自体のコンフィグ(特にパスワード)も併せて厳密にバックアップすること。
それないとメインのBaculaがトラブった際に、別途立てたBaculaでレスキューとかできなくなっちゃうから。。

あるいは、
Postgres自体のバックアップをするなど、バックアップサーバ自体のバックアップ。
まだるっこしくはあるのですが、必然的に使うアーキテクチャが変わるので、「Postgresの致命的なバグで同一構成のサーバのデータが全滅」みたいなケースは防げます。
また、サーバ複数立てるよりはシンプルに組めるかなーという感触。

今回は後者で考えてみます。

で、どれつかう?

すごくシンプルで好感が持てるresticと、正統派でわかりやすいbaculaで悩みます。

通信の方向については、言い方帰ると「どこからログインさせるかの管理」です。
素直に考えるとバックアップサーバの方がセキュアな内側になるので、内側⇒外側の通信の流れの方が制御しやすい。
ランサムなどの横展開を考えると、外⇒内の通信パスが空いているのは怖い。
といっても今回の構成はそこまで厳密にする気はないので、「一部のサーバ群が共通で使うバックアップ領域」みたいに考えてもいい。

スナップショット間差分は重宝する気がするので、ある方がいい。

⇒今回はresticで行ってみようかなと思います。

使い込んでみてまた何か気づきがあったら追記ということで。
今日はここまで。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?