Nextcloud（snap版）のバックアップ・リストア

## 本記事の内容
Nextcloud（snap版）は、付属のコマンドでデータのバックアップ・リストアが簡単に行えます。
ラズパイ4で運用中のNextcloudで、実際に試してみました。

### 参考
[How to backup your instance · nextcloud/nextcloud-snap Wiki · GitHub](https://github.com/nextcloud/nextcloud-snap/wiki/How-to-backup-your-instance)

## 前提条件
- snapでインストールしたNextcloud

本記事では、以下の環境を使用しています。

- Raspberry Pi 4 Model B 4GB
- Ubuntu Server 20.04.2 LTS 64bit
- Nextcloud 20.0.7.1

## バックアップ方法

### 1. バックアップ
下記コマンドで、Nextcloudの全データがバックアップされる。

```
$ sudo nextcloud.export -abcd
WARNING: This functionality is still experimental and under
development, use at your own risk. Note that the CLI interface is
unstable, so beware if using from within scripts.

Enabling maintenance mode... done
Exporting apps...
          3.92M 100%   25.76MB/s    0:00:00 (xfr#266, to-chk=0/291)  
Exporting database...
Exporting config...
Exporting data...
         48.27G 100%   62.40MB/s    0:12:17 (xfr#10578, to-chk=0/27045)   

Successfully exported /var/snap/nextcloud/common/backups/20210330-234117
Disabling maintenance mode... done
```

#### オプション（バックアップ対象）

- a: アプリ（デフォルトでは対象外）
- b: データベース
- c: 設定
- d: ファイル

約50GBのデータのバックアップに、約13分かかった。
（読み取り560MB/秒、書き込み530MB/秒のSSDをUSB3.0で接続）

※出力メッセージによると、このバックアップ機能は実験段階のため、自己責任で使用する必要がある。

### 2. バックアップデータの確認

`/var/snap/nextcloud/common/backups/20210330-234117`に格納されている。
（末尾のディレクトリは`日付-時刻`）

```
$ sudo ls -l /var/snap/nextcloud/common/backups/20210330-234117
total 6092
drwxr-x--- 3 root root    4096  3月 28 16:34 apps
-rw-r--r-- 1 root root    1364  3月 30 23:41 config.php
drwxrwx--- 7 root root    4096  3月 28 16:34 data
-rw-r--r-- 1 root root 6218376  3月 30 23:41 database.sql
-rw-r--r-- 1 root root       2  3月 30 23:41 format
```

上記の「data」ディレクトリ内に、写真や動画などの実ファイルが保存されているので、他のアプリに移行する場合でも安心。

### 3. バックアップデータのアーカイブ・コピー
tarでバックアップディレクトリをまとめ、別のディスクやサーバーにコピーすればバックアップ完了。
（日付・時刻部分は要変更）

```
$ sudo -i
# cd /var/snap/nextcloud/common/backups
# tar -cf 20210330-234117_nextcloud-backup.tar 20210330-234117
```

※`/var/snap/nextcloud/common/backups`に対して、予め別のディスクをマウントした状態でバックアップを取得した方が、この手順が不要になるので効率が良いと思われる。（未確認）

## リストア方法
バックアップ時とは別のSSDにUbuntuをインストールし、バックアップデータを`/var/tmp`にコピーした状態からリストアを行った。

### 1. Nextcloudのインストール

```
$ sudo snap install nextcloud
```

### 2. ファイアウォール設定

```
$ sudo ufw allow 80,443/tcp
```


### 3. バックアップデータの展開

バックアップの保存先ディレクトリに移動し、Nextcloudのディレクトリに展開する。

```
$ cd /var/tmp
$ sudo tar -xf 20210330-234117_nextcloud-backup.tar -C /var/snap/nextcloud/current
$ sudo ls -l /var/snap/nextcloud/current/20210330-234117
total 6092
drwxr-x--- 3 root root    4096  3月 28 16:34 apps
-rw-r--r-- 1 root root    1364  3月 30 23:41 config.php
drwxrwx--- 7 root root    4096  3月 28 16:34 data
-rw-r--r-- 1 root root 6218376  3月 30 23:41 database.sql
-rw-r--r-- 1 root root       2  3月 30 23:41 format
```

### 4. バックアップデータのインポート
バックアップデータを、新たにインストールしたNextcloudに取り込む。
※Nextcloudの既存データは全て削除されるので、運用中のサーバーで使用する場合は要注意。

```
$ sudo nextcloud.import /var/snap/nextcloud/current/20210330-234117
WARNING: This functionality is still experimental and under
development, use at your own risk. Note that the CLI interface is
unstable, so beware if using from within scripts.

Clearing existing non-default apps... done
Importing apps...
          3.92M 100%   32.48MB/s    0:00:00 (xfr#266, to-chk=0/291)  
Dropping existing database... done
Creating new database... done
Granting database privileges to existing user... done
Importing database...
Importing config...
Clearing existing data... done
Importing data...
         48.27G 100%   59.19MB/s    0:12:57 (xfr#10578, to-chk=0/27045)   
Disabling maintenance mode... done
```

### 5. リストアの確認
ブラウザからNextcloudに接続。
ファイル、ユーザーやグループなどの設定、アプリなど、全て正常に復元されていた。

### 6. バックアップデータの削除
バックアップデータが不要な場合は削除する。

```
$ sudo rm /var/tmp/20210330-234117_nextcloud-backup.tar
$ sudo rm -rf /var/snap/nextcloud/current/20210330-234117
```