技術ネタ

QNAP製NASのUbuntuからAmazon Driveにバックアップ

技術ネタ
スポンサーリンク

どんな記事?

QNAP製NAS上にインストールしたUbuntuを使って、2021年5月以降もAmazon Drive(Amazon Photos)に写真を自動バックアップする方法を考察し、記事にまとめました。

この記事でできること、できないこと

NAS上で仮想的にOSを動かせる仕組みを使います。この記事ではUbuntuをゼロからインストールしていますが、Dockerなどのコンテナ仮想化を使うともっと簡単かもしれません。

  • 追加費用なく(記事執筆時)Amazon Driveへファイル送信
  • NAS上のLinuxで実行(もちろんNASでなくても可)
  • CLIによる導入&設定
  • 24時間毎にバックアップ

NAS → Amazon Driveへの単一方向バックアップのみで、同期については今回は扱っていません。

またodrive無料プランによる制約があるので覚えておきましょう。

  • 実行間隔の変更はできない(即時バックアップコマンドをCronで回すという手もある?)
  • ファイルの除外ルールは設定できない

無料プランと有料プランで設定ファイルが分かれています。詳細は以下をご参照ください。

https://docs.odrive.com/docs/advanced-client-options

背景

僕は写真を撮ったらまず編集用PCのローカルドライブに保存し、同じタイミングでNASにもすべてバックアップしています。そしてNASに備わっているバックアップユーティリティを使って定期的にクラウドストレージ(ここではAmazon Drive)にもアップロードしていました。

ちなみにメインで使っているNASはQNAP製のTS-873のメモリを64GBに増設したものです。最近後継機種のTS-873Aが発売され、CPUの強化とLANポートが2.5Gbpsに変更になっています。

大量の写真データをクラウドにバックアップしたいと思ったとき、Amazon Photosが最優秀だと思っています。使いやすいかどうかはさておき、RAWファイルまでまるごとアップしても容量を消費しないという、そんなに太っ腹で大丈夫?というサービスは他の追随を許しません。アップした画像をAmazonがどう扱うかについて再考する必要も感じますが、少なくとも個人で使うぶんには問題ないかなと思っています。

しかしその手法がついに使えなくなってしまいました。

前々から話題は耳にしていたのと、こんなメール↓

Amazon.co.jpをご利用いただき、ありがとうございます。

Amazon Drive上のお客様のコンテンツに影響する可能性がある今後の変更について、そしてそのコンテンツを安全に保つための手順をお知らせいたします。

お客様は、Amazon Driveへ情報を保存するために、QNAP Hybrid Backup Sync、HybridMountまたはCloud Drive Syncをご利用されています。

2021年4月30日より、QNAP Hybrid Backup Sync、HybridMount、Cloud Drive SyncからAmazon Driveへのアクセスが停止されることが予定されています。2021年4月30日を過ぎると、上記のいずれのアプリケーションもAmazon Driveにアクセスできなくなります。保存済みのコンテンツには、今後もAmazon Photosのウェブサイト、デスクトップアプリ、モバイルアプリからアクセスできます。

変更後も問題なくご利用いただくために、QNAP Hybrid Backup Sync, HybridMount and Cloud Drive Syncをご利用のすべてのお客様には、以下の手順に
~~~~~省略~~~~~
上記の手順を完了すると、QNAP Hybrid Backup Sync、HybridMount、およびCloud Drive Syncのアクセスが停止された後でも、お客様のコンテンツにアクセスしていただけます。

が来てたので知ってはいたんですが、いよいよQNAPやSynologyなどのNASから接続できなくなり、代替手段を考えねばならなくなりました。

メールによれば今後はデスクトップ向けクライアントを使用するようにとあります。当初はNASにWindowsをインストールして……とも思ったんですが、ファイル転送するだけなのにWindowsのライセンス使うの勿体ないしリソース食いで動作も重い! ということで動作の軽いUbuntuを使ってバックアップする手段を考えてみました。

以前はacd_cliとか使えたみたいですが、API Keyの取り扱いに関する規約違反で使えなくなってるみたいです。今回まとめた方法は大丈夫だと思うんですけど、また使えなくなるかもしれないことをご承知おきください。

Virtualization StationとUbuntuの導入

こちらに別記事でまとめました。

odriveのインストール

今回のキモとなるodriveをUbuntuにインストールしましょう。
アカウント作成の必要がありますが、バックアップするだけならプランはフリーで充分です。

Connect any storage to odrive. Over 20+ providers are supported, even apps such as Facebook or Slack. Access infrastructure storage such as Backblaze B2, Wasabi, or Amazon S3 (and anything with an S3 compatible API). Or connect servers using standard protocols like FTP, SFTP, and WebDAV.

とあるように、様々なクラウドストレージを統合して一元管理できるようなソフトですね。色々とメリットを謳っていますが、今回お世話になる上で重要なのはLinux用のCLIクライアントがあるということ。これでヘッドレス運用ができますね。

Linux用CLIクライアントのインストール詳細はマニュアルページを参照してください。

https://docs.odrive.com/docs/odrive-sync-agent#install-on-linux


僕が試したときは以下のコマンド一発でインストールできました。

od="$HOME/.odrive-agent/bin" && curl -L "https://dl.odrive.com/odrive-py" --create-dirs -o "$od/odrive.py" && curl -L "https://dl.odrive.com/odriveagent-lnx-64" | tar -xvzf- -C "$od/" && curl -L "https://dl.odrive.com/odrivecli-lnx-64" | tar -xvzf- -C "$od/"

エイリアスの設定

毎回フルパスで実行するのはダルいのでエイリアスを登録しました。

.bash_aliasesodriveというコマンド名で登録します。ファイルがなければ作りましょう。

alias odrive='$HOME/.odrive-agent/bin/odrive'

サービスの設定

odriveが自動起動するようにサービスを登録します。

以下のパスにファイルを作成。

~/.config/systemd/user/odrive.service

# systemd user service to run odrive agent
#
# Use loginctl enable-linger to create a user manager for the user at boot and kept around after logouts. This will allow auto-starting of the odrive agent for that user
# https://www.freedesktop.org/software/systemd/man/loginctl.html#enable-linger%20USER%E2%80%A6
#
# save this file as:
# ~/.config/systemd/user/odrive.service
#
# enable: $ systemctl --user enable odrive.service 
# start:  $ systemctl --user start odrive.service 
# status: $ systemctl --user status odrive.service
# 

[Unit]
Description=Run odrive-agent as a user service
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=forking
ExecStart=%h/.odrive-agent/bin/odriveagent
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target
# https://www.freedesktop.org/software/systemd/man/systemd.special.html#Units%20managed%20by%20the%20user%20service%20manager

これもマニュアルに書いてあることそのままやりました。

# enable: $ systemctl --user enable odrive.service 
# start:  $ systemctl --user start odrive.service 
# status: $ systemctl --user status odrive.service

とご親切にサービス登録のコマンドまで書いてありますね。

odriveの設定

odriveとAmazon Driveの連携

続いてブラウザ上でodriveとAmazon Driveの連携をします。

https://www.odrive.com/account/myodrive

ちなみに連携したアプリの名前がデフォルトだと「Amazon Drive」になっていましたが、マウントする際に指定するディレクトリ名にもなるので、スペースなしの名前にしておくとよいかと思います。

また以下のページでAuth Keyを発行することができますので、authenticateコマンドで認証を済ませれば、クライアントからodrive連携したクラウドストレージにアクセスすることができます。

https://www.odrive.com/account/authcodes
odrive authenticate 00000000-0000-0000-0000-000000000000-00000000

Amazon Driveのマウント

# マウントポイントの作成
sudo mkdir /mnt/odrive/AmazonCloudDrive/

# Amazon Driveのマウント
odrive mount /mnt/odrive/AmazonCloudDrive/ /AmazonCloudDrive/

マウントしてもファイルが一覧として見れたりするわけではないので注意。

バックアップのテスト

マウントできたら一度バックアップができるか確認しておくとよいかと思います。

以下はAmazon Driveのルートディレクトリにバックアップする例です。

odrive backup /home/hogehoge/Photo/ /AmazonCloudDrive/

これでファイルが転送できたでしょうか? 無事にファイルがバックアップできていることが確認できたら、テストしたバックアップジョブを削除します。

バックアップジョブ一覧はodrive status --backupsで確認することができます。

odrive status --backups

ID: 2d692e1a-cb71-40d9-b448-44e555ab682b
Local Path: /mnt/Photo/
Remote Path: /AmazonCloudDrive/Photo
Status: Active

ジョブの削除はodrive removebackup job IDで行えます。

odrive removebackup 2d692e1a-cb71-40d9-b448-44e555ab682b
The backup job for /home/hogehoge/Photo was successfully removed.

UbuntuにNASをマウントする

バックアップしたいファイルはNASにありますので、ディレクトリをマウントします。

# cifs-utilsのインストール
sudo apt install cifs-utils

# マウントポイントの作成
sudo mkdir /mnt/Photo

試しにマウントするなら以下のコマンド。読み取り専用でマウントします。

sudo mount -r -t cifs //xxx.xxx.xxx.xxx/Photo /mnt/Photo -o username=aaaa,password=bbbb

パスワードにカンマが使われてたりすると実行できません。たぶん。

どうせ自動マウントするので/etc/fstabに記述します。

sudo vi /etc/fstab

以下の1行を追記します。

//xxx.xxx.xxx.xxx/Photo /mnt/Photo cifs credentials=/home/hogehoge/.cifs.credo,uid=1000,gid=1000,file_mode=0444,dir_mode=0555 0 0

/etc/fstabにパスワード書くのはよくないので、認証情報を別ファイルにします。

とりあえず/home/hogehoge/.cifs.credoを以下のように設定しました。もちろんユーザ名とパスワードはご自身のNASの情報を使ってください。

username=your_username
password=user_password
domain=WORKGROUP

バックアップジョブの作成と実行

あらためてバックアップジョブを作成します。

NASのPhotoフォルダをそのままAmazon Driveに同期する例です。

odrive backup /mnt/Photo/ /AmazonCloudDrive/

無事にバックアップできれば晴れてNASからAmazon Driveへの自動バックアップが完成です!

おまけ

今回の記事で使いそうなodrive関連のコマンドをまとめました。

認証

authenticate
Authenticate odrive with an auth key

usage: odrive authenticate [-h] authKey

positional arguments:
  authKey - auth key from https://www.odrive.com/account/authcodes

example: odrive authenticate 00000000-0000-0000-0000-000000000000-00000000

マウント

mount
Mount remote odrive path to the specified local folder

usage: usage: odrive mount [-h] localPath remotePath

positional arguments:
  localPath - local path of the desired mount folder
  remotePath - remote path for the mount ex: /Google Drive/Pictures or just / for odrive root

ex: odrive mount /my_local_sync_folder /

アンマウント

unmount
Remove a mount

usage: odrive unmount [-h] localPath

positional arguments:
  localPath - local path of the mount

ex: odrive unmount /my_local_sync_folder

バックアップジョブの作成

backup
Backup a local folder to a remote odrive path

usage: odrive backup [-h] localPath remotePath

positional arguments:
  localPath - local path of the desired backup folder
  remotePath - remote path for the backup ex: /Dropbox/Backup

ex: odrive backup /my_local_backup_folder /Dropbox/Backup

Note: The backup interval can be adjusted via the odrive advanced configuration files
The default backup interval is 24 hours.

即時バックアップ

backupnow
Run backup jobs immediately

usage: odrive backupnow [-h]

ex: odrive backupnow

バックアップジョブの削除

removebackup
Remove a backup job

usage: usage: odrive removebackup [-h] localPath

positional arguments:
  localPath - local path of the backup folder

ex: odrive removebackup /my_local_backup_folder

ステータスの表示

status
Get a summary of odrive's status

usage: odrive status [-h] [--mounts | --backups | --sync_requests | --uploads | --downloads | --background | --trash | --waiting | --not_allowed]

optional arguments:
  --mounts - get status on mounts
  --backups - get status on backup jobs
  --sync_requests - get status on sync requests
  --uploads - get status on uploads
  --downloads - get status on downloads
  --background - get status on background requests
  --trash - get status of trash items
  --waiting - get status of waiting items
  --not_allowed - get status of not allowed items

ex: odrive status

認証の解除

deauthorize
Deauthorize odrive to disassociate the current user and exit

usage: odrive deauthorize [-h]

ex: odrive deauthorize

odriveの停止

shutdown
Shutdown/exit odrive

usage: odrive shutdown [-h]

ex: odrive shutdown

この記事に登場した製品

タイトルとURLをコピーしました