• ベストアンサー

常時書き込みされているファイルを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

  • cronからtarで圧縮しようとすると、途中で終わってしまいます

    サーバーはCentOS 5.3です。 以下はroot権限での話です。 コマンドラインで /bin/tar cvzf /home/myhome/backup/var_backup.tar.gz /var と打ち、実行すると正しく圧縮されたファイルが出来上がります。 解凍してみても問題ありません。 大きさは700MBくらいになります。 ところが同じコマンドをCronにセットして実行すると、ファイルはできるのですが 254K というとても小さなファイルが出来上がって終わってしまいます。 解凍してみるととても中途半端なところで圧縮が終わっているみたいです。 5 0 * * * /bin/tar cvzf /home/myhome/backup/var_backup.tar.gz /var のように書いています。 rootのcrontabなので権限の問題ということも無いと思うのですが。 別のディレクトリでも試してみたのですが同じ結果でした。 別のサーバーで同じくCentOS5.3を使っていて、同じことをやっているのですが そちらはうまく行っているのです。 どなたか解決策などご存知でしたら教えてください。 同じような質問が過去にもあったようなのですが、未解決で終わっていました。

  • tarコマンドを用いてバックアップ

    非常に困っています。 tarコマンドを用いてテープにバックアップを取ろうと思っています。しかし、tarコマンドには2GB以上のアーカイブを作れないという仕様上の制約があります。 仮に以下のようなコマンド操作を行ったとします。 tar cvf /dev/rmt/0m FILE1 FILE2 FILE3; FILEA FILEB FILECはいずれも1GBとし、計3GBのバックアップを取るものとする。 この場合バックアップできるのでしょうか? また、どこかのサイトにこの事が載っているのでしょうか? 片方だけでも分かる方よろしくお願いします。

  • メールのバックアップ方法

    RedHatLinux9でmail&webサーバーを構築してます。 毎日、午前3時に /var/spool/mailと/var/www/htmlをテープにバックアップしてるんですが どうやらその時にメールの送受信をしているとバックアップに失敗しているようでした。 今までは backup.shというのを作りcronに登録してます。 記述内容は tar cvf /dev/st0 /var/spool/mail /var/www/html です。 で、失敗したのでそれならと、まず/var/spool/mailを/root/backupにコピーしてからバックアップしようと mkdir backup cp -f /var/spool/mail /root/backup tar cvf /dev/st0 /var/spool/mail /var/www/html /root/backup としました。 でもこれでもうまくいかなかったようです。 エラーログは以下のようになっています。 mkdir: cannot create directory `/root/backup': File exists cp: omitting directory `/var/spool/mail' tar: /dev/st0: Cannot open: No such device tar: Error is not recoverable: exiting now 一度失敗してから テープの調子も悪くなってきているようです。

  • solaris上のディレクトリをwindows diskへrshでtarファイルとして保存したい

    solaris上のディレクトリをwindowsからrshでtarを実行して直接windows上のフォルダにtarファイルとして保存したいのですが、コマンドが不明で困っております。 過去ログ(http://oshiete1.goo.ne.jp/kotaeru.php3?q=1139234)の#1さんの回答にあったコマンドがうまくいきません。 solaris8(Ultra-5)  ホスト名 solAAA  バックアップしたいディレクトリ /home/hogehoge windows2000proSP4  ホスト名 winBBB  保存先 C\TEMP  保存する際のtarファイル名 backup.tar コマンドプロンプトでC\TEMPにcd後、実行したいと考えております。 ちなみに↓のコマンドは正常動作を確認しております。  rsh solAAA -l root "ls -lap /" どなたか↓のコマンドの誤っている個所と、解説をお願い致します。  rsh solAAA -l root "tar cf - -C /home/hogehoge . > backup.tar" rshはsolAAA上で実行されるので、winBBBの指定がどっかに必要のような。。。 根本的にこのようなことは不可能でしょうか。

  • tarでこういうのできますか?

    RedHatLinux9を使っていて バックアップをtarでテープに取ろうと思います。 /var/wwwと/var/spool/mailと/homeのバックアップを取りたいのですが、 これをtarでひとつにまとめてできるものなのでしょうか。 別々にやれば/に移動して tar cvf /dev/nst0 home tar cvf /dev/nst0 var/www tar cvf /dev/nst0 var/spool/mail とするんでしょうが、これを一回のコマンドでできないんでしょうか? バックアップを自動で行いたいんです。 お知恵をお貸しください。

  • サイズの大きいファイルのtarでの展開不具合

    お世話になります。 サーバーA上のあるディレクトリ以下のファイルを"tar jcf"でtar.bz2の形でファイルをバックアップし、サーバーBでそのファイルを”tar xvjf”で展開するという運用をしています(cronで毎日実行しています)。 運用当初は問題なく展開できていたのですが、最近展開が途中で止まっているようです。展開できていた時と現在ではtar.bz2のファイルのサイズくらいしか違いが思い当たりません。 現在、tar.bz2のファイルが16GBを超えているのですがtarにファイルサイズの制限などがあるのでしょうか?

  • tar を用いてテープにバックアップ

    tarコマンドを用いてテープにバックアップを行おうと思います。 以下のコマンドを実行しようと思います。 1. tar cvf /dev/rmt/0mn ./dirA* 2. tar cvf /dev/rmt/0m ./dirB* 仮に2行目のコマンドを以下の2'に変更した場合バックアップの取り方に違いはありますか? 2'. tar rvf /dev/rmt/0m ./dirB* また、tar のオプションでrの追記を用いた場合、 tarコマンドの実行はテープのどの位置で変更を行っても実行結果に違いはないのですか? tarコマンドとテープについていろいろと調べたのですが、どうしても分かりません。どうぞよろしくお願いします。。

  • tarを使用してのファイルコピーについて

    以下の2種類のコマンドは同じ事をしているように思うのですが、 tarを使用する利点は何かあるのでしょうか? ディレクトリの場合はtarを使用する利点はあると思うのですが、 ファイルの場合何かあるのかなと思い質問させていただきました。 1,  tar cf - foo.backup | (cd /mnt/NAS/backupdir; tar xf -) 2,  cp foo.backup /mnt/NAS/backupdir

  • tar.gzファイルのリストアについて

    Postgres初心者です。 教えてください。 pg_dumpコマンドでdump拡張しのバックアップファイルを生成し、 tarコマンドで****.tar.gzファイルに圧縮しました。 このtar.gzのファイルを直接リストアするコマンドがあれば 教えていただけないでしょうか? -bash-3.2$pg_restore -U postgres -d (データベース名) < ****.tar.gz と実行すると、以下のエラーメッセージが表示されます。 →pg_restore: [アーカイバ] 入力ファイルが有効なアーカイブではないようです。 -bash-3.2$gunzip -C ****.tar.gz | pg_restore -d (データベース名) と実行すると、以下のエラーメッセージが表示されます。 →pg_restore: [tarアーカイバ] tarアーカイブ内でファイルtoc.dat用のファイルヘッダがありませんでした よろしくお願い致します。

  • tar.gz圧縮のファイルサイズについて

    レンタルサーバCPIにて、 公開ディレクトのWebデータを圧縮してバックアップをとりたいと思い、 tar.gz圧縮のスクリプトを書いてcronで自動実行(1日1回)させています。 生成されたデータをみると、 公開ディレクトリのファイル数やフォルダ数は同じにも関わらず、 tar.gzの圧縮ファイルのファイルサイズが毎回異なっているのですがこれはtar.gzの仕様でしょうか? コマンドは下記となります。 tar -czf /usr/home/*****/webdata.tar.gz /usr/home/*****/html/; お分かりの方、ご教示頂ければと思います。 どうぞよろしくお願いいたします。