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
直感的な名前変更と一緒に構文を使用して不完全な変更セットとマージすることができます...またはログ出力を解析または直接使用できます。デフォルトではバージョン管理を再開します。$CUR
diff
rsync
git
前の答え:
私の最初の考えは、以前にバックアップしたハードリンクコピーをパラメータと一緒に使用することでしたが、これを行う--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
ん。いくつかの修正はこの問題を解決するかもしれません...