LS220を手に入れた
ので、sshで入れるようにしたりしました。
が、肝心のs3cmdや、awscliのインストールが上手くいかない。。。。
LS220を色々無茶をしすぎて壊してしまうのも怖いので、一旦、s3の取り扱いをラズベリーパイでやってみる。
目的
LS220というRAID1のNASを手に入れたのですが、AWS S3に保存し、冗長性を確保するのが目的です。
ラズパイからNASをマウントし、これをS3に日次バックアップしていきます。
構想としては、下記のような感じです。
数TBのバックアップなら、数百円/月程度で保存できることになります。
ところで、
s3cmdは、amazon非公式のs3に特化したツールのようです。
一方、awscliは、amazon公式のaws全体を取り扱えるツールのようです。
それぞれに得手不得手があるようです。
なので、今回はインストールの簡便性から、awscliを使います。
s3cmdを使う手もあるようです。
AWSCLI
インストール
公式は下記の通り
ラズパイの場合、Linux ARMを参考にし、
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
設定
を参考にする。Mac向けでしたが、他のOSでも参考になります。
下記で設定内容を確認できます。
$ aws configure
初期設定はこれから入ります。
以下は、設定内容の確認です。
$ aws configure list
$ cat ~/.aws/credentials
$ aws configure list --profile default
Name Value Type Location
---- ----- ---- --------
profile default manual --profile
access_key ****************ZH7U shared-credentials-file
secret_key ****************oGwn shared-credentials-file
region <not set> None None
下記で接続確認できます。
$ aws s3 ls --profile default
2024-07-12 18:16:01 [bucket name]
試しになにかアップロードしてみる。
アップロードしたいディレクトリにて
aws s3 sync . s3://my_bucket/path --storage-class DEEP_ARCHIVE
無事アップロードまでできました。
NASのマウント
次に対象のディレクトリを持つNASをラズパイ上にマウントします。
を参考にします。
本当は、LS220上で上記awscli(またはs3cmd)を実行したかったのですが、断念しています。
マウント先のディレクトリも迷うところです。
mntや、mediaいずれでもいいようですが、mediaがUSBドライブや、CD-ROMの自動マウント先として使われることが多く、またmntは一時的なマウント先として使われるようです。
って両方とも一時的なマウント先として使ってるからだいたい同じやん!
気を取り直して、マウント先にディレクトリを作成後、
sudo mount -t cifs //192.168.x.xxx/share /mnt/ls220d_share -o username=yyyyy,password=xxxxx,vers=2.0
ここでは念の為に、LS側でリードオンリーのユーザーを本件専用に作っています。
なにかしらラズパイに汚染があったとしても、LS側まで行かない設定です。
と思いましたが、log用のディレクトリにアクセス・保存できませんので、
一部書き込みできるように開放し、
$ id
uid=1000(hoge) gid=1000(hoge) ......
こんなんみてもわからないんですが、,uid=1000,gid=1000を追記します。
sudo mount -t cifs //192.168.x.xxx/share /mnt/ls220d_share -o username=yyyyy,password=xxxxx,vers=2.0,uid=1000,gid=1000
crontabで自動化
こちらのようにcrontabでawsを実行するだけで十分なのですが、NASへ接続できなかったときなどの対処(勝手に消えることとはいと思いますが)を考え、必要なときにマウントし、処理が終わればアンマウントのバッチファイルにしようと思います。
#!/bin/bash
# 20240812
# chmod u+x back2s3.sh
# chmod 755 back2s3.sh
# LS220をマウント
sudo mount -t cifs //192.168.x.xxx/log /mnt/ls220d_log -o username=yyyy,password=zzzz,vers=2.0,uid=1000,gid=1000
sudo mount -t cifs //192.168.x.xxx/share /mnt/ls220d_share -o username=yyyy,password=zzzz,vers=2.0
sudo mount -t cifs //192.168.x.xxx/private /mnt/ls220d_private -o username=yyyy,password=zzzz,vers=2.0
# private全体をバックアップ
# aws s3 sync "/mnt/ls220d_private/" "s3://my_bucket/private" --storage-class DEEP_ARCHIVE
# セミテスト用ILのみバックアップ
# aws s3 sync "/mnt/ls220d_private/Image Library" "s3://my_bucket/private/Image Library" --storage-class DEEP_ARCHIVE
# テスト用バックアップ(一旦軽めのバックアップを実施してみる。)
aws s3 sync "/mnt/ls220d_private/test" "s3://my_bucket/private/test" --storage-class DEEP_ARCHIVE > log_`date "+%Y%m%d%H%M%S"`.log
# アンマウント
sudo umount /mnt/ls220d_log
sudo umount /mnt/ls220d_share
sudo umount /mnt/ls220d_private
実行権限を与えます。
$ chmod u+x back2s3.sh
$ chmod 755 back2s3.sh
最後にcrontabに追記します。
$ sudo nano /etc/crontab
毎日午前4時前ぐらいな感じでいきます。
54 3 * * * user works/back2s3.sh
課題
autofs
autofsは、リソース消費が少なくていいらしい。
オンデマンドでマウントでき、自動でアンマウントできる点もいい。
logの保存
logの保存用にNAS内にLOGフォルダを作りましたが、書き込みできません。
NAS側の権限ではなく、クライアント側の権限の問題のようです。
マウントする際に uid と gid オプションを指定してやらないといけないようです。
→対応済み
マウント判別
NASへの接続に失敗し、アップロードができないようなときには中止し、
この旨をメールにて知らせたい。
追記
どうやら、64bit版をインストールしてしまっているようです。
ログを確認すると下記のエラーが発生しています。
hoge.sh: line 42: /usr/local/bin/aws: cannot execute binary file: Exec format error
に従い、64bit版をアンインストールします。
念の為、ディストリビューションと、32bitを確認し、32bit版をインストールします。
$ uname -m
armv7l
$ getconf LONG_BIT
32
上記で、ARM、32bitだと確認できる。
pip3 install awscli --upgrade --user
もちろん、初期設定から始めることになります。