gtar 増分バックアップの失敗

gtar 増分バックアップの失敗

次のスクリプトは増分バックアップを実行せず、代わりに完全バックアップを作成します。

他のFreeBSDサーバーでは、まったく同じスクリプトが正常に動作します(増分バックアップの作成)。

両方のシステムのサーバーは同じで、同じFreeBSD 10.0-RELEASEです。同じスクリプトを書いてください。 gtarのバージョンも同じです。ファイルシステムは同じです。

何が起こったのかわかりません。数日間探していました!助けてください。

#!/bin/sh

sourcedir="/home"
targetdir="/backup/home"

now=$(date +"%Y%m%d%H%M")

cd $sourcedir
for dir in */
do
  base=$(basename "$dir")
  gtar -cz -g "$targetdir/.gtar-incremental" -f "$targetdir/${base}-$now.tar.gz" "/home/$dir"
  chmod 600 "$targetdir/${base}-$now.tar.gz"
done

答え1

今日この問題を調査しながら、ここには2つの問題があると思います。

  1. ループが繰り返されるたびに、for新しいデルタファイルが作成されます(または古いファイルが上書きされます:-)。アーカイブファイルとスナップショットファイルの間に1:1のマッピングがあるため、gtar-incrementalすべてのアーカイブファイルを提供できるわけではありません。
  2. gtarタイムスタンプが好きではありません。これは、スナップショットファイルにtar.gzファイル名が格納されるため、渡された文字列が古い文字列と$now異なる場合、新しいzipファイルと新しいスナップショットファイルが作成されるためです。

私がそれをチェックし、増分がどのように機能するかは、次の行を変更することですgtar

gtar --listed-incremental=$targetdir/gtar-incremental-$base  -cvzf $targetdir/$base.tar.gz $dir

これは徐々に機能します。

上記のコマンドは、incrementalバックアップされる各ディレクトリのファイルを生成します。

incremental複数のファイルなしで動作させる別の方法は、home個々のアーカイブの代わりにディレクトリ全体を完全にバックアップすることです(つまり、ループなしでfor直接バックアップする)。/home/backup/home.tar.gz

gtar最後に、タイムスタンプが重要な場合は、ファイルが完了した後にタイムスタンプを追加するか、ファイルからタイムスタンプを削除することができると思いました(n> 2実行前に存在する場合はifステートメントを使用して構成できます)。

タイムスタンプはあなたの仕事にとって重要ですか?

お役に立てば幸いです。

関連情報