バックアップに次の構造を使用したい
/source # the source directory which should be backed up
/backup/initial/... # the first initial copy/backup of the source
/backup/snapshots/YYYYmmDDHHmmss/... # (1)
/backup/changed/YYYYmmDDHHmmss/... # (2)
私は(1)がrsyncの「デフォルト」動作だと思います。元のバックアップへのハードリンクを使用してスナップショットを作成します。私はこれをしますrsync -avuP --link-dest=$initial_backup $directory_to_backup $destination
rsync -riv --ignore-existing "$directory_to_backup"/ "$last_backup"/
(2) rsync 出力を取得します。
rsync -riv --existing "$directory_to_backup"/ "$last_backup"/
changed
しかし、今、これら2つのスクリプトの出力をディレクトリにハードリンクしたいと思います。
私の目標は、バックアップしたいディレクトリと、新しいファイルと変更されたファイルのみをchanged
含むディレクトリの完全なスナップショットを作成することです。あまりにも多くのスペースを取らないように、すべてがハードリンクされています。
答え1
私が正しく理解したら、順序を少し変更するだけです。--compare-dest
新しいファイルと変更されたファイルを作成するディレクトリを使用してから、2つのパラメータを--link-dest
使用してこの変更されたディレクトリと古いスナップショットに再接続できます。以下はテストスクリプトの例です。
cd /tmp/
rm -fr src backup
mkdir -p src/a/b backup
date >src/a/b/unchanged
date >src/a/b/c
rsync -a src/ backup/i
rsync -a --link-dest=../i/ src/ backup/s1
sleep 1
date >src/a/b/c
date >src/a/b/c2
rsync -av --compare-dest=../s1 src/ backup/ch
rsync -av --link-dest=../s1 --link-dest=../ch src/ backup/s2
ls -li backup/*/*/*/*
これは私に次のような結果を与えます:
919 -rw-r--r-- 2 backup/i/a/b/c
920 -rw-r--r-- 3 backup/i/a/b/unchanged
919 -rw-r--r-- 2 backup/s1/a/b/c
920 -rw-r--r-- 3 backup/s1/a/b/unchanged
472 -rw-r--r-- 2 backup/ch/a/b/c
473 -rw-r--r-- 2 backup/ch/a/b/c2
472 -rw-r--r-- 2 backup/s2/a/b/c
473 -rw-r--r-- 2 backup/s2/a/b/c2
920 -rw-r--r-- 3 backup/s2/a/b/unchanged
ここでのディレクトリは、i
初期バックアップであるs1
snapshot1、s2
snapshot2、およびch
snapshot2 に対応する変更です。最初の列は inode 番号で、3 番目の列はハードリンクの数です。これは、変更されたファイルc
がにハードリンクされch
、新しいファイルc2
がにハードリンクされch
、変更されていないファイルがにハードリンクされていることを示しますs1
。i