Nextcloudサーバのファイルのみバックアップするのでしたら。クライアントPCの1台に、すべてのファイルを同期すれば、最新ファイルのバックアップは行えそうです。
しかしファイルの変更履歴や削除済みファイル(ごみ箱)のバックアップを行うには、ファイルの同期では難しそうです。
さらにカレンダーやアドレス帳等、追加アプリケーションを本格的に使いたい場合、ファイルのバックアップのみでは足りず、データベースのバックアップが必要になります。
- iPhoneのカレンダーとリマインダーをNextcloudで管理するには
- iPhoneの連絡先をNextcloudで管理するには
- スマートフォンの電話帳、PCのアドレス帳をクラウドを使わずに一元管理するには
- ThunderbirdからNextcloudのアドレス帳にアクセスするには
- NextcloudのカレンダーをThunderbirdからCalDAVで利用するには
先日、Intel NUCにNextcloudサーバを構築しました。
ファイルの変更履歴やデータベースすべてをバックアップするために。こちらに外付けUSB HDDを取り付けて、夜間に自動バックアップを行うように設定してみたいと思います。
目次
Nextcloudサーバのデータ自動バックアップ設定 snap版
基本的にこちらの記事の手順に沿うかたちです。
- Backup — Nextcloud 13 Administration Manual 13 documentation
- Restoring backup — Nextcloud 13 Administration Manual 13 documentation
以前、Nextcloudpiからsnap版Nextcloudへデータの引越しを行いました。
こちらで行ったバックアップを、毎晩自動で行いましょう、という内容になります。
OSはFedora 28を使用しました。
外付けUSB HDDのフォーマット
USB端子にHDDを接続して、フォーマット後オートマウント設定を行おうと思います。
rootログインして操作しましたため、sudoは省略致しました。
- USB HDDを取り付けます。
- fdiskまたはcfdiskでパーティションを作成します。
cfdisk /dev/sdb
- mkfsでフォーマットします。
mkfs.ext4 /dev/sdb1
- あとでUUIDでマウントしますので、パーティションのUUIDを確認しておきます。
blkid /dev/sdb1
USB HDDオートマウント設定
- autofsをインストールします。
dnf in autofs
- マウント用ディレクトリを作成します。
mkdir /usb
- /etc/auto.master.d/usb.autofsファイルを作成します。
echo "/usb /etc/auto.usb" | tee /etc/auto.master.d/usb.autofs
/usbディレクトリのオートマウント設定は、/etc/auto.usbファイルに紐づく内容です。
- /etc/auto.usbファイルを作成します。先ほどフォーマットしたパーティションは、/usb/hdd1にマウントされる設定です。
hdd1 -fstype=ext4,rw :/dev/disk/by-uuid/<外付けUSB HDDのパーティションのUUID>
次のコマンドで設定可能です(/dev/sdaの部分は適宜変更して下さい)。
echo "hdd1 -fstype=ext4,rw :/dev/disk/by-uuid/"`blkid /dev/sda1 | grep -o '\sUUID=\"[0-9a-f\-]*\"' | grep -o '[0-9a-f\-]*'` | tee -a /etc/auto.usb
- autofsサービスを起動します。
systemctl enable autofs.service systemctl start autofs.service
- 正しくマップされているか確認します。
automount -m ls /usb/hdd1
オートマウントを使用しましたので、バックアップ完了後、一定時間が経つと自動的にアンマウントされて、HDDが省電力モード(ディスクの回転停止)に移行するかと思います。
USBケーブルを外す場合、念の為手動でアンマウントされたほうが宜しいかと思います。
sudo sync
sudo umount /usb/hdd1
Nextcloudバックアップスクリプト作成
- バックアップ先のディレクトリを作成しておきます。
mkdir /usb/hdd1/nextcloud
USB HDDのnextcloudディレクトリにバックアップしようと思います。
- 次のようなスクリプトを作成しました。
vi /root/nc_backup.sh
#!/bin/sh echo start at `date` snap restart nextcloud DST="/usb/hdd1/nextcloud" /var/lib/snapd/snap/bin/nextcloud.occ maintenance:mode --on rsync -vAax /var/snap/nextcloud/current/nextcloud ${DST}/current #rsync -vAax --delete /var/snap/nextcloud/current/nextcloud ${DST}/current rsync -vAax /var/snap/nextcloud/common/nextcloud/data ${DST}/common #rsync -vAax --delete /var/snap/nextcloud/common/nextcloud/data ${DST}/common /var/lib/snapd/snap/bin/nextcloud.mysqldump > ${DST}/nc_mysqldump.bak /var/lib/snapd/snap/bin/nextcloud.occ maintenance:mode --off echo end at `date`
- 実行可能に設定します。
chmod +x /root/nc_backup.sh
スクリプトは次のような内容です。
- メンテナンスモードON
- nextcloudディレクトリ(config、extra-apps)をコピー
- dataディレクトリをコピー
- mysqlcumpでデータベースバックアップ
- メンテナンスモードOFF
スクリプトを実行することで、いつでも自動バックアップが可能です。スクリプト実行中は、メンテナンスモードのため、Nextcloudサーバへアクセスできなくなります。
※18.10.23追記:稀にメンテナンスモードの切り替えができず、バックアップに失敗する場合があるようです。バックアップ前にnextcloudを再起動するようにスクリプトを修正しました(3行目を追加)。
※19.12.8追記:rsyncに–deleteオプションを付けた場合、転送元に存在しないファイルは、転送先から消去されます。オプションがない場合、バックアップ先のHDDの容量が減って行きますので、完全同期という意味で–deleteオプション付きのほうが良いかもしれません。
夜間自動実行の設定
cronでバックアップスクリプトを自動実行するように設定します。
dnf in cronie
systemctl start crond.service
crontab -e
0 1 * * * /root/nc_backup.sh > /root/nc_backup.log 2>&1
この場合、毎晩1時にバックアップが開始されます。
実際にバックアップにかかる時間は?
rsyncによるファイルコピーは、最初の1回目はフルコピーとなり、データのサイズに比例した時間がかかると思います。
2回目以降は差分コピーになりますので、ファイルの変更の大小により、時間がかわると思います。あまり差分が無ければ、フルコピーよりも時間がかからないかと思います。
Intel NUC(Celeron J3455)のUSB-3.0 2.5インチHDDを取り付けてフルコピーを行った場合、かかった時間は・・・
1時間15分で244GBのバックアップが行われました。
およそ195GB/1時間の計算になります。
当分は就寝中にバックアップが行われて、朝にはサーバが使用できる状態に戻っていると思いますので、ぐっすりぐーぐ眠りにつけるかと思います。