次のスクリプトは増分バックアップを実行せず、代わりに完全バックアップを作成します。
他の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つの問題があると思います。
- ループが繰り返されるたびに、
for
新しいデルタファイルが作成されます(または古いファイルが上書きされます:-)。アーカイブファイルとスナップショットファイルの間に1:1のマッピングがあるため、gtar-incremental
すべてのアーカイブファイルを提供できるわけではありません。 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
ステートメントを使用して構成できます)。
タイムスタンプはあなたの仕事にとって重要ですか?
お役に立てば幸いです。