2012-09-19 96 views
5

我有大約12個存儲庫,文件系統上的大小爲1 GB到10 GB,我需要爲它們設置自動備份(我們的舊備份腳本在計算機上丟失下降)與我們的XP 64位機器。如何備份13 GB SVN存儲庫?轉儲是100+ GB

在閱讀this question關於備份SVN回購的最佳方式後,我開始傾銷我們擁有的最大回購,大約13 GB。這個命令現在已經執行了大約2.5個小時,目前正在傾銷300+的修訂版本〜​​200。

svnadmin --deltas \\path\to\repo\folder > \\path\to\backup\folder\dump.svn 

轉儲文件超過100 GB並計數。我知道我可以7-zip這個吸盤,但100 GB?! ... o_O

存儲庫包含大量的二進制數據,這可能是問題的一部分,但截至目前,切換到更高效的版本控制系統(假設存在一個)是不現實的; SVN是這裏生活的一部分。

我已經考慮過使用hotcopy,佔用的空間少了很多,但我試過使用我們舊的hotcopy-ed備份之一,而subversion 1.7找不到它需要的一堆文件。如此看來,我必須安裝SVN最初hotcopy但-ED回購的版本,轉儲回購把它變成一個新的SVN。此聲明似乎驗證了我用hotcopy的問題:http://svn.haxx.se/users/archive-2005-05/0842.shtml

我覺得我只是得到缺少的東西。也許有一些標誌轉儲,神奇地使轉儲1/5的大小...

我還有其他的選擇嗎?


更新:最後一次修訂#327剛剛被傾倒。轉儲文件的最終大小是127 GB。這是從一個13.5 GB的回購。在我所有的軟件倉庫中,我的可能性大概是3倍。

回答

6

對於日常備份,我會說你真的不需要做一個svnadmin dump。如果您要將存儲庫轉移到可能運行不同SVN版本和操作系統的新服務器,那麼我會使用轉儲方法,因爲它是轉儲存儲庫最便捷的方式,但它不是非常節省空間。

我建議使用引用該鏈接的hotcopy方法。這將保證文件系統的狀態是一致的,並且還將複製配置文件和掛鉤腳本(順便說一句,svnadmin轉儲不會複製這些,所以你最終會得到一個不完整的備份)。因爲它是倉庫的只是直接複製,這是相同的大小,因此備份應該是更易於管理。

在緊急情況下,如果您需要恢復熱備份完成的備份,那麼您應該只需要一臺具有相同主要版本SVN(例如1.6或1.7)的計算機並且安全,即相同的操作系統。那麼你應該應該可以直接使用這個倉庫,或者你可以在這一點上做一個svnadmin dump轉移到一個新的服務器。

編輯:

共同的方面:svnsync的和即時拷貝的比較

  • 安全處理與儲存庫備份過程中寫道
  • 備份的大小=庫的大小

優勢hotcopy:

  • 更容易設置
  • 備份鉤子和配置文件

優勢svnsync的的:

  • 允許備份到另一臺機器,因爲上次同步
  • 只有新版本是這麼寫的同步非常快,這意味着您可以執行非常緊湊的增量備份
+0

對bahrep的建議有任何評論? svnsync vs hotcopy? –

+0

感謝您的跟進。 –

+1

我最終用'svnsync'去。看到我的答案。 –

4

感謝bahrep和the_mandrill的建議,我決定使用svnsync來處理這些存儲庫。我能夠很容易地設置它,並且由於我們沒有任何掛鉤或配置文件,因此沒有其他備份。由於我使用hotcopy存在的問題(感謝the_mandrill提出解決這些問題的解決方案),我決定svnsync對我們來說是更簡單的解決方案。

除了什麼the_mandrill指出,svnsync的還有其他一些優點:

  • 在活動主庫出現故障,用戶可以只要他們有鏈接從備份庫下載。
  • 備份是完全版本控制的。我的老闆讓我做夜間備份,但只保留一週的備份。要做到這一點與hotcopy,我不得不寫一個腳本。使用svnsync,我不必擔心這一點。

要設置svnsync,我必須完成以下步驟。請原諒任何錯誤。我們所有的存儲庫都使用VisualSVN Server進行託管。

  1. 創建一個新的空庫:

    svnadmin create \\computerB\C$\repositories\mirror

  2. 創建文件,\mirror\hooks\pre-revprop-change.bat。這是唯一的內容是這樣的一行:

    exit 0

  3. 初始化同步

    svnsync init https://computerB.domain.net/svn/mirror https://computerA.domain.net/svn/repo

  4. 同步兩個回購

    svnsync synchronize https://computerB.domain.net/svn/mirror https://computerA.domain.net/svn/repo