簡単なスクリプトを使用して、rsyncを介してローカルLinuxステーション(XFSファイルシステム)から接続されている外部HD(NTFSファイルシステム)への増分バックアップを作成します。
#!/bin/sh
TIMESTAMP=`date "+%Y-%m-%dT%H-%M-%S"`
USER=USER1
SOURCEDIR=/data
TARGETDIR=/run/media/sbembenek/easystore1
# Create new backup using rsync and output to log
rsync -avPh --delete --link-dest=$TARGETDIR/$USER-Current $SOURCEDIR/$USER/ $TARGETDIR/$USER-$TIMESTAMP > /archive/Backup-Logs/$USER-$TIMESTAMP.log 2>&1
# check exit status to see if backup failed
if [ "$?" = 0 ]; then
# Remove link to current backup
rm -f $TARGETDIR/$USER-Current
# Create link to the newest backup
ln -s $TARGETDIR/$USER-$TIMESTAMP $TARGETDIR/$USER-Current
else
# Rename directory if failed
mv $TARGETDIR/$USER-$TIMESTAMP $TARGETDIR/failed-$USER-$TIMESTAMP
fi
こうして作成されたバックアップディレクトリを「du -h -d1」を使用して確認しました。作成された最初のバックアップディレクトリは実際には最も大きく、後続のディレクトリは小さいですが、後続のディレクトリのサイズはすべてほぼ同じであることがわかりました。つまり、「基本的に」ファイル間に変更されたファイルがなくても、後者のディレクトリが前者よりはるかに小さいことを見たことはありません。サイズによっては、バックアップが増分バックアップと比較して(最初のバックアップと比較して)より差別化されているように見えました。
異なる仮想セットの場合、すべてのバックアップディレクトリは初期バックアップと同じです。私は何を見逃していますか?
答え1
私はあなたの解決策がおそらく何をすべきかをやっていると言いたいです。
いくつかのコードの問題があります。すべての変数を二重引用符で囲む必要があります(例:)ln -s "$TARGETDIR/$USER-$TIMESTAMP" "$TARGETDIR/$USER-Current"
。私が知る限り、あなたは完全に変わりましたrsnapshot
。
混乱はファイルのハードリンクに由来するようです。ハードリンクは、ファイルがディレクトリにあるように見えるだけでなく、実際にははいこのディレクトリに。各バックアップはフルバックアップセットのコピーのように見えますが、詳しく見ると、バックアップセット間で変更されていないファイルは1つのストレージインスタンスしか使用しないことがわかります。 100 GBのバックアップがあり、90%破損していない場合、2つのバックアップセットは110 GBしか占有できませんが、個別に測定する場合は、各バックアップセットは100 GBを使用します。
このdu
コマンドはファイル使用量を一度だけ計算するため、バックアップ層全体でそれを使用してバックアップセット間の実際の違いを確認できます。
はい
# The same file, linked
ls -l top/dir?/*
-rwxrwx---+ 2 roaima roaima 1690442768 May 2 17:56 top/dir1/file.mp4
-rwxrwx---+ 2 roaima roaima 1690442768 May 2 17:56 top/dir2/file.mp4
# First directory
du -hs top/dir1
1.6G top/dir1
# Second directory
du -hs top/dir2
1.6G top/dir2
# Both directories, but each file is counted only once
du -hs top/dir?
1.6G top/dir1
0 top/dir2
# All directories, but each file is counted only once
du -hs top
1.6G top
あなたの例でこれを試してください
du -hs "$TARGETDIR"/*
答え2
rsync 以前は、delta の場合、rsync への参照ポイントを提供する cp -al を実行します。 cp -al(コピーの代わりにハードリンクアーカイブを使用)元のファイルを指す1つ以上のハードリンクがある限り、ファイルはそのまま残ります。
例えば。 cp -al lastbkup newbackup 次の newbackup と rsync
答え3
ファイル権限は通常デフォルトでall 777(rwx to all)に変換されるため、NTFS-3gにrsyncするときに問題があります。したがって、権限644にファイルAをコピーすると、最初のコピーは777Aになります。 2番目のコピーが777Aであっても、元のファイルはまだ644Aなので、それ以降のコピーはこのファイルに接続できません。 rsyncは、ソース権限をリンク先と比較して矛盾を見つける必要があります。
1つのオプションは、-a
ユーザー、グループ、および権限の保存を含むコンテンツを-rlt
。
または、追加オプションを使用してファイルシステムをマウントするか、permissions
window-linuxユーザーマッピングファイルを使用してPosix権限を維持します。
答え4
みんなの助けに感謝します。外付けドライブを元のドライブと同じXFSにフォーマットすることにしました。効果がありました! (経由)最初とそれ以降のバックアップのサイズを確認できますdu -h -d1
。
117G ./Apps-2020-05-04T14-19-42
3.5G ./Apps-2020-05-04T15-07-12
121G .