如何在 CentOS 5 中建立伺服器快照以進行備份?

如何在 CentOS 5 中建立伺服器快照以進行備份?

我正在從 VPS 遷移到專用伺服器。不幸的是,大多數專用伺服器不像託管 VPS 那樣提供伺服器備份,而且我真的很喜歡在出現問題時備份所有腳本/文件,讓我高枕無憂(以前也有過這樣的情況)。

因此,問題是,是否可以每天建立某些目錄的“快照”,並將其保存在同一伺服器上,但在不同的資料夾中。

可以理解的是,這些備份並不能抵禦外部災難。我更尋求保護免受惡意腳本/駭客等造成的任何損害。

答案1

您可能正在尋找類似 Webmin 的東西:http://webmin.com/

這是我的 CentOS 伺服器設定的必備部分。它非常易於安裝,並且使伺服器管理變得輕而易舉,尤其是備份內容。看看這裡的文件:http://doxfer.webmin.com/Webmin/FilesystemBackup

答案2

是否可以每天建立某些目錄的“快照”,這些目錄保存在同一伺服器上,但在不同的資料夾中。 ...防止惡意腳本/駭客等造成的任何損壞。

是的,其中任何一個許多版本控制軟體工具就可以做到這一點。

我使用 Mercurial(“hg”),通常與漂亮的 gui TortoiseHg 前端一起使用。

在我的許多伺服器上,存在一個資料夾(*),也許是“/var/www/”,其中包含我想要備份的所有內容——設定檔、範本、自訂伺服器端cgi-bin 腳本、自訂瀏覽器—— side .js 腳本、.html 內容等(機器上的其他所有東西都是樣板作業系統和應用程式的東西。如果這些東西被損壞,我可能會擦除它並安裝它的最新版本,而不是嘗試恢復到我使用的舊的、過時的版本)。

當我第一次設置時,我會 cd 到該資料夾並進行一次性設置

hg init
hg add
hg commit -u dc -m "initial setup"

「init」行建立一個「.hg/」資料夾,有一天,該資料夾將儲存壓縮快照。 (因此流行的 Mercurial 教程的名稱,http://hginit.com/)。預設情況下,「add」行和「commit」行會掃描該資料夾中的每個文件,無論子子資料夾中嵌套的深度如何,並將(壓縮的)副本放入該「.hg/ ”資料夾中。

當我懷疑工作文件損壞或發生其他更改時(假設包含所有快照的“.hg”資料夾未損壞),我輸入

hg status

它準確地告訴我哪些文件已更改,無論在某個子子資料夾中嵌套有多深,然後我輸入

hg diff

它準確地告訴我每個文件中發生了什麼變化。

如果我不喜歡我所看到的內容 - 這是惡意修改,或者更常見的是,這是我自己的愚蠢編輯,我現在後悔做了,我輸入

hg revert --all

將所有變更恢復到最近的提交。

如果我就像我所看到的那樣——我調整了一些東西,實際上使它變得更好——我輸入了類似的東西

hg add
hg commit -u dc -m "tweaked .htaccess so we now have Clean URLs."

並附上一則評論,希望能描述我做出這些改變的原因。 (有辦法只恢復一些文件的內容,並且僅提交一些文件的數量,甚至是僅提交的方法一些對單一文件進行的許多更改 - 有關詳細信息,請參閱文件)。

也許你更願意有一個 cron 作業,每天都會做類似的事情

hg add
hg commit -u mr_backup -m "cron automated snapshot of the server."

已提交的每個版本的壓縮快照保留在「.hg/」資料夾中。有一個“hg update”命令可以恢復到任何提交的版本。有一個「hg diff -r 1:2」指令可以準確地查看第一次提交和第二次提交之間發生的變更。

更複雜的情況

(*) 通常我只想備份一個資料夾 (“/var/www/”)。然而,有時我會遇到更複雜的情況——我要備份的文件分散在一堆不同的資料夾中,它們之間唯一的公共資料夾是根資料夾“/”,而我不想把它們放在根資料夾“/.hg/”中的“.hg/”儲存庫。

可能有更好的方法來處理它,但我現在正在做的是:

  • 我創建了一個名為“MrBackup”的特殊用戶,該用戶對我要備份的所有檔案具有唯讀權限。
  • 我進行了設置,以便我要備份的每個資料夾都顯示為 /home/mr_backup 的子資料夾。我目前有以下隨機組合:
    • 有些檔案實際上位於 MrBackup 的主資料夾中,然後它們「需要」的另一個位置有一個到它們的軟連結。
    • 有些文件在兩個地方都有指向它們的硬連結——它們「需要」的地方,以及 MrBackup 的主資料夾中的某個地方。
    • cron 腳本定期將一些檔案從「即時」位置複製到MrBackup 主資料夾中的備份資料夾中,也許將SQL 資料庫從另一台伺服器轉儲到MrBackup 主資料夾中的轉儲檔案中,並且也會對cron 腳本本身進行備份( “crontab -l > /home/mr_backup/backup/crontab.txt”)。
  • 通常我想備份某個資料夾 P 中的幾乎所有內容,除了我不需要備份的「cache/」子資料夾,因為如果需要它會自動重新產生。我使用“.hgignore”來排除快取子資料夾。
  • 然後我使用 Mercurial,如上所述。
  • 當 cron 腳本產生的檔案看起來不正確時,在執行復原後,我需要採取一些額外的步驟以某種方式將「良好版本」推回到「即時」位置。

ps:在與我的伺服器位於不同城市的電腦上,我偶爾會啟動 TortoiseHg 工作台並點擊在幕後運行的小按鈕

hg pull

(並要求我提供備份先生的密碼)以取得已提交到儲存庫的所有內容的異地備份。

通常最好在其他機器上進行編輯,然後提交並提交,而不是在生產伺服器上進行即時編輯。

hg push

將它們發送到生產伺服器。

“.hg/”資料夾不斷增長——非常緩慢,因為它只保存那些改變從一次提交到下一次提交,甚至那些相對較小的變更集在儲存之前也會被壓縮。

可能有更好的方法來應對這種緩慢的成長,但我目前所做的是:

在我“hg commit”當前版本,然後“hg pull”到我的異地備份計算機上之後,每年我都會刪除伺服器的“.hg/”資料夾並使用“hg init”創建一個全新的空資料夾“ .hg/”資料夾,然後我提交當前版本。 (2014年最後一個版本異地備份倉庫應該與 2015 年異地備份儲存庫的第一個版本相同)。

相關內容