差分変更ログを別のディレクトリにさらに保存するようにrsyncにどのように通知できますか?

差分変更ログを別のディレクトリにさらに保存するようにrsyncにどのように通知できますか?

rsync --link-dir毎日のスナップショットを撮るために使用することは、ハードリンクのためにスペースをほとんど占有しません。ただし、元の構造をミラーリングしながら、実際に変更されたファイルのみを含むディレクトリもあることをお勧めします(フルバックアップへのハードリンク)。たとえば、以前のディレクトリ構造は次のようになります。

source/        <- contains the original data
backup/current <- symlink to the most recent snapshot
backup/12102?  <- recent daily snapshots (irrelevant)

後で必要な構造は次のとおりです。

source/
backup/current <- symlink to the _updated_ snapshot
backup/previous<- symlink to the snapshot that was was "current" before
backup/12102?  <- ...
backup/current.changes  <- (symlink to) directory containing _only_ the files that
                           have changed between "current" and "previous"

答え1

これは私が使ったスクリプトです。

#!/bin/bash
set +x
SRC=$1
BCK=$SRC/.snapshots
CUR=$BCK/current
DAT=$(date +%Y-%m/%y%m%d)
DST=$BCK/$DAT
PAR="-aP --chmod=a-w,o-rwx --no-owner"

LNK="--link-dest=$CUR --link-dest=$DST.changeset"
CMP="--compare-dest=$CUR --prune-empty-dirs"
XCL="--exclude-from $BCK/.rsyncignore"
LOG="$BCK/log/$DAT"
LGP="--log-file $LOG"

mkdir -pm750 $DST.incomplete
mkdir -pm750 $DST.changeset.incomplete
mkdir -pm750 $(dirname $LOG)

rsync $PAR $CMP $XCL $LGP.change.log $SRC/ $DST.changeset.incomplete | tee $LOG.change.out
mv $DST.changeset.incomplete $DST.changeset
find $DST.changeset -type d -empty -delete
rsync $PAR $LNK $XCL $LGP.log $SRC/ $DST.incomplete | tee $LOG.out
mv $DST.incomplete $DST
rm -f $CUR
ln -s $DAT $CUR

DST=$1/.snapshots/YYYY-MM/yymmdd何らかの方法でスナップショットを作成し、$DST.changeset次の内容のみを含めます。作られたまたは修正済み。削除(および間接を参照mv)は認識されませんが、3番目のrsyncスワップは逆モードログを生成し、$DST直感的な名前変更と一緒に構文を使用して不完全な変更セットとマージすることができます...またはログ出力を解析または直接使用できます。デフォルトではバージョン管理を再開します。$CURdiffrsyncgit


前の答え:

私の最初の考えは、以前にバックアップしたハードリンクコピーをパラメータと一緒に使用することでしたが、これを行う--backup-dirより早いファイルのバージョンが変更されました。私が探しているものとは反対のバージョンです。秘訣はこれを覆すことです。

  • まず、ハードリンクを使用して共通のスナップショットを作成します。 (ハードリンクを明示的に使用するには、などを使用する必要が
    rsync -a --link-dest=/backup/current /source/ /backup/$TODAY.incomplete
    あるかもしれません)--no-owner --chmod=...rsync
  • それでは、新しいスナップショットを古いスナップショットで上書きしますが、変更された--backupファイルを移動しましょう。
    rsync -ab --backup-dir=/backup/$TODAY.changelog.incomplete --delete /backup/current/ /backup/$TODAY.incomplete
    mv /backup/$TODAY.changelog.incomplete /backup/$TODAY.changelog
  • おめでとうございます。変更ログを生成するのではなく、新しいスナップショットを台無しにしました!
    この問題を解決して整理してください。
    cp -alf /backup/$TODAY.changelog/* /backup/$TODAY.incomplete
    mv /backup/$TODAY.incomplete /backup/$TODAY
    mv -f /バックアップ/現在/バックアップ/以前
    ln -sf /backup/$TODAY /バックアップ/現在

この「変更ログ」には、実際に変更されたファイルまたは新しいファイルのみが含まれます(後者はそのファイルを忘れていない場合にのみ)。--delete削除またはsは追跡されませmvん。いくつかの修正はこの問題を解決するかもしれません...

関連情報