root@server1:/ - リモートサーバー
/backup1/12/fullbackup - server1のデータを含むローカルバックアップサーバー
まず、リモートサーバー上のすべてのデータをローカルバックアップサーバー(script1.sh)に同期します。
rsync -avrh -e "ssh -p 123456 -o StrictHostKeyChecking=no" \
--progress \
root@server1:/ /backup1/12/fullbackup/
次に、簡単な差分バックアップスクリプト(script2.sh)を作成します。
today=15
rsync -avrh -e "ssh -p 123456 -o StrictHostKeyChecking=no" \
--progress \
--link-dest=/backup1/12/fullbackup/
root@$ip:/ /backup1/12/backupday/$today/
ディレクトリ12で最初のスクリプト(script1.sh)を実行した後:
# du -sh /backup1/12/*
8.0K /backup1/12/backupday
4.1G /backup1/12/fullbackup
2番目のスクリプト(script2.sh)を実行すると、すべてのデータがフルバックアップからbackupday / 15に移動されます。
# du -sh /backup1/12/*
3.9G /backup1/12/backupday
386M /backup1/12/fullbackup
Today = 15をToday = 16に移動し、バックアップ日に2番目のスクリプト(script2.sh)を再実行します。
# du -sh /backup1/12/backupday/*
4.1G /backup1/12/backupday/15
104M /backup1/12/backupday/16
script2.shを初めて実行すると、すべてのデータがbackupday / 15に移動し、2番目、3番目、および次にスクリプトを実行したときに正しい差分バックアップが作成される理由がわかりません。
/backup1/12/fullbackupに常にコピー全体があり、backupday/$todayに別のコピーがあるようにするには、何を変更する必要がありますか?
答え1
あなたが見るのは人工物ですdu
。ファイルをハードリンクするときは、du
2番目のファイルが見つかったときに考慮されたディスク使用量を記録してください。例えば
$ mkdir a b
$ dd count=1000 </dev/zero >a/x
$ ln a/x b/x
$ du -s a b
500 a
0 b
$ du -s b a
500 b
0 a
最初のディレクトリが明白に使用されるすべてのスペースをどのように取得するかを確認できます。