@azyobuzinの技術ブログ

docker volume create で作成したローカルボリュームを Google Drive へバックアップする方法のメモ。

手順

1. Google Drive の設定

適当なデスクトップ環境に google-drive-ocamlfuse をインストールして、初期設定を済ませる。

設定済みの ~/.gdfuse ディレクトリを回収する。

2. 作業用ユーザーを作成

ここからサーバー上。 google-drive-ocamlfuse は一般ユーザーで動くので、それ用のユーザーを作っておく。

sudo adduser --system --disabled-password backupworker

作成したユーザーのホームディレクトリに .gdfuse をコピーする。

3. crontab の設定

スクリプトを適当な場所に置き、 root の crontab に定期実行の設定をする。

# m h  dom mon dow   command
# Docker Volume Backup
0 8 * * * /home/azyobuzin/dockerbackup.sh hackmd

スクリプト

#!/bin/bash
# Usage: dockerbackup.sh VolumeName

set -e

WORKER_USER=backupworker
WORKER_HOME="/home/${WORKER_USER}"
DEST_DIR_NAME=DockerBackup

for volume_name do
    backup_id="${volume_name}-$(date +%Y%m%d-%H%M%S)"
    filename="${backup_id}.tar.xz"
    tmp_filepath="${WORKER_HOME}/${filename}"

    echo "${filename}"

    # Get the volume directory
    volume_dir="$(docker volume inspect -f '{{.Mountpoint}}' "${volume_name}")"

    # Compress the directory
    cd "${volume_dir}"
    tar -caf "${tmp_filepath}" .
    chown "${WORKER_USER}" "${tmp_filepath}"

    gdrive_dir="${WORKER_HOME}/gdrive-${backup_id}"
    dest_dir="${gdrive_dir}/${DEST_DIR_NAME}"
    worker_script="\
        # Mount Google Drive
        mkdir '${gdrive_dir}'
        google-drive-ocamlfuse '${gdrive_dir}'

        # Copy the file
        mkdir -p '${dest_dir}'
        cp -n '${tmp_filepath}' '${dest_dir}/${filename}'

        # Unmount
        fusermount -u '${gdrive_dir}'
        rmdir '${gdrive_dir}'
    "

    # Upload the file to Google Drive
    sudo -Hu "${WORKER_USER}" bash -c "${worker_script}"

    rm "${tmp_filepath}"
done

このログへのコメント

コメントはありません