続 ReadyNAS から B2 Cloud Storage を使いたい
https://nakoruru.jp/how_to_do_a_regular_backup_from_readynas_ultra4_to_backblaze_b2_cloud_storage/
Backblaze B2 Cloud Storage cron backup from ReadyNAS Ultra4.
以前、上記の記事を書いたんですよ。その後、公式に ReadyNAS Ultra4 の AWS S3 から b2 cloud storage へバックアップできるようになったのですが、いつのまにかこれが停止していました。ReadyNASは ファームウェアは 4.x 系から 6.x 系へとアップデート しているのですが、公式フォーラムだと 6.10 系で上記の症状が2021年末から出ていたという事。
うーん。これは困った。ちなみに、duplicity 0.7.19 でも接続できなくなった様子。これを対応していきます。
ただやはりこれ自体のバックアップは取っておきたい。しかし、6.10.1では対応しているクラウドバックアップを確認すると…
まずはおさらい。
まず各コストを比較します。
- ReadyNAS Vault (1TB/$10/月 但し1ファイル10GB制限)
- Amazon Drive (1TB/1,300円/月)
- Amazon S3 (1TB/$10/月) ※更に転送量課金
- Amazon S3 Glacier (1TB/$4/月) ※更に転送量課金
- Dropbox (2TB/1,200円/月)
- Google Drive (2TB/1,360円/月)
- Microsoft Azure (1TB/$20.8/月) ※操作課金有
- Microsoft OneDrive (1TB/2,240円/月)
- B2 Cloud Storage (1TB/$5/月) ※ダウンロード時に転送量課金($0.01/GB)
B2 Cloud Storage は1GBあたり$0.005、つまり1TBで$5です。但し、ダウンロード課金があるので万が一ダウンロードをする事になると、GB単価で$0.01掛かります。とは言え保険してのバックアップであれば問題無く「本当に全てを失った時に取り戻せる」のは心強いと思います。実際にNASが壊れる状況を結構見てきています。単純な電源故障であれば直せるかも知れませんが、それも保証が無くなった筐体では期待できません。(余談ですが、Ultra4とかDuoの電源を独自で直した経験もあります)
ちなみに、ReadyNASはネットワークストレージを見限ったようです。ラインナップもほぼありません。今から導入するなら、Synologyやasustorをオススメします。
B2 Cloud Storage を使う為には
※ 作業をする際には、念の為全てをバックアップしてから作業してください!この作業をすると保証が無くなります
※ 当方は一切の責任は負いませんので、各自のご判断で作業してください!
簡単に手順を説明するとこんな感じです。(※最低限Linuxの知識は必要なので何を言っているか判らなければ、素直にWasabiでも使ってください)
- SSHでアクセス可能にする(保証が切れます)
- B2 Cloud Storage の方で色々と設定をする。
- SSHでrootログインする
- b2-linux コマンドをダウンロードして実行権限を与える
- b2-linux の設定をする
- b2-linux で対象ディレクトリをクラウドへアップロードテストを行う
- シェルスクリプトを組んで cron へ登録して完了
手順
1. RAIDiator 4.2 の頃は bin を導入する方法でSSHアクセス可能 となったのですが、RAIDiator 6系では WEBから設定が可能です。
2. B2 Cloud Storage の方で色々と設定をします。(アカウントの作り方とかは割愛)
まず、対象の Bucket を作成します。[Buckets] から [Create a Bucket]を選択し、Bucket Unique Name: には好きな名前を付けてください。勿論半角英数字でお願いします。Files in Bucket are は必ず Private にしてください。

Bucket を作成したら、左側のメニューの [App Keys] から [Add a New Application key] を選択します。
Name of Key は適宜半角英数字でつけてください。Allow access to Bucket(s): は先程作成した Buckets の名前を選択します。Type of Accessは Read and Write で良いと思います。あとは空欄で構いません。

作成すると、KeyID と KeyName 、applicationKey が発行されます。これはとても大切なのでメモするなり保存しておいてください。この発行されたキーを利用してアップロードします。

3. SSHで rootログインします。
4. b2-linux コマンドをダウンロードして実行権限を与えます。(自分はコマンドを /usr/local/bin/ に移動させました)
# wget "https://github.com/Backblaze/B2_Command_Line_Tool/releases/latest/download/b2-linux"
# chmod +x b2-linux
# mv ./b2-linux /usr/local/bin/
5. b2-linux の設定をします。
# /usr/local/bin/b2-linux authorize_account *keyID* *applicationKey*
Using https://api.backblazeb2.com
# ls -l /root/.b2_account_info
エラーが出なければ、KeyID と applicationKey が登録されます。登録されたファイルは /root/.b2_account_info にあるので、初期化したい場合はこのファイルを消してください。
6. b2-linux で対象ディレクトリをクラウドへアップロードテストを行ってみます。
作成した Bucket名 は test-upload 、ローカルの場所は /data/media とします。(ReadyNASは /data 以下にデータが入ります)
# /usr/local/bin/b2-linux sync --dryRun --keepDays 30 --skipNewer \
/data/media \
b2://test-upload
dry-run なのでアップロードはしません。対象の Bucket にファイルがある場合は比較が自動的に行われます。skipNewer はサーバ側のファイルが新しい時にはアップロードしないという設定です。ちなみに、同名のファイルがローカルよりサーバ側が新しい時にはエラーで止まります。
–keepDays 30 オプションは同名ファイルが更新された場合、30日間は保存するというオプションです。これにより、1ヶ月間は誤って上書きしてしまったファイルを取り出す事ができます。スナップショットは便利ですね。
さて、このテストで問題無いとなったら実際にアップロードしてみます。
# /usr/local/bin/b2-linux sync --keepDays 30 --skipNewer \
/data/media \
b2://test-upload
hide .bzEmpty
hide ~なんちゃら~
count: 5470 files compare: 5470 files updated: 39 files 0 B 0 B/s
こんな感じでデータを自動的に比較してアップロードしてくれます。
7. 最後にシェルスクリプトを組んで cron へ登録します。
# cat /root/b2-linux-operation.sh
#!/bin/bash
if [ "$1" = "dryrun" ]
then
echo "Upload Test from local ReadyNAS to Backblaze B2 cloud storege..."
/usr/local/bin/b2-linux \
sync \
--dryRun \
--keepDays 30 \
--skipNewer \
$2 \
b2://$3
echo "Dryrun Sync completed..."
elif [ "$1" = "sync" ]
then
echo "Upload from local ReadyNAS to Backblaze B2 cloud storege..."
/usr/local/bin/b2-linux \
$1 \
--keepDays 30 \
--skipNewer \
$2 \
b2://$3
echo "File Sync completed..."
else
echo "command: b2-duplicity-opertion.sh [dryrun/backup] [localpath] [Backet Name]"
fi
# chmod +x /root/b2-linux-operation.sh
とこんな感じでシェルスクリプトを書いてみました。あとはシェルスクリプトの後ろに引数で、dryrun か backup を記載し、バックアップしたいディレクトリのパスを指定すればアップロードできます。心配な時は dryrun でテストしてください。restore も導入したかったのですが、b2-linux コマンドだと誤動作が怖いので止めました。恐らく、source と destination を逆にすればいいだけだとは思いますが。
テストしてみます。
Bucket名 は test-upload 、ローカルの場所は /data/media とします。
# /root/b2-linux-operation.sh dryrun /data/media upload-test
Upload Test from local ReadyNAS to Backblaze B2 cloud storege...
~ 色々 ~
Dryrun Sync completed...
問題なさそうですね。
これでアップロードする事が可能になりました。あとはいつも通りに、cronへ登録します。毎朝3時に実行したければ、これで大丈夫です。
# crontab -e
0 3 * * * /root/b2-linux-operation.sh sync /data/media upload-test >/dev/null 2>&1
但し、最初の1回はフルバックアップを取るので、容量次第ではとてつもなく時間が掛かります。
ReadyNASは非常に便利かつ、とても安い上に安定しています。自分の環境では既に8年以上動作させたままですが、HDDの故障以外で壊れた事はありません。有効に使っていけると良いですね。