Linux

從 Linux 進行增量備份

  • August 26, 2011

我想在 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 台伺服器。我現在有幾個月的備份,它們並不大。真的很節省空間。

引用自:https://serverfault.com/questions/303842