從 Linux 進行增量備份
我想在 Linux 機器上進行增量備份,方法如下:
BACKUP1 BACKUP2 | | | | |--- file1 |--- file1 (symlink to file1 in backup1 because it hasn't changed) | | | | |--- file2 |--- file2 (is copied again because it has changed) | | | | |--- file3 |--- file 3 (same as file1, a symlink)
有什麼簡單的方法可以做到這一點嗎?我正在使用這個腳本:
#!/bin/sh date=`date "+%Y-%m-%dT%H:%M:%S"` rsync -aP --link-dest=~/Backups/current ~/Documents ~/Backups/back-$date rm -f ~/Backups/current ln -s back-$date ~/Backups/current
但這只是再次複製所有內容。感謝:D
我使用 rsync 和 cpio 為它使用了一個自寫的 bash 腳本:http: //pastebin.com/uRdH2uQf
所以,我做的第一件事就是創建一個目錄結構。我是這樣工作的:每天創建一個備份,第 7 天(星期日)我把最後一個備份(前一周的星期日)放在每週。我每 4 週進行一次每月備份。
所有這些備份都是增量備份,並且基於 1 個完整備份。
我的目錄結構基於 /mnt/backups,如下所示:
--- SERVER1 |--- daily | --- 0 | --- 1 | --- 2 | --- 3 | --- 4 | --- 5 | --- 6 |--- weekly |--- 0 |--- 1 |--- 2 |--- 3 |--- monthly | --- 0 | --- 1 | --- 10 | --- 2 | --- 3 | --- 4 | --- 5 | --- 6 | --- 7 | --- 8 | --- 9
我還使用腳本快速創建此結構: http: //pastebin.com/LyFLBZGx
因此,我所有的腳本都位於 /root/backup_tools 中。backup.sh 腳本被放置到 crontab 中以每天執行。我有從我的備份伺服器到我需要備份的所有伺服器的密鑰交換。在我的工具目錄中,我以這種格式放置我的排除文件(我不想備份的文件夾/文件):
rsync.exclude.server1
這些文件包含不備份目錄:
/proc /sys /tmp
我還使用我的 /.ssh/config 文件來添加主機(fe: server1.example.com 被定義為 server1,帶有 ssh 埠 xxxx 和使用者名 foo)。這使得在腳本的第一行中添加要備份的伺服器變得容易得多。
Host server1 User root Port 31337 Hostname server1.example.com
該腳本將檢查規則 SERVERS="" 並且對於在那裡定義的每個伺服器(空格分隔),它將啟動增量備份(並排除排除文件中的所有目錄)。
它將使用 cpio 來旋轉目錄(cpio 允許複製帶有指向磁碟上實際塊的連結的副本,因此該文件將在您的硬碟驅動器上顯示兩次,並且只使用一次空間。它也不是符號連結,因為當您刪除原始文件時,副本仍然可以讀取)
我希望這有點清楚。bash 腳本並不完美,但它完成了它的工作。我每天晚上用它來備份 4 台伺服器。我現在有幾個月的備份,它們並不大。真的很節省空間。