Nextcloudサーバのデータ自動バックアップ設定 snap版

Nextcloudサーバのファイルのみバックアップするのでしたら。クライアントPCの1台に、すべてのファイルを同期すれば、最新ファイルのバックアップは行えそうです。

しかしファイルの変更履歴や削除済みファイル(ごみ箱)のバックアップを行うには、ファイルの同期では難しそうです。

さらにカレンダーやアドレス帳等、追加アプリケーションを本格的に使いたい場合、ファイルのバックアップのみでは足りず、データベースのバックアップが必要になります。

先日、Intel NUCにNextcloudサーバを構築しました。

ファイルの変更履歴やデータベースすべてをバックアップするために。こちらに外付けUSB HDDを取り付けて、夜間に自動バックアップを行うように設定してみたいと思います。


Nextcloudサーバのデータ自動バックアップ設定 snap版

基本的にこちらの記事の手順に沿うかたちです。

以前、Nextcloudpiからsnap版Nextcloudへデータの引越しを行いました。

こちらで行ったバックアップを、毎晩自動で行いましょう、という内容になります。

OSはFedora 28を使用しました。


外付けUSB HDDのフォーマット

USB端子にHDDを接続して、フォーマット後オートマウント設定を行おうと思います。

rootログインして操作しましたため、sudoは省略致しました。

  1. USB HDDを取り付けます。
  2. fdiskまたはcfdiskでパーティションを作成します。
    cfdisk /dev/sdb

  3. mkfsでフォーマットします。
    mkfs.ext4 /dev/sdb1
  4. あとでUUIDでマウントしますので、パーティションのUUIDを確認しておきます。
    blkid /dev/sdb1

USB HDDオートマウント設定

  1. autofsをインストールします。
    dnf in autofs
  2. マウント用ディレクトリを作成します。
    mkdir /usb
  3. /etc/auto.master.d/usb.autofsファイルを作成します。
    echo "/usb /etc/auto.usb" | tee /etc/auto.master.d/usb.autofs

    /usbディレクトリのオートマウント設定は、/etc/auto.usbファイルに紐づく内容です。

  4. /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

  5. autofsサービスを起動します。
    systemctl enable autofs.service
    systemctl start autofs.service
  6. 正しくマップされているか確認します。
    automount -m
    ls /usb/hdd1

オートマウントを使用しましたので、バックアップ完了後、一定時間が経つと自動的にアンマウントされて、HDDが省電力モード(ディスクの回転停止)に移行するかと思います。

USBケーブルを外す場合、念の為手動でアンマウントされたほうが宜しいかと思います。

sudo sync
sudo umount /usb/hdd1

Nextcloudバックアップスクリプト作成

  1. バックアップ先のディレクトリを作成しておきます。
    mkdir /usb/hdd1/nextcloud

    USB HDDのnextcloudディレクトリにバックアップしようと思います。

  2. 次のようなスクリプトを作成しました。
    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`
  3. 実行可能に設定します。
    chmod +x /root/nc_backup.sh

スクリプトは次のような内容です。

  1. メンテナンスモードON
  2. nextcloudディレクトリ(config、extra-apps)をコピー
  3. dataディレクトリをコピー
  4. mysqlcumpでデータベースバックアップ
  5. メンテナンスモード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時間の計算になります。

当分は就寝中にバックアップが行われて、朝にはサーバが使用できる状態に戻っていると思いますので、ぐっすりぐーぐ眠りにつけるかと思います。

スポンサーリンク

フォローする

スポンサーリンク