• ベストアンサー

常時書き込みされているファイルを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 ] という条件式を置いてエラーを検知しています。 何とかこのエラーだけを無視する妙案はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • 10gate
  • ベストアンサー率42% (50/117)
回答No.2

こんにちは。 ちょっと筋違いになってしまいますが・・ /var配下をいったん別のエリアにCOPYするとかじゃだめでしょうか。 あるいは、エラーになるファイルが特定されているのでしたらそのファイルだけCOPYして、 COPYしたファイルをtarの対象にするとか。

Xiangji
質問者

お礼

ご回答ありがとうございます。 実際にファイルのバックアップは取れていて、ReturnCodeでエラーになるため、ReturnCodeを何とかすることばかり考えていました。 確かにtarの前にコピーしてコピー元はexcludeに入れておけばバックアップも取れてReturnCodeも0になりそうですね。 ちなみにcpはtarのようにコピー前と後でそれぞれファイル比較とかしませんよね? 試している限りはエラーにはなっていませんが・・・

その他の回答 (2)

回答No.3

全く別なアプローチですが Solaris9 では Volume Manager( 旧名Disk Suite )がパッケージされているので、RAID 1(ミラー)を構成しコピーが必要になった時にミラーを切り離してアクセスがない静的なファイルをコピーするという方法もあります。 コピー終了後は、切り離したミラーを接続すると自動的にオフラインの間の差分は展開されるのでユーザーの負担はありません。

Xiangji
質問者

お礼

ご回答ありがとうございます。 悪い意味ではなく面白い発想ですね。 ただ、残念ながらディスクは2本構成で すでにSVMのRAID1でまるまるで使ってしまっているため この方法は使えそうにありません。

回答No.1

#全く見当違いな回答でしたら済みません。スルーしてください。 プロセスがずっと捕まえているファイルをバックアップする時は、 私は newsyslog(Linuxではlogrotate) を使っています。

Xiangji
質問者

お礼

ご回答ありがとうございます。 残念ながら「プロセスが掴んでいる」わけではなく、 「細かいデータが頻繁に書き込まれている」という感じです。 ちなみに、newsyslogでバックアップというのがピンとこないのですが、どのようなことをされているのでしょうか?話が脱線してしまいますがよろしければ教えてください。

関連するQ&A