サイト運営を目標に現在勉強中です。
浅学ゆえの未熟な質問、ご容赦ください。
ご助力いただけますと大変助かります。
前提・実現したいこと
さくらVPSのイメージバックアップを日次で取得したい
- cronでシェルスクリプトを自動実行 - スクリプト実行時にマウント→その際にマウント失敗したら後続のバックアップ中止・エラーログ吐き出す→終了後アンマウント - 3日分のフルバックアップを残して、古いものは自動で削除 - スクリプト内にオンラインストレージのユーザ情報・パスワードは直書きしたくない
<利用サービス>
サーバ:さくらのVPS
オンラインストレージ:TeraCloud
できなかったこと・困っているところ
下記の記事を参考に、バックアップの自動化自体は一応できたのですが、自動マウント状態でスクリプトを実行しています。
https://qiita.com/halpas/items/2f51d3b9954367f1587e
自動マウント状態での実施を採用したのは、スクリプト内にパスワードを直書きしたくなかったのと、そうせずにマウント・アンマウントを自動化する方法が浅学故にわからなかったためです。
しかし、TeraCloudの仕様(自動的にzfsでスナップショットが取得されて利用できるストレージの空きがなくなる)や、自動マウントがうまくいかなくなってしまった(理由不明)時に、
バックアップやisoファイルのmvが失敗することがままあり、スクリプトを改善したいと強く思っています。
失敗だけならまだよいのですが、その結果、/tmpに不要なデータがたまってしまってディスクを圧迫してしまったりして、そのたびに手動で対応しなければいけなくなるので(頻繁に)、自動化の意味がないな、と感じています。
特に自動マウントについては、設定上はマウントされているのに、実態はmvができない状態となっていたり、lsで確認することすらもできない状態になっていたりすることがあるので、
「スクリプト実行時にマウント→その際にマウント失敗したら後続の作業中止・エラーログ吐き出す→終了後アンマウント」の方がよさそう、と単純に考えたのですが、
パスワード直書きせずに実施する方法が調べてもいまいちわかりませんでした。
お手数ですが、ご教授いただけると助かります。
よろしくお願いいたします。
現在のスクリプトは下記になります。
#!/bin/bash # フルバックアップスクリプト export LANG=C # 各種変数定義 MAIL=<メールアドレス> HOSTNAME=<ホスト名> # バックアップ保存先 TSDIR=/var/tmp ESDIR=/backup # バックアップファイルの最大サイズ。この値を超えると次のファイルが作成される。 # DVD-Rは4gまたは4200m BD-Rは22g ISOSIZE=16g # バックアップファイル保持期間(日) KEEP=4 #移動失敗したバックアップファイルを外部ストレージに移動 find ${TSDIR} -name *.iso | xargs -i cp -p {} ${ESDIR} find ${TSDIR} -name *.iso | xargs rm # mondoarchiveコマンドでバックアップを作成し、実行結果からresult=0の文字を検索 # result=0の文字がある場合は、バックアップ正常と判断 # 正常異常ともに処理結果をメールで送信 # -OiはISOモード、-NはNFS除外、-dは保存先ディレクトリ、-Eは除外ディレクトリ、-sはサイズ。 if /usr/sbin/mondoarchive -OiN -d ${TSDIR} -E ${ESDIR} -s ${ISOSIZE} -p `date +%Y%m%d%H%M%S`_${HOSTNAME}_Backup | grep "result=0"; then echo -e "Full backup succeed" else echo -e "Full backup Failed!!!! Type 'less /var/log/mondoarchive.log' to see the output log"| mail -s "[Warning] result of mondoarchive b ackup (${HOSTNAME})" ${MAIL} fi # バックアップディレクトリのファイルのタイムスタンプがKEEPで設定した日数以上前のものを自動削除する #mv /var/tmp/.iso /backup find ${ESDIR} -mindepth 0 -mtime +${KEEP} -type f | xargs --no-run-if-empty rm #バックアップファイルを外部ストレージに移動 find ${TSDIR} -name *.iso | xargs -i cp -p {} ${ESDIR} find ${TSDIR} -name *.iso | xargs rm exit
あなたの回答
tips
プレビュー