今回はsnapパッケージ版Nextcloudの実践的なバックアップ方法を、現実的に考えます。
snap版Nextcloud
snapパッケージ版Nextcloudは、本連載でも度々紹介しています。直近だと第778回、第781回が該当しますし、第822回ではおすすめsnapパッケージとして紹介しています。
snapに関しては賛否両論悲喜交々いろいろありますが、このNextcloudがsnapパッケージとして存在しているだけですべてが許されるといっても過言ではありません。いえ、やはり過言かもしれません。
個人のデータはできることであれば他人に預けないほうがいいに越したことはありません。そんな際真っ先に候補に上がるのがこのNextcloudです[1]。
単なるオンラインストレージに限らず、前述のようにアプリを追加することによってさまざまなことができるので非常に魅力的です。
Nextcloudはどこで動かしてもいいです。現に筆者も第703回で紹介したようにNASのような使い方もしています。現在も2TBほどのデータを置いています。
しかし、特性上VPSサーバーに置くことが多いでしょう。そうなってくると気になるのがバックアップの方法です。
snap版Nextcloudのバックアップ方法
snap版Nextcloudのバックアップ方法は大きく3つの方法が考えられます。
Backupアプリを使用する
その名もBackupというアプリがあって、これを使用すれば簡単にバックアップを取れるはずです。しかし現段階でNextcloud最新版
信頼性が第一のバックアップ方法としては、あまりいい選択とはいえません。
snapのスナップショットを使用する
snap版NextcloudのWikiにはSnap snapshot backup & restoreという項目があります。すなわちsnapの機能として実装されているスナップショット機能を使用し、バックアップとします。リンク先のドキュメントによるとスナップショットをエクスポートする機能まであって至れり尽くせりです。
これは使用してみたいところです。
snap版Nextcloudのエクスポート機能を使用する
snap版NextcloudのWikiにはExport and Importという項目もあります。これはsnap版Nextcloudが独自に持っているエクスポート機能を使用し、バックアップとします。
こちらも使用し、snapのスナップショット機能との違いを知りたいところです。
バックアップの実行
では実際にバックアップを実行します。
snapのスナップショット機能を実行する
Snap snapshot backup & restoreという項目のとおりのコマンドを実行します。
$ sudo snap stop nextcloud $ sudo snap save nextcloud $ sudo snap start nextcloud
すると/var/
以下に拡張子がzipのアーカイブが作成されます。
このスナップショットはsnapによって管理されていますので、削除などはドキュメントに沿って行うのがいいでしょう。
現在取得しているスナップショット一覧を表示するには次のコマンドを実行します。
$ snap saved Set Snap Age Version Rev Size Notes 1 nextcloud 7m32s 29.0.4snap2 43538 4.79GB -
取得したスナップショットはエクスポートできます。例として次のようなコマンドを実行します。
$ sudo snap export-snapshot 1 /media/backup/nextcloud-backup.zip
ご覧のとおり、1番のスナップショットを/media/
としてエクスポートしています。
スナップショットを削除するには次のコマンドを実行します。
$ sudo snap forget 1
挙動を見てるとスナップショットを全部消したら番号が1に戻るというわけではないようでした。もしもスクリプトで管理したいのであれば、そのあたりに考慮が必要そうです。
snap版Nextcloudのエクスポート機能を実行する
こちらもExport and Importという項目のとおりのコマンドを実行します。
$ sudo nextcloud.export
引数の意味もドキュメントのとおりで、和訳してみます。
使い方: nextcloud.export [オプション] サーバーの移行に沿うようにデータをエクスポートします。デフォルトでは Nextcloudのデータベース、設定とデータが含まれます (nextcloud.export -abcdを実行したのと同等です)。 利用できるオプション: -h: このヘルプメッセージを表示する -a: (デフォルトではない)アプリを含む -b: データベースを含む -c: 設定を含む -d: データを含む(とても大きくなることでしょう)
バックアップしたファイルは/var/
以下に、バックアップを実行した日付と時間で作成されたフォルダーの中にあります。こちらは特に管理されていません。
考察
snapのスナップショット機能は非常にスマートですが、毎回全部のファイルを圧縮するので完了するまでに時間がかかります。しかも圧縮するということはCPUにも負荷がかるということであり、VPSで動かしているような場合にはあまり現実的とは思えません。現実的にはLAN内にあるNextcloudサーバーで、データ量が2桁ギガバイト前半くらいの場合には便利そうです。
となると、たいていの場合はsnap版Nextcloudのエクスポート機能が現実的となりますが、こちらは単純には現在使用しているデータ量と同等の空き領域が必要となります。例えばVPSのストレージが100GBのプランで
よって空き領域を充分に確保できるという前提で、例えば次のようなスクリプトを定時で実行すればいいのではないかという結論に達しました。
#!/bin/sh
BACKUP_PATH=/var/snap/nextcloud/common/backups
BACKUP_TO=nextcloud@example.com:/home/nextcloud/nextcloud-backup/
nextcloud.export
STATUS=$?
if [ $STATUS = "0" ];then
BACKUP_DIR=$(ls $BACKUP_PATH)
else
exit 1
fi
if [ -n "$BACKUP_DIR" ]; then
BACKUP_FROM=$BACKUP_PATH/$BACKUP_DIR/
rsync -az --delete-after -e "ssh -i /root/.ssh/id_rsa" "$BACKUP_FROM" "$BACKUP_TO"
rm -rf "$BACKUP_FROM"
else
exit 1
fi
このスクリプトでは、エクスポート後、他に用意したサーバーへrsyncで差分のみコピーするようにし、その後エクスポートしたフォルダー自体を削除しています。
これはあくまで一例で、空き容量のチェックをしたほうがいいとか、BACKUP_
エラー通知はNextcloud TalkにもWebhookの仕組みはあるので、これを利用するのがいいでしょうか。
自動実行はsystemd timerを使用するのがいいでしょう。systemdに関してはsystemdの思想と機能がオススメです。というかすでにお読みのことでしょうが。
[オマケ] ゴミ箱にあるファイルの自動削除
デフォルトでは、Nextcloudはゴミ箱にあるファイルを自動削除しません。これを見落としているおっちょこちょいは筆者くらいだと信じたいですが、Nextcloudの使用量に対して全体の空き容量が少なすぎるのはなぜかを調査していて気づいたことです。
自動削除したい場合は次のコマンドを実行してください。
$ sudo nextcloud.occ config:system:set --value='auto, 90' trashbin_retention_obligation
これで90日後に問答無用で削除するようになります。詳細はドキュメントを確認してください。オプションにちょっとクセがあるので注意が必要です。