Backup

rsync 更改已經存在的文件

  • July 13, 2014

我的 crontab 中有一個簡單的 rsync 行,可以將備份文件從 prod 伺服器獲取到另一個伺服器。

看起來它正在觸及目標文件夾中已經存在的文件。這樣,備份將逐漸增加每個間隔的時間。

請查看以下文件更改的日期和時間。

如何使用 rsync 不觸摸(和下載?)它已經擁有的文件。我也不需要計算任何校驗和,一旦創建了備份,它們就不會再改變了。

rsync -vzre 'ssh' stor@server:/backup/system/ /storage/share/Backup/Server

要獲取的文件:

-rw-r-x--- 1 root stor 896K Jun 22 05:02 giant-140622-etc.zip
-rw-r-x--- 1 root stor 620K Jun 22 05:02 giant-140622-sql.zip
-rw-r-x--- 1 root stor  84M Jun 22 05:02 giant-140622-www.zip
-rw-r-x--- 1 root stor 899K Jun 25 05:00 giant-140625-etc.zip
-rw-r-x--- 1 root stor 603K Jun 25 05:00 giant-140625-sql.zip
-rw-r-x--- 1 root stor  84M Jun 25 05:00 giant-140625-www.zip
-rw-r-x--- 1 root stor 899K Jun 28 05:00 giant-140628-etc.zip
-rw-r-x--- 1 root stor 620K Jun 28 05:00 giant-140628-sql.zip
-rw-r-x--- 1 root stor  86M Jun 28 05:00 giant-140628-www.zip
-rw-r-x--- 1 root stor 899K Jun 30 05:00 giant-140630-etc.zip
-rw-r-x--- 1 root stor 617K Jun 30 05:00 giant-140630-sql.zip
-rw-r-x--- 1 root stor  86M Jun 30 05:00 giant-140630-www.zip

目的地:

-rw-r-x--- 1 stor stor 896K Jun 30 06:06 giant-140622-etc.zip
-rw-r-x--- 1 stor stor 620K Jun 30 06:06 giant-140622-sql.zip
-rw-r-x--- 1 stor stor  84M Jun 30 06:06 giant-140622-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:06 giant-140625-etc.zip
-rw-r-x--- 1 stor stor 603K Jun 30 06:06 giant-140625-sql.zip
-rw-r-x--- 1 stor stor  84M Jun 30 06:06 giant-140625-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:06 giant-140628-etc.zip
-rw-r-x--- 1 stor stor 620K Jun 30 06:06 giant-140628-sql.zip
-rw-r-x--- 1 stor stor  86M Jun 30 06:06 giant-140628-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:07 giant-140630-etc.zip
-rw-r-x--- 1 stor stor 617K Jun 30 06:08 giant-140630-sql.zip
-rw-r-x--- 1 stor stor  86M Jun 30 06:10 giant-140630-www.zip

更新:

當我從 shell 執行rsync命令(使用--skip-existingarg)時,它只下載不存在的新文件並跳過它已有的文件。

在調查由 cronjob 執行的完全相同的命令的行為時,已經存在的文件確實會在每個週期發生變化,並且整個作業在每個週期中花費的時間會逐漸增加比較上面的時間,cronjob 從 06:00 開始,每個文件 2 分鐘,即使它們已經存在)。

rsync -vzr --ignore-existing -e 'ssh -i /path/id_rsa -l backup' backup@flowl.info:/backup/system/ /nfs/share-private/Backup/Server

更新:

這是7月份的文件,我在裡面多加了一個空行,請看時代,開始06:01和提出每個新文件。

-rw-r-x--- 1 stor stor 899K Jul  4 06:01 giant-140702-etc.zip
-rw-r-x--- 1 stor stor 621K Jul  4 06:01 giant-140702-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  4 06:03 giant-140702-www.zip
                                      ^-- 01 to 03
-rw-r-x--- 1 stor stor 899K Jul  4 06:04 giant-140704-etc.zip
-rw-r-x--- 1 stor stor 634K Jul  4 06:05 giant-140704-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  8 06:02 giant-140704-www.zip
                                      ^-- ???
-rw-r-x--- 1 stor stor 899K Jul  8 06:03 giant-140706-etc.zip
-rw-r-x--- 1 stor stor 629K Jul  8 06:03 giant-140706-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  8 06:06 giant-140706-www.zip
                                      ^-- 03 - 06
-rw-r-x--- 1 stor stor 899K Jul  8 06:07 giant-140708-etc.zip
-rw-r-x--- 1 stor stor 629K Jul  8 06:07 giant-140708-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  8 06:10 giant-140708-www.zip
                                      ^-- 07 - 10

現在,當我想像再過一個月時,時間會是這樣的:

-rw-r-x--- 1 stor stor 899K Jul  8 06:32 giant-140808-etc.zip
-rw-r-x--- 1 stor stor 629K Jul  8 06:32 giant-140808-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  8 06:35 giant-140808-www.zip
                                      ^-- what I imagine to happen

我添加了--ignore-existing命令,看起來它不會改變任何東西,只會下載新文件。

rsync -vzr --ignore-existing -e

**編輯:**當有新文件時,每個週期仍然需要更長的時間。

預設情況下rsync,將讀取源和目標上的整個文件,以驗證它們是否相同。這不會消耗網路頻寬,因為它只會比較雜湊值。但它確實花時間從磁碟讀取。

在一個使用場景中,我發現這非常低效,因為源文件只是被附加到。我使用了--size-only,這對我來說效果很好。

還有一些其他選項,看起來它們可能適用,--append並且--append-verify,但我自己沒有測試過這些選項。

看起來您的目錄中沒有很多小文件,因此從磁碟讀取目錄列表並統計每個文件的時間應該不是什麼大問題。

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