果報

二度寝して待つ

Nextcloudのデータを外部記憶媒体に定期的にバックアップする

自宅サーバのNextcloudの全データを、外付けHDDといった外部記憶媒体に定期的にバックアップします。

前提として、以下の環境で作業します。

  • 自宅サーバ: Ubuntu 22.04
  • Nextcloud: snap版を使用してインストール

また、基本的に以下の公式サイトのQ&Aを参考にしました。

help.nextcloud.com

外部記憶媒体のマウント

バックアップ先となる外部記憶媒体をマウントします。初めて使用する場合などは、必要に応じて事前にフォーマット(初期化)します。

Ubuntuの画面左上の「アクティビティ」をクリック後、検索欄で「disk」と入力し、ディスクユーティリティを開きます。

対象の外部記憶媒体のボリューム欄にある歯車アイコンから、「マウントオプションを編集」をクリックします。

マウントオプションの設定ウィンドウが表示されるので、「ユーザーセッションのデフォルト」をオフにし、「システム起動時にマウントする」をチェックします。また、「マウントポイント」を任意の名前に変更します。「識別名」はおそらくそのままでも問題ないです。

なお、/etc/fstabに以下を設定することでも同じはずです。(未検証)

/dev/sda1 /mnt/msd ext4 nosuid,nodev,nofail 0 0

バックアップ方法

外部記憶媒体にアクセスするための権限をsnapに付与します。インストール時に既に付与していれば不要です。

$ sudo snap connect nextcloud:removable-media

デフォルトのバックアップ領域を削除します。

$ sudo rm -rf /var/snap/nextcloud/common/backups

削除したバックアップ領域に外部記憶媒体へのシンボリックリンクを作成します。 以下の例ではマウントポイントを指定していますが、配下にバックアップ用のディレクトリを作成して指定しても問題ないです。

$ sudo ln -s /mnt/msd /var/snap/nextcloud/common/backups

Nextcloudのバックアップ機能nextcloud.exportを使用して、ファイル以外のデータをエクスポートします。

$ sudo nextcloud.export -abc

なお、オプション(a~d)でバックアップ対象を指定しています。

  • a:アプリ
  • b:データベース
  • c::設定
  • d:ファイル

「d:ファイル」は、上記機能だとフルバックアップとなり、容量が大きいと時間がかかってしまうため、別途rsyncで前回取得時からの差分のみバックアップ(同期)します。

$ sudo rsync -a --delete /var/snap/nextcloud/common/nextcloud/data/ /mnt/msd/data

rsyncのオプションの詳しい解説は他サイト参照としますが、概要は以下のとおりです。

  • a:元のパーミッションやグループなどを保持したまま同期する
  • delete:同期元にないファイルを同期先から削除する

最後に、このバックアップ処理を定期的に実行するため、以下のシェルを作成してcronなどに登録します。

#!/bin/bash
cd /mnt/msd
# バックアップ先配下のdataとlost+found以外をバックアップ前に削除
ls | grep -v -E 'lost\+found|data' | xargs rm -rf
# ファイル以外のバックアップ
nextcloud.export -abc
# ファイルのバックアップ
rsync -a --delete /var/snap/nextcloud/common/nextcloud/data/ /mnt/msd/data

なお、nextcloud.exportでバックアップされたデータは、/mnt/msd配下のyyyyMMdd-HHmmss(日付-時分秒)ディレクトリに格納されます。

リストア方法

参考までに、バックアップからのリストア方法も紹介します。

まず、新しい環境にNextcloudをsnapでインストールします。

$ sudo snap install nextcloud

外部記憶媒体にアクセスするための権限をsnapに付与します。

$ sudo snap connect nextcloud:removable-media

バックアップ時と同様に、デフォルトのバックアップ領域を削除し、シンボリックリンクを作成します。

$ sudo rm -rf /var/snap/nextcloud/common/backups
$ sudo ln -s /mnt/msd /var/snap/nextcloud/common/backups

Nextcloudのリストア機能nextcloud.importで、ファイル以外のデータを復元します。

$ sudo nextcloud.import /var/snap/nextcloud/common/backups/20991231-120000

最後に、rsyncでファイルを復元します。

$ sudo rsync -a --delete /mnt/msd/data/ /var/snap/nextcloud/common/nextcloud/data

以上です。お疲れさまでした。

参考リンク

github.com

qiita.com