- ベストアンサー
常時書き込みされているファイルをtarでバックアップしたい
Solaris9で/var配下を定期的にバックアップしたいと考え、 cronにて以下のようなコマンドを含むスクリプトを実行しています。 /usr/bin/tar cEfiX /backup/var_backup_`date '+%w'`.tar ${EXFILE} -C / ./var しかし、/var配下に常時書き込みされているログファイルがあり、 tarがreturncode=1で終了してしまいます。 その際のエラー出力は以下で、 tar: ./var/hogehoge.log: file changed size tarファイルに加える前と後で./var/hogehoge.logのファイルサイズが違っている という内容だと認識しています。 ※このファイルはバックアップの必要があるファイルでexcludeリストに加えるわけにもいきません。 tarコマンドの後に if [ $? != 0 ] という条件式を置いてエラーを検知しています。 何とかこのエラーだけを無視する妙案はありませんでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 ちょっと筋違いになってしまいますが・・ /var配下をいったん別のエリアにCOPYするとかじゃだめでしょうか。 あるいは、エラーになるファイルが特定されているのでしたらそのファイルだけCOPYして、 COPYしたファイルをtarの対象にするとか。
その他の回答 (2)
- qaz_qwerty_me
- ベストアンサー率19% (214/1115)
全く別なアプローチですが Solaris9 では Volume Manager( 旧名Disk Suite )がパッケージされているので、RAID 1(ミラー)を構成しコピーが必要になった時にミラーを切り離してアクセスがない静的なファイルをコピーするという方法もあります。 コピー終了後は、切り離したミラーを接続すると自動的にオフラインの間の差分は展開されるのでユーザーの負担はありません。
お礼
ご回答ありがとうございます。 悪い意味ではなく面白い発想ですね。 ただ、残念ながらディスクは2本構成で すでにSVMのRAID1でまるまるで使ってしまっているため この方法は使えそうにありません。
- z_liang_00
- ベストアンサー率42% (45/107)
#全く見当違いな回答でしたら済みません。スルーしてください。 プロセスがずっと捕まえているファイルをバックアップする時は、 私は newsyslog(Linuxではlogrotate) を使っています。
お礼
ご回答ありがとうございます。 残念ながら「プロセスが掴んでいる」わけではなく、 「細かいデータが頻繁に書き込まれている」という感じです。 ちなみに、newsyslogでバックアップというのがピンとこないのですが、どのようなことをされているのでしょうか?話が脱線してしまいますがよろしければ教えてください。
お礼
ご回答ありがとうございます。 実際にファイルのバックアップは取れていて、ReturnCodeでエラーになるため、ReturnCodeを何とかすることばかり考えていました。 確かにtarの前にコピーしてコピー元はexcludeに入れておけばバックアップも取れてReturnCodeも0になりそうですね。 ちなみにcpはtarのようにコピー前と後でそれぞれファイル比較とかしませんよね? 試している限りはエラーにはなっていませんが・・・