是否可以使用Apache Subversion(SVN)作爲通用備份工具? (作爲一種rsync替代品。)使用Subversion進行通用備份
回答
我發現這篇文章是使用SVN來備份你的home目錄一個很酷的描述,以及更多:
我使用Subversion備份我的Linux系統。隨着一些次要的創造力,它很容易涵蓋:
- 每日快照和異地備份。
- 輕鬆添加和刪除文件和文件夾。
- 文件版本的詳細跟蹤。
它也允許一些附加功能:
- 常規日誌電子郵件通過Subversion的事件掛鉤跟蹤文件系統的活動。
- 用戶可以從任何版本庫修訂版請求籤出其主文件夾。
- 新的或替換服務器可以設置幾個svn檢出命令。
來源:http://www.mythago.net/svn_for_backup.html
還發現this article這表明版本你的home目錄的例子。這使您可以通過將您的主目錄簽入新計算機來爲您帶來您的環境。我曾經做過類似的事情,發現它非常有用。
鏈接無法正常工作「mythago.net/...」 – 2012-03-08 17:12:50
我已經使用CVS作爲鬼的替代品,所以我不明白爲什麼不。
我很好,你可以標記一個基線:你可以改變管理機器。
顯然,這對unix的效果比windows好。
讓我意識到這一點的是,一般情況下,任何二進制數據都會隨時被複制,而SCM系統基於的文本內容可以很容易地以diffs的形式進行更新。
所以你可以做到這一點,只是要知道,如果你做了很多的編輯工作,你可能不想用它來管理照片庫等東西。
更多通用備份解決方案(比如說Time Machine)的好處在於它們可以在一段時間後彙總多個二進制更改以節省空間。我不確定在SVN或git或mercurial中會有多容易。
使用SVN作爲二進制文件備份時需要注意的一點是,SVN會將文件大小加倍,因爲它會保留每個文件的本地副本(在.svn/text-base文件中) 。
除此之外,我還使用SVN進行備份。只需添加所有文件,然後通過腳本提交。
有一件事情會讓我很煩惱,就是'.svn'文件夾,svn會將它放入它追蹤的每個文件夾中。
他們看起來很煩人,當你複製一個文件夾時,你應該記住不要複製它們(或者你的沙箱可能會被激怒),而且通過一堆文件夾grep要困難得多,因爲通常有很多命中.svn資源文件夾。
我喜歡使用源代碼控制的想法來控制你的環境。但我個人不會選擇svn來完成這項工作。我會去做一些像git的東西。但這可能只是我...
使用SVN進行備份可以工作。但是,隨着時間的推移,可能很難刪除不需要的舊版本。假設你只想保留30或60天的備份。 SVN不提供簡單的方法來刪除比X天更早的任何歷史記錄。如果您沒有辦法清除舊的歷史記錄,則最終會導致備份驅動器空間不足。
下面是從SVN Book on the svndumpfilter命令報價:
因爲Subversion把所有東西存在 一個不透明的數據庫系統,試圖 手工調整是不明智的,如果不是很 困難。一旦存儲在版本庫中的數據爲 ,Subversion 通常不會提供簡單的方法 刪除該數據。 [13]
[13]順便說一句,這是一個功能,而不是一個錯誤。
我發現unison比svn的一個替代品Rsync一個更好的選擇。
當你想恢復一個改變了你係統的變化,試驗變化或者從一個服務器到另一個服務器的變化時,用源代碼控制備份/ etc可以是一個很大的幫助。
但是,顛覆的許多.svn目錄可以阻礙這種情況,不僅僅是在搜索時,而且在某些情況下,例如* .d文件夾,設計不當的系統可能會將.svn文件夾本身解釋爲包含配置數據。
我現在更喜歡使用Mercurial來備份/ etc,因爲它在/ etc下放置了一個.hg文件夾。對於真正的備份而不僅僅是版本控制,您需要將該.hg文件夾複製到別處。
作爲「通用」備份,我想說這可能不是最好的主意,主要是由於其他人給出的原因(大量多餘的文件夾和浪費的磁盤空間)。如果您只想保留備份,我會說根據您的需要,可能會有更好的選擇,例如:您是否需要保留每個單個文件的每個版本,或者您的數據的某些快照是否足夠?
但是,在我的辦公室,我們有一個由共享文件(如:政策和程序手冊,註冊表等)共同工作的小團隊。很多時候,團隊成員都將遠程工作(從家中或旅行途中),並經常離線工作。我們不使用中央共享文件夾設置,而是使用SVN爲每個人提供他們可以使用的文件夾的完整工作副本,並儘可能參考和同步。這樣一舉兩得:每個人都可以在脫機時訪問和編輯這些文件,另外它還爲我們備份提供了極大的冗餘。如果我的筆記本電腦catches on fire,它沒有麻煩,因爲我可以檢查另一個副本(顯然在另一臺計算機上)。如果服務器着火,我們會讓存儲庫的備份恢復。如果服務器和所有的回購備份着手解決,那麼所有丟失的都是舊版本的文件。如果服務器,回購備份和每臺裝有結賬的計算機都神祕地着火,那麼您將失去任何當前數據的唯一方法就是如此。
正如有些人雖然說,SVN永遠不會從庫中刪除的信息,這意味着如果你只想將備份保存60天,然後,嗯,你不能。這不完全正確。通過使用export,dump和import,你可以有效祛除舊版本的文件。這不是很漂亮,但它是可能的。
我使用SVN備份我的電腦,並以我的筆記本電腦和桌面同步。但它確實存在以前答案中提到的問題,主要是磁盤使用量的翻倍。我也覺得多餘的文件和SVN過程不斷地檢查我的高清變化使我的機器變慢。
但是,我想強調一下,SVN非常適合同步不同的機器,並且如果需要的話,您還可以在任何地方查看文件 - 我甚至可以通過瀏覽器Web界面,有時候。
總之,我有混合關於使用SVN通用備份情懷。但是,如果你這樣做,我建議不存儲庫,如電影,照片和音樂,因爲他們往往是大(從一倍空間使用巨大的苦難)和不可變的 - 你不需要一個版本系統因爲在極少數情況下當你改變一個文件時,你通常不需要舊版本(而且SVN不擅長製作/存儲二進制文件的差異,它會保存文件的全部新版本)。因此,除非SVN能夠適應這些情況下的長期項目意圖,否則我建議使用備用方法來備份這些文件。
這由JoaoPSF說法是不正確:
(和SVN是不擅長製造/存儲二進制文件的比較,它保存文件的整個新版本)
見這句話從How does Subversion handle binary files:
需要注意的是不論是否是二進制文件不影響用於存儲更改該文件庫空間的大小,也不影響客戶端和服務器之間的流量。爲了存儲和傳輸的目的,Subversion使用了一種在二進制和文本文件上同樣適用的差異化方法;這與svn diff命令使用的diffing方法完全無關。
要在Linux上使用SVN作爲備份執行以下操作:
- 創建一個空的回購協議。
- 檢出您想要備份的文件夾樹中的空存儲庫。
- 使用下面的代碼片段(svnauto)。您可以爲您的存儲庫的有效憑證,以取代「myuser的」和「輸入mypassword」:
#!/bin/sh svn status --depth=infinity --username=myuser --password=mypassword > /tmp/svnauto_tmp.list cat /tmp/svnauto_tmp.list | grep '^?' | sed -e 's/^? /svn add --depth=infinity --force --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh cat /tmp/svnauto_tmp.list | grep '^!' | sed -e 's/^! /svn delete --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh rm -f /tmp/svnauto_tmp.list svn update . --username=myuser --password=mypassword svn commit --username=myuser --password=mypassword --message "Automatic backup"
上面的腳本會在當前目錄中的添加/刪除和更新任何文件和子目錄。只需將cd
用於要備份的文件夾(該文件夾必須是課程的工作副本),然後運行svnauto
。請注意,您需要在系統上安裝grep和sed,並在/ tmp中創建一個臨時文件。它可以從一個cron作業可用於夜間承諾,請使用以下的cron腳本:
#!/bin/sh
export LANG=en_US.UTF-8 && cd /my/directory && echo Starting backup $(date) > /root/backup_log.txt && /root/svnauto >> /root/backup_log.txt 2>&1 && echo Finished backup. >> /root/backup_log.txt && cat /root/backup_log.txt
這cron的腳本假定/my/directory
是備份所需的文件夾(如果需要更換)。它還假定您將svnauto
腳本放入/root
。它創建一個日誌並在最後顯示它。還有一個細節:svn需要第一個export
才能找到合適的語言。您可能必須將此行調整爲您自己的本地語言才能使其正常工作。
您也可以考慮bup - 基於git packfile格式的高效文件備份系統。它基於git存儲數據的方式,對於存儲文件及其差異非常有效。
- 1. Subversion:如何進行增量備份?
- 2. 使用Mercurial進行Mysql備份
- 3. 如何使用python進行tar備份
- 4. 使用SQLyog進行MySQL表備份
- 5. Android 2.2數據備份:如何使用PreferenceActivity進行備份?
- 6. 使用ssh進行身份驗證的Subversion
- 7. 嘗試使用備份副本進行備份時發生錯誤
- 8. 無法使用Apache和LDAP對Subversion用戶進行身份驗證
- 9. Subversion:轉儲備份,我需要增量備份嗎?
- 10. 使用導出命令通過shell腳本進行Datastage項目備份
- 11. 備份使用.git?
- 12. Subversion - 我需要備份什麼?
- 13. Subversion版本庫的自動備份
- 14. 使用預製數據結構在Haskell中進行備份
- 15. 使用簡單恢復模式進行完整備份嗎?
- 16. C程序使用MySQL API進行備份?
- 17. 使用rsync進行增量備份的腳本
- 18. 使用備份表進行批量高效更新
- 19. 使用貼片進行備份失敗CKAN
- 20. 在vC++中使用VSS進行卷備份
- 21. 使用Titanium進行設備身份驗證
- 22. 如何使用knife-essentials進行備份廚師11
- 23. 無法使用SQL Server VSS編寫器進行差異備份
- 24. 使用MozyPro進行SQL Server聯機備份
- 25. 使用動態SQL進行數據庫備份
- 26. 使用備份appender進行日誌記錄
- 27. 使用亞馬遜的EBS進行MySQL熱備份
- 28. 使用數據塊進行高效的增量備份
- 29. 使用Microsoft SQL Server作業進行備份有什麼缺點?
- 30. 無法使用MariaDB控制檯進行備份
你打算放什麼樣的文件? – Till 2008-09-15 05:19:00
文本和二進制文件 – Imran 2008-09-15 05:23:37