Linux

如何備份正在執行的 Linode 伺服器?

  • April 29, 2019

我們想要備份我們的 Debian 伺服器上的所有內容,該伺服器在世界的另一端(由 Linode 託管)遠端執行,而無需關閉它。

該系統執行 shell、電子郵件、XMPP/prosody 和 web,並帶有幾個簡單的 nginx 設置。

為了安全起見,我們希望備份與這些事情相關的文件。例如,使用者儲存在其主目錄中的文件。

我們不需要在每個 /etc 文件中精確複製現有的設置;相反,我們甚至首先進行備份的原因是我們可以將其全部轉移到新設置中(較新版本的 Debian 仍在 Linode 上)。

我看到 Linode 提供備份服務。但從長遠來看,我們還需要自己的備份,在這裡,以防它們出現故障或發生其他奇怪的事情。

存在這個問題的原因是,當我過去嘗試進行備份時,我一直在犯以下兩個錯誤:

  • 我已經去了“好的,我將複製/它下面的所有內容”然後卡在一些奇怪的無限循環中,因為我要復製到的驅動器安裝在 /media/backup 下並且它正在遞歸複製自身$$ obv that specific problem not applicable here since we’re gonna backup over rsync or similar $$或者它試圖在 /proc 或 /var 或其他任何東西中複製一些“活著”的東西,比如試圖跟上不斷變化的日誌,或者
  • 我已經去了“好的,我將只獲取我們需要的最低限度……嗯,每個人的主目錄和我們的 Web 伺服器目錄(都在 下),讓我們在 /var/ 下獲取所有舊郵件/var的副本/etcvmail”,然後我總是搞砸文件權限或時間戳(這次要確保我不會將 unix 文件備份到 FAT 驅動器)或忘記某些東西(“哦,開槍,我在 /usr/ 中有一些自定義腳本我從未在其他任何地方儲存過的本地/bin,我忘了拿那些,猜他們現在不見了”)。

所以 obv 直接複製整個驅動器會導致陷阱,而有選擇地複制目錄會導致陷阱。我想知道如何正確地做。

伺服器故障問題完整的備份系統需要什麼?涵蓋哲學和良好實踐,但我正在尋找以下更具體的細節:

  • 我需要複製哪些目錄以及排除哪些目錄(假設它是一個目前正在執行並提供 wiki、XMPP 聊天、電子郵件的系統——在復製作業執行時會收到新消息)
  • 我需要提供哪些文件屬性,例如時間戳、所有者和組,我該怎麼做?← 我想我可以自己回答這半個問題,比如……嗯……rsync -HXaz我認為這對我們來說是個不錯的選擇?obv-z與“我要保留什麼”的問題並不真正相關

我看到的許多備份建議,例如 using dd,似乎都假定驅動器已解除安裝且未在使用中。但是我不應該排除像 /proc 這樣的“活動”目錄和 /var 下的一些子目錄(但是,我知道 /var 下的一些東西我們肯定需要保留)和 /mount?在這種情況下,我還需要考慮什麼?然後我想我可以用 rsync 並使用一堆--exclude標誌來抓取它。

還是有更好的想法,尤其是對 FOSS 友好的想法?

所以你想備份你所有的驅動器而不出現那些討厭的錯誤,並且過濾掉所有的 /proc 和其他臨時文件夾?

一個選項是將根文件夾掛載到文件系統中的另一個文件夾上,如下所示:

$ cd /mnt
$ mkdir drive
$ mount --bind / drive

這將為您提供驅動器上所有非臨時文件(如 /proc 或 /sys 文件夾)。

現在您已經清楚地看到了根文件夾,您可以使用標准cprsync. 類似於以下內容:

cp -R /mnt/drive /mnt/backupdrive

這解決了您提到的兩個問題:

  • 您不會遞歸,因為備份磁碟未安裝在驅動器內(觀點)
  • 你不會錯過任何重要的文件,因為你把它們都拿走了

另請參閱:人掛載(8)

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