バックアップをすることの大切さについては、もしもプログラムの更新などが上手くいかなかった場合、もしくはVPSそのものが何かの原因で故障してしまった場合でも、バックアップを確保してあれば復旧できる可能性がありますし、逆になければ全てが失われます、と書けば伝わるでしょうか。

 ホスティングサービスを利用している場合は、バックアップオプションがあればそれを利用する、というのが恐らく唯一のバックアップの確保方法です。以下では、VPSなどで自力運用している場合のバックアップについて述べます。

 サーバーのデータの大半はPostgreSQL(ポストグレス キューエル)という種類のデータベース管理システムを使って保存されています。他、オプションのオブジェクトストレージを使用しなかった場合は、メディアファイルが別に存在します。また、Mastodon、kmyblueについては/home/mastodon/live/.env.productionという隠しファイルにも大事な設定がいくつも保存されており、バックアップが必要です。

 バックアップしたファイルの持ち出しについて、筆者はよくSFTP接続にて手元の端末にダウンロードしています。Terminus、Tera Term、Putty、RLoginなどなど、SSH接続できるアプリにはファイル転送機能もついていることが多いようです。

 VPSによっては、スナップショット・イメージ保存といった名称でVPSサーバーを丸ごとバックアップしてくれるオプションがあります。

リストアについて

 バックアップしたファイルからサーバーを復元することをリストアと言います。

 スナップショットやイメージ保存からリストアする場合は、各VPS業者のサーバー管理画面から操作ができると思いますので、それを探してください。

 なお、別の環境(VPSなど)にバックアップを持って行って展開する手順については、サーバー移転の方法として別ページを設けますので、そちらをご覧ください。

 外のネットワークと通信しない環境(つまりインターネット上の他のサーバーから観測されない環境)があれば、そこでリストアの練習をしておくと良いようです。

PostgreSQLのバックアップファイルについて

 pg_dumpもしくはpg_dumpallというコマンドにて作成が可能です。作業用ユーザーなど、sudoコマンドの使えるユーザーで作成します。


sudo -u postgres pg_dumpall | gzip -c > (任意のファイル名).gz

 自動でバックアップを行う場合、ファイル名が重複しないように作成した日付や時間をファイル名にする変数( $(date +%Y%m%d%H%M) など)を使うことが多いようです。

 なお、オプションとして以下のようなことも可能です。

  • cronなどを利用して定期的にバックアップを作成する

  • 作成したバックアップを外部のストレージに転送する

  • バックアップの中身を暗号化する

 これらのオプションについて全て一括で書かれてあるのは、MisskeyのフォークであったFirefish関連の記事になりますが、Firefish サーバーの立て方メモ( https://blog.naskya.net/post/6kic0tebueju/ )だと思います。

 なお、Firefishは開発終了されており、上記の記事もいずれ削除される可能性がありますので、ご留意ください。

メディアファイルのバックアップについて

 以下のコマンドで、ディレクトリごと圧縮することができます。


tar czf (任意のファイル名).tar.gz (メディアファイルを格納しているディレクトリへのパス)

Mastodon,kmyblueの場合

 オブジェクトストレージを利用しなかった場合のメディアファイルは、/home/mastodon/live/public/system内に格納されています。

Misskeyの場合

 オブジェクトストレージを利用しなかった場合のメディアファイルは、/home/misskey/misskey/files内に格納されています。

スナップショット・イメージ保存について

 VPS側でオプションとして提供されていることのある、VPSサーバーを丸ごと1つのまとまりとしてバップアップしてくれるサービスです。このスナップショットやイメージを確保するには、VPSの電源を切る必要がある場合がほとんどです。

 アップデートの前にスナップショットやイメージを保存しておけば、アップデートに失敗したとしても、直ぐにこのバックアップの状態に戻すことでなかったことにできます。

0埋めについて

 とても便利なスナップショット・イメージ保存ですが、容量課金のオプションとなっていることがほとんどで、如何にバックアップ容量を減らすかで頭を悩ませる鯖缶さんが多いです。その対策の1つとして有名なのが、0埋めです。

 VPS上で一度でも使われた領域が、その後使われなくなっていたとしても判別できず、スナップショットやイメージに含まれて容量を肥大化することが知られています。そこで、使用していない領域を全て0で埋めることで圧縮可能であると判断させ、容量を節約します。

 まず、空き容量を確認します。


df -h

 空き容量から1を引いた数で、ゼロ埋めを行います(〇〇はdfで確認した空き容量-1)


dd if=/dev/zero of=/tmp/tmpzero.tmp bs=G count=◯◯

 ゼロ埋めしたファイルを削除します。


rm /tmp/tmpzero.tmp

 シャットダウン後、スナップショット・イメージ保存を行います。

04-02・アップデートの方法

03-05-03・その他のオプション