SVX日記
2023-05-20(Sat) コンテナのPVのバックアップを考える
しかしこれ、すごく普遍的な教訓をくれている気がする。というのも、そもそも一般にコンピュータシステムは、特定の作業を自動化するものであるが、自動化のレベルが低いほど、手作業でメンテする必要が生じてしまうものなのである。
よく、システムの作りがイマイチな場合に「運用でカバー」などという口当たりのいいコトバでの対策が取られるが、それはつまりシステム屋としての敗北なのである。言い訳無用で恥なのである。「こんなこともあろうかと」の対極なのである。
話をFactorioに戻すと、製造ラインを工夫している時間が作れない原因は、バイターの攻撃への対応の自動化のレベルが低いことであり、それはつまりFactorioプレイヤとしての敗北なのであり恥なのである。
そんな気づきを得た矢先、自分が職場で運用している自作のチャットシステムがトラブってしまった。結構、ガチで使われているシステムなので、めちゃくちゃ焦る。原因はディスクフルでGDBMが壊れたこと。GDBMを直そうとしたがダメ。しかし、直近の発言を表示するための履歴DBだったので、消しても影響なく単に消したら復旧できた。それでも原因の調査、究明と対策で1時間くらいを要してしまった。あまり長時間止まるとTeams以下の存在になってしまうから沽券に関わる。
そういうことなのだ。ちゃんと自動化しておけば、イザという時に焦らなくて済んだのだ。だから、これを機にバックアップ機構を作るべきだ……ということで作った。チャットシステム専用ではなく、コンテナのPVに対する汎用的な仕組みだ。リモートにrsyncするのが基本だが、ローカルにもできるようになっている。ちゃんと差分バックアップである。
そもそも、ロクにrsyncを使ったことがなかったし、シェルスクリプトも苦手意識があったが、今回の開発を通じ、その両方に少し詳しくなれた気がする。しかし、それにしても手間取ったなぁ。昔に比べて思考力が落ちているせいなのか、自らへの期待値が上がっているせいなのか、それ以外なのか……よくわからないが、こういう開発は楽しくて仕方ないものの、ここまで手間取るかなぁ、という印象を受けた。
diff --git a/docker-compose.yml b/docker-compose.yml
+# * Local Backup
+# BACKUP_PATH: pv/backup
+# BACKUP_EX: --exclude=backup
+# バックアップ先の領域として
+# mkdir pv/backup; chown 1000:1000 pv/backup しておくこと
+# * Remote Backup
+# BACKUP_HOST: user@rsync_ssh_host
+# BACKUP_PATH: backup
+# BACKUP_EX: --exclude=id_rsa*
+# バックアップ先への ssh アクセスのため
+# ssh-keygen -f pv/id_rsa; chown 1000:1000 pv/id_rsa しておくこと
+# CYCLE1: 3600
+# SCHED1: 300
diff --git a/Dockerfile b/Dockerfile
+# if [ -v BACKUP_PATH ]; then
+# if [ `date +%s` -ge $target1 ]; then
+# ((target1 += CYCLE1))
+# echo "`date`: Job easy cron 1 started."
+# stamp=`date +%Y%m%d_%H%M`
+# ssh_opt='-o StrictHostKeyChecking=no -o PasswordAuthentication=no'
+# if [ -v BACKUP_HOST ]; then
+# coron=:
+# ssh_opr="ssh $ssh_opt $BACKUP_HOST"
+# fi
+# last_backup=`$ssh_opr ls $BACKUP_PATH | tail -1`
+# backup_ex0='--exclude=hyperestraier'
+# if [ -z "$last_backup" ]; then
+# gen=0
+# else
+# gen=$((`$ssh_opr cat $BACKUP_PATH/$last_backup/.gen` + 1))
+# link_dest="--link-dest=../$last_backup"
+# fi
+# rsync -av --delete $backup_ex0 $BACKUP_EX -e "ssh $ssh_opt" pv $BACKUP_HOST$coron$BACKUP_PATH/$stamp $link_dest
+# echo $gen > .gen; scp $ssh_opt .gen $BACKUP_HOST$coron$BACKUP_PATH/$stamp
+# fi
+# fi