自宅サーバのNextcloudの全データを、外付けHDDといった外部記憶媒体に定期的にバックアップします。
前提として、以下の環境で作業します。
- 自宅サーバ: Ubuntu 22.04
- Nextcloud: snap版を使用してインストール
また、基本的に以下の公式サイトのQ&Aを参考にしました。
外部記憶媒体のマウント
バックアップ先となる外部記憶媒体をマウントします。初めて使用する場合などは、必要に応じて事前にフォーマット(初期化)します。
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
以上です。お疲れさまでした。