Linux 基礎學習篇 - Fedora Core 4

第二十三章、 Linux 備份策略 - for Fedora Core 4

淺談備份策略啊!

最近更新時間: 2005/10/25

本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...

建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!

萬一不幸你的 Linux 被駭客入侵了、或是你的 Linux 系統由於硬體關係 ( 不論是天災還是人禍 ) 而掛掉了!這個時候,請問如何快速的回復你的系統呢?呵呵!當然囉,如果有備份資料的話, 那麼回復系統所花費的時間與成本將降低相當的多!平時最好就養成備份的習慣, 以免突然之間的手足無措!此外,哪些檔案最需要備份呢?又,備份是需要完整的備份還是僅備份重要資料即可? 嗯!確實需要考慮看看呦!

誰需要備份資料

前面的章節我們提到了相當多的 Linux 系統基礎,這個時候我們再來談一談:『 若您的系統由於不預期的傷害,導致系統發生錯誤,該如何修復? 』這可是個相當大的問題呀!怎麼說呢?又什麼叫做『不預期的傷害?』 好了,假如您的 Linux 系統上面某些 Internet 的服務套件是最新的!也意味著可能是『相對最安全的』, 但是,這個世界目前是閒人相當的多的,你不知道什麼時候會有所謂的『駭客軟體』被提供出來,萬一你在 Internet 上面的服務套件被入侵,導致你的 Linux 系統全毀,這個時候怎麼辦?!

重新安裝就好啦!』或許您會這麼說,但是,像鳥哥管理的幾個網站的資料,尤其是 MySQL 資料庫的資料,這些都是彌足珍貴的經驗資料,萬一被損毀而就不回來的時候,不是很可惜嗎? 這個還好哩,萬一您是某家銀行的話,呵呵!那麼資料的損毀可就不是能夠等閒視之的!! 關係的可是數千甚至上萬人的身家財產!!這就是備份的重要性了!他可以最起碼的稍微保障我們的資料有另外一份 copy 的備援以達到『安全回復』的基本要求!

如果是針對個人資料的話,那麼在一般桌上型電腦中,Norton 的『 Ghost 』應該算是一套好到不行的備份大師了! 最主要是 Ghost 可以針對整個 partition 來進行備份,所以囉,我們可以將 Windows 系統當中的整個 C 或者是整個 D 槽完整的備份下來。甚至在還原方面也是非常的快速,而且操作簡便! 另外,由於個人桌上型電腦所使用的資料量通常不大,所以當 ghost 完成之後,通常只要將資料燒錄到光碟片當中,大約只要一至兩片的光碟片也就綽綽有餘囉! 那麼將光碟片保存好,這就是最簡易的資料備份模式囉! 此外,由於個人的資料變動性不大,所以資料的備份頻率方面也不需要非常的頻繁!

但是,萬一您的主機有提供 Internet 方面的服務呢?又該如何備份啊? 舉個例子來說,像是我們 Study Area 團隊的討論區網站 http://phorum.study-area.org 提供的是類似 BBS 的討論文章, 雖然資料量不大,但是由於討論區的文件是天天在增加的,每天都有相當多的資訊流入, 由於某些資訊都是屬於重要的人物之留言,這個時候,我們能夠讓機器死掉嗎?

再提到 2002 年左右鳥哥的討論區曾經掛點的問題,以及 2003 年初 Study-Area 討論區掛點的問題,討論區一旦掛點的話,該資料庫內容如果損毀到無法救回來, 嘿嘿!要曉得討論區可不是一個人的心血耶!有的時候(像 Study-Area 討論區)是一群熱心 Linux 的朋友們互相建立交流起來的資料流通網,如果死掉了, 那麼不是讓這些熱血青年的熱情付之一炬了嗎?!所以囉,建立備份的策略是相當的重要的。

基本上,『電腦是一個相當不可靠的機器』這句話在大部分的時間內還是成立的! 常常會聽到說『要電腦正常的工作,最重要的是要去拜拜!』嘿嘿!不要笑!這還是真的哩! 尤其是在日前一些電腦周邊硬體的生產良率 ( 就是將硬體產生出來之後,經過測試, 發現可正常工作的與不能正常工作的硬體總數之比值 ) 越來越差的情況之下,電腦的不穩定狀態實在是越來越嚴重了!

舉個例子來說,鳥哥曾經同時買過同一廠牌的 IxM 30GB 硬碟三顆,回來之後經過一個星期,嘿嘿!掛掉了兩顆!其中一顆是有壞軌,另外一顆是『完全死掉』, 拿去公司要求修理,結果呢?嗯!店家直接拿了一棵新的給我,害我嚇一跳,店家的工程師說 『唉呀!目前這個牌子的良率太差了,所以代理商為了怕麻煩,都會直接拿新的替換給我們啦!』 要曉得的是,當初那一顆完全死掉的硬碟,是我用來備份我的主機資料的.... 好在當時我將備份的資料放在三四個地方,還好....

所以囉!由於電腦 ( 尤其是目前的電腦,操作頻率太高、硬體良率太差、使用者操作習慣不良、 『某些』作業系統的當機率太高.... ) 的穩定性較差,所以囉!備份的工作就越來越重要了!

那麼一般我們在備份時考慮的因素有哪些呢?
  1. 備份哪些檔案:
    例如在帳號管理那一篇當中,我們知道最起碼主機的帳號資訊在 /etc/* 及 /home/* 等等檔案都是重要的!

  2. 選擇什麼備份的媒介:
    是可讀寫光碟、另一棵硬碟、同一顆硬碟的不同 partition、還是使用網路備援系統? 哪一種的速度最快,最便宜,可將資料保存最久?

  3. 考慮備份的方式:
    是完全備份(類似 ghost)還是部分備份即可?

  4. 備份的頻率:
    例如 MySQL 資料庫是否天天備份、若完全備份,需要多久進行一次?

  5. 備份使用的工具為何:
    是 tar 還是 cpio 等等?
底下我們就來談一談這些問題的解決之道吧! ^_^

哪些 Linux 資料具有備份的意義

具有備份意義的檔案通常可以粗分為兩大類,一類是系統、一類則是類似網路服務的資料, 那麼各有哪些檔案需要備份的呢?我們就來稍微分析一下。

  • 主機系統需要備份的檔案:
  • 這方面的檔案主要跟『帳號與系統設定檔』有關係! 主要有哪些帳號的檔案需要備份呢?就是 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow, /home 底下的使用者家目錄等等, 而由於 Linux 預設的主機資訊設定參數檔都在 /etc/ 底下,所以只要將這個檔案備份下來的話, 那麼幾乎所有的設定檔都會存在的!

    至於 /home 底下是每個人的家目錄,自然也需要來備份一番!再來,由於使用者會有郵件吧!所以呢,這個 /var/spool/mail 內容也需要備份呦!另外,由於如果您曾經自行更動過核心,那麼 /boot 裡頭的資訊也就很重要囉!所以囉,這方面的資料您必須要備份的檔案為:
    • /etc/ 整個目錄
    • /home 整個目錄
    • /var/spool/mail
    • /boot
    • /root
    • 如果您自行安裝過其他的套件,那麼 /usr/local/ 或 /opt 也最好備份一下!
  • 網路服務的資料庫方面:
  • 這部份的資料可就多而且複雜了,如果您的網路套件設定都是以原廠提供的為主,那麼您的設定檔案大多是在 /etc 底下,所以這個就沒啥大問題了!但是若您的套件大多來自於自行的安裝,那麼 /usr/local 這個目錄可就相當的重要了!這裡我們假設我們提供的服務套件都是使用原廠的 RPM 安裝的!所以要備份的資料檔案有:
    • 資料設定檔案
      /etc/ 整個目錄 /usr/local/ 整個目錄

    • 系統 www + MySQL
      WWW 資料:/var/www 整個目錄或 /srv/www 整個目錄,及系統的使用者家目錄
      MySQL : /var/lib/mysql 整個目錄

    • 其他你在 Linux 主機上面提供的資料庫資料檔案!
  • 推薦需要備份的目錄:
  • 由上面的介紹來看的話,那麼如果您的硬體或者是由於經費的關係而無法全部的資料都予以備份時, 鳥哥建議您至少需要備份這些目錄呦!
    • /boot
    • /etc
    • /home
    • /root
    • /usr/local(或者是 /opt 及 /srv 等)
    • /var(註:這個目錄當中有些暫存目錄則可以不備份!)
  • 不需要備份的目錄:
  • 有些資料是不需要備份的啦!例如我們在 檔案權限與目錄配置 裡頭提到的 /proc 這個目錄是在記錄目前系統上面正在跑的程序 ( processes ) ,這個資料根本就不需要記錄的呢!所以就把他拿掉!此外,外掛的機器,例如 /mnt 或 /media 裡面都是掛載了其他的硬碟裝置、光碟機、軟碟機等等,這些也不需要備份吧!? 所以囉!底下有些目錄可以不需要備份啦!
    • /dev :這個隨便你要不要備份
    • /proc:這個真的不需要備份啦!
    • /mnt :根據版本不同,有的是 /media 如果你沒有在這個目錄內放置你自己系統的東西,也不需要備份
    • /tmp :幹嘛存暫存檔!不需要備份!

    選擇的備份裝置

    在備份的時候,選擇一個『資料存放的地方』也是很需要考慮的一個因素! 什麼叫做資料存放的地方呢?講個最簡單的例子好了,我們知道說,較為大型的機器都會使用 tap 這一種磁帶機來備份資料,而如果是一般個人電腦的話,很可能是使用類似 Mo 這一種可讀寫式光碟片來存取資料!但是您不要忘記了幾個重要的因素,那就是萬一您的 Linux 主機被偷了呢?這不是不可能的,我們隔壁校區的研究室曾經遭小偷,裡面所有的電腦都被偷走了!包括『 Mo 片』,當他們發現的時候,一開始以為是硬體被偷走了,還好,他們都有習慣進行備份,但是很不幸的,這一次連『備份的 MO 都被拿走了!』怎麼辦?!只能道德勸說小偷先生能夠良心發現的將硬碟拿回來囉!唉~真慘....

    這個時候,所謂的『遠端備援系統』就顯的相當的重要了! 什麼是遠端備援呀!說的太文言了!呵!簡單的說,就是將你的系統資料『備份』到其他的地方去, 例如說我的機器在台南,但是我還有另一部機器在高雄老家,這樣的話,我可以將台南機器上面重要的資料都給他定期的自動的 ftp 回去!也可以將家裡重要的資料給他丟到台南來!這樣的最大優點是可以在台南的機器死掉的時候, 即使是遭小偷,也可以有一個『萬一』的備份所在!但是缺點是~~頻寬嚴重的不足! 在這種狀態下,所能採取的策略大概就是『僅將最重要的資料給他 ftp 回去囉!』至於一些只要系統從新安裝就可以回復的咚咚!那就沒有這個必要了!當然囉,如果你的網路是屬於 T1 專線的話,那麼完整備份將資料丟到另一地去,呵呵!也是很可行的啦!只是我沒有那麼好命....唉~窮人一個~

    在此同時,我們再來談一談,那麼除了這個『相對較為安全的備份』方法之外, 畢竟這種網路備援系統實在是太耗頻寬了!如果像我們一般家用的 ADSL 根本就是吃不消!那麼怎麼辦!還有其他的方法嗎?喔~那就只好使用近端的裝置來備份囉! 這也是目前我們最常見到的備份方法!例如一般我們使用的 Tape, Mo, Zip, CD-RW, DVD-RW 還有備份用抽取式硬碟與攜帶式硬碟等等! 那麼在選擇上需要注意些什麼呢?需要注意的地方有幾點:

  • 速度要求
  • 『備份』基本上在 Linux 主機上面也是蠻耗系統資源的!因為需要將系統的資料拷貝到其他裝置上面去,這個時候 CPU 幾乎是 loading 100%!您總不希望系統就這樣給他掛點吧!?此外,有些系統的資料實在太多咯, 怎麼樣也備份不完!所以囉,越快的儲存裝置是越好的!如果您是個重視速度甚於一切的人, 那麼我覺得抽取式硬碟是個不錯的方式,只不過.....目前我知道的抽取式硬碟都需要冷開機才行,不太符合 Linux 主機 24 小時全年無休的狀態....

    但是硬碟真的越來越大、越來越便宜了,不使用速度快的硬碟來備份實在很可惜~ 加上目前的火線 (IEEE 1394) 以及 USB 2.0 外接式硬碟盒技術已經相當的成熟, 傳輸速度又快,又可以直接熱拔插 (Plug and Play),接上 USB 硬碟, 整個複製一下,傳輸速度理論上可達 480Mbps (約 60 MBytes/second) ,快的哩! 複製完畢,又可以將硬碟帶走,不需要與主機放置在一起,還可以避免同時被偷,真是不錯。

    但是,硬碟還是有一定的困擾,那就是『不接電源的硬碟需要很好很好的保養』。 我們知道電腦最好的保養就是常常開機去運作一下,免得長期不開機,造成受潮而損壞。 這個攜帶式硬碟只是偶而才會連上主機來進行備份的資料,除非您額外購買一部防潮箱來放置硬碟, 否則很容易損壞ㄟ!所以,近年來速度越來越快的 DVD-RW 就變的很方便囉!至於 tap ,在速度上完全是落後的.....至於使用第二顆硬碟備份,類似 Raid, 或者是安裝一顆備份的硬碟在 Linux 系統當中,這個方案也很好, 而且速度上絕對是最具優勢的!但是就如同我們剛剛提到的,萬一你的機器被偷了,連帶的, 這顆備份的硬碟自然也就不見了.....

  • 儲存容量
  • 這也是一個需要考量的因素!而且常常是最大考量的因素呢!雖然目前硬碟越來越便宜, 但是畢竟就如同前面說的,抽取式硬碟需要將系統冷開機,而建構在系統內的硬碟又同時具由不安全的成分在, 攜帶式硬碟可能又有不容易保存的特性,這個時候一個大容量的替代方案就顯的很重要了!雖然 CD-RW 與 DVD-RW 可以提供不錯的速度,但是其容量畢竟不足 (目前的 DVD-RW 片最大雖然可以突破 8.7GB ,但是,貴的很哩~期待新規格趕緊定義出來呢!), 所以說,具有大容量的 tap (磁帶容量最小的一款也可以到達 8 GB 左右!) 就相當的具有這方面的優勢了!而且攜帶方便,存放也容易!更可以帶著走~~

  • 經費與資料可靠性
  • 在經費不短缺的情況下,我們當然會建議您上面的幾個裝置都買一買, 然後分別在不同的時間進行不同的備份作業(底下我們有些建議的啦! ^_^)!但是如果經費也是需要考量的話,那麼磁帶機這個目前還算貴重的物品可能暫時還動不到! 這個時候近來漸漸便宜的 DVD-RW 就顯的活躍的多了!而且光碟片也可以保存很久的ㄋㄟ~ 當然,目前應該不會有人以軟碟來備份了吧!?呵呵!軟碟可是相當不安全的 (每次我看到有人拿軟碟拷貝資料,我都會要他 copy 完成之後,立刻到另外一部電腦 copy 出來試看看,果不其然,十次裡面有八次對方的軟碟片都有問題~)

    無論如何,如果經費夠的話, Tape 備份資料真的是一個不錯的點子!因為他的高容量讓我好滿意! 再來,如果經費稍微短缺的話,那麼 DVD-RW 經常性的將資料燒錄下來,這也是蠻好的,尤其 DVD 片又不佔空間!再來,如果還是沒有辦法,那麼一顆內建在 Linux 的硬碟用來備份也是不錯的!什麼!!連備份的硬碟都沒有,唉!怎麼跟我一樣~ 這個時候沒辦法啦,用原來的安裝系統的硬碟,多留一個 partition 用來當作備份之用吧(這也是目前鳥哥常用的方法之一!)底下我們來看一看一些常見的裝置代號!
    • 光碟機: /dev/cdrom
    • 磁帶機: /dev/st0 ( SCSI 介面 ), /dev/ht0 ( IDE 介面 )
    • 軟碟機: /dev/fd0, /dev/fd1
    • 硬碟機: /dev/hd[a-d][1-16] ( IDE 介面 ), /dev/sd[a-p][1-16] ( SCSI 介面 )
    • 抽取式 USB 規格硬碟機: /dev/sd[a-p][1-16] (別懷疑,剛好與 SCSI 介面相同!)
    • 印表機: /dev/lp[0-2]
    特別留意的是磁帶機呦!如果你有錢的話,那麼買一部磁帶機是相當不錯的建議!沒錢的話,買 IDE 或 SATA 介面的硬碟也很不錯!! ^_^

    備份的種類

    講了好多口水了,還是沒有講到重點,真是的....好了,再來提到那個備份的種類, 其實前面已經提到一些了!基本上,備份就可以直接分為『完全備份』與『部分備份』這兩方面:

  • 完全備份(Full Backup):
  • 完全備份就是將根目錄『 / 』裡頭所有的資料都給他一股腦兒的備份下來,不過, 這個時候所需要的『時間與備份裝置的容量』 就顯的相當的重要了!用在大型的企業是有一定的需求的,但是像我們這一種小網站的話, 完整的備份似乎太過於浪費的(畢竟我們可以用時間換取金錢....了不起又重新安裝了....)。

    但是剛剛完成的系統(還沒有對外 Internet 上面服務)通常可以的話,就趕快給他備份一下吧! 這樣的一個備份是最乾淨的!用在系統的最乾淨還原是相當有幫助的!這是因為有的時候我們的系統被入侵了,但是 root 並不知道,這個時候老是拿最近的備份資料來還原也沒有用呀!因為連同被 cracker 修改過的檔案也被我們備份下來了呀!呵呵!所以囉, 將一個最原始的系統的資料備份下來還是有其必要性的!此外, 這種完整備份的頻率可不能太高,因為太耗系統資源了

  • 部分備份(Implement backup)
  • 部分備份就如同上面提過的,備份那些最重要的資料就好了!反正系統不見的話, 只要重新安裝就回來了,資料只要妥善的備份重點資料,那麼系統的復原還是一個很快速的工作! 以鳥哥為例,我通常都喜歡僅備份最重要的資訊,因為重新安裝一次系統時間花的並不長 (一個鐘頭內一定可以搞定!)而帳號、服務設定、原本系統的資料庫、等等,幾乎都只要 copy 回來就 OK 了!

    例如:我們這個網站在開始營運初期,雖然交通流量很大了,還是常出狀況, 那個時候重新安裝了好幾次(似乎是硬體的問題!),每次都是一個下午就搞定了!所以囉, 鳥哥是一直認為『重點備份』就真的是蠻重要的! 尤其很多時候,你的資料被吃掉都只是『某個網路服務』, 那麼如果僅進行完整備份的工作時,呵呵!單單是將系統先讀出來,再取出所要還原的部分, 呵呵!就可以累死你了....

    如同上面提到的,這兩個方式各有優缺點啦!那麼如果可能的話,是否兩個都來進行一下最好呢?呵呵! 答對了!給你拍拍手!我們通常的規劃就是這樣,重點部分的備份頻率較高,可能每天都需要備份的! 至於如果是完整備份的話,那麼一個星期、甚至一個月在備份一次都可以!目前鳥哥的系統上面就是每天備份 MySQL 資料庫,然後每個星期備份所有的重要資料!

    備份的工具選擇

    好了,選定了備份的裝置與備份的頻率之後,那麼我要使用什麼方式來備份呀!呵呵! 這個也要跟備份的種類相互配合呢!通常鳥哥在備份的時候,除非有磁帶機或者有特殊的功用,否則通常我只使用 tar 啦!但是這裡我們介紹一下 cpio 這個東西!如果你有磁帶機的話, cpio 可是相當好用的一個指令呢! ^_^ ,呵呵! 由於這兩個指令我們早在『壓縮工具』當中稍微提過了, 請再自行過去瞧一瞧去囉!另外,您或許會問道:『那麼我為什麼不直接給他 copy 過去備份的地點就好了呢!?』呵呵!既然可以在 copy 的過程裡面增加壓縮的功能來減低整個儲存空間的消耗,為何不壓縮?!那當然還是壓縮一下比較好囉! 所以啊!鳥哥還是比較喜歡 tar, cpio 的啦!

  • 完整備份的工具:
  • 在完整備份的工具裡面,三個工具 tar, cpio 與 dump 都很常被使用!此外,那個 dd 也是不錯的指令喔! 至於 cpio 的話,他最大的好處就是『 cpio 連一般的裝置檔都可以 copy 過來!』很棒吧!所以使用 cpio 進行完整備份是很棒的一個選擇。不過需要注意的是,由於 cpio 需要配合 find 才可以正常的動作!這裡請特別留意囉!另外,使用 cpio 常常配合另一顆完全用來備份的硬碟或者是磁帶機才好!至於完整的指令用法請到 『壓縮工具』 那一篇去查看囉!備份與反備份分別可以這樣使用:
    # 1. 使用 cpio 來備份與還原:
    [root@linux ~]# find / -print | cpio -covB > /dev/st0  <==備份到磁帶機
    [root@linux ~]# cpio -iduv < /dev/st0                  <==還原
    
    # 2. 使用 tar 來備份與還原
    [root@linux ~]# tar --exclude /proc --exclude /mnt --exclude /tmp \
    > -zcvpf host.tgz /
    [root@linux ~]# tar -zxvf host.tgz
    
    # 3. 用 dd 來備份一顆完全一模一樣的硬碟:
    [root@linux ~]# dd if=/dev/hda of=/dev/hdb
    # 完整的將 /dev/hda 通通備份到 /dev/hdb 當中去!
    
    這幾個工具都蠻好用的!尤其鳥哥特喜歡 tar 的用途!因為他相當的適合於另一顆硬碟的備份呢! 當然,如果您有完全相同的兩顆硬碟時,用 dd 會是一個很不錯的完整備份的方案喔! ^_^

  • 部分備份的基礎工具:
  • 至於部分備份方面,我們就以簡單的 tar 來說明一下吧!!假如我們需要備份的資料是每天的 MySQL 資料庫時,由於我想讓每天的資料都存成不同的檔案,而要分別檔案的新舊又以日期來分別最簡單了! 所以我就可以這樣做:
    [root@linux ~]# tar -zpcvf mysql.`date +%Y-%m-%d`.tgz /var/lib/mysql
    # 如果忘記了上面的指令代表什麼意思,那麼請回到 bash 那一章去瞧一瞧吧!
    
    [root@linux ~]# tar -N '2005/10/25' -zpcvf home.tgz /home
    只有在比 2005/10/25 還要新的檔案,在 /home 底下的檔案才會被打包進 home.tgz 中!
    
    這樣就能將 mysql 的資料庫壓縮備份至 mysql.2005-10-25.tgz 這個檔案, 並且日期會每天都不一樣!呵呵!這樣一來如果系統的資料庫出了問題,就可以馬上的回復了! 而且還有很多的檔案可供回復呢!不錯吧!此外,也可以利用類似上面的第二個範例的例子, 將最新的資料備份就好,其他的資料則不予以更動!嘿嘿!提供了更完善的方式呢!

    大致的工具就是這樣了!此外,由於備份是長長久久的事業,所以我們需要的是『系統可以自己動作』的方式, 您說是吧!所以呢,這個時候就需要使用到 cron 的服務啦!還記得我們先前講過的 例行性命令的建立 嗎?趕快再去複習一下呀!

    鳥哥的備份策略

    其實鳥哥在備份的策略相當的簡單,我並沒有想要將整個系統完全的備份下來,因為太耗時間了! 而且就我的立場而言,似乎也沒有這個必要,所以通常鳥哥只備份較為重要的檔案而已!不過,由於我需要備份 /home 與網頁資料,如果天天都備份,我想,系統遲早會受不了 (因為這兩個部分就已經快要佔去 1GB 的硬碟空間...) ,所以鳥哥就將我的備份分為兩大部分,一個是每週備份,一個則是每日備份,備份的時間點都選擇在凌晨的 3~4 點左右!這個時候我就寫了兩個簡單的 scripts ,分別來儲存我的資料。所以針對鳥哥的網站 (簡稱『鳥站』哈哈!)我的備份策略是這樣的:
    1. 使用一顆加掛的硬碟來進行備份的功能,掛在 /disk2 當中;
    2. 每週進行的備份有 /home, /var, /etc, /boot, /usr/local 等目錄;
    3. 每日進行的目前僅有 MySQL 資料庫;
    4. 利用 /etc/crontab 來自動提供備份的功能;
    5. 在每週或每月定期的將資料分別 (a)燒錄到光碟上面 (b)使用網路傳輸到另一部機器上面。
    那就來看看鳥哥是怎麼備份的吧! ^_^

    日常備份行為:

    底下提供鳥哥的備份的 scripts ,希望對大家有點幫助! 我的動作是:1) 先將所有的資料通通丟到 /disk2/backup 底下去,然後 2) 進行壓縮打包,並且傳送到內部的 192.168.1.100 那部主機上面去。
    # 1. 每週備份的資料的 script 啊!
    [root@linux ~]# mkdir /disk2/backup
    [root@linux ~]# vi /disk2/backup/backupweekly.sh
    #!/bin/bash
    # ==============================================================
    # 說明:
    # 這支程式是用來備份鳥哥的網站資料的! 當然啦,資料量很大的!
    # 我將他分為幾個部分:
    #       第一部份是系統的服務與受服務的設定檔,
    #       第二部分則是與使用者有關的重要資訊部分了! ^_^
    # ==============================================================
    # History
    # When          Who     What
    # 2000/12/16    VBird   first time to release
    # 2002/03/26    VBird   Adding ftp services' backup in /disk2/backup/ftp
    # 2003/07/03    VBird   發現解壓縮之後會有一些錯誤資料發生!
    #                       所以將 tar 加入 -p 的參數!
    # 2005/01/02    VBird   懷疑可能因為備份期間硬碟運轉的問題導致當機,
    #                       所以,加上多個 sleep 以及 sync 的功能!
    # ==============================================================
    PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
    LANG=C; export LANG
    LC_ALL=C; export LC_ALL
    
    # 設定路徑來備份
    basedir=/disk2/backup
    named=$basedir/named
    postfixd=$basedir/postfix
    vsftpd=$basedir/vsftp
    sshd=$basedir/ssh
    sambad=$basedir/samba
    wwwd=$basedir/www
    others=$basedir/others
    userinfod=$basedir/userinfo
    
    # ===============================================================
    # 1.  系統的相關服務,主要服務有:
    #     (1) BIND server: 
    #     (2) Postfix:
    #     (3) vsftp:
    #     (4) sshd:
    #     (5) samba:
    #     (6) WWW:
    #     (7) Others:其他系統必須要的一些資訊!
    
    # 1.1 系統的 BIND 套件,主要是 DNS 的設定檔備份!
    cp -a /var/named/chroot/etc     $named/chroot
    cp -a /var/named/chroot/var     $named/chroot
    
    # 1.2 系統的 Postfix Server 相關的檔案備份資料!
    cp -a /etc/postfix/*            $postfixd 2> /dev/null
    cp -a /etc/rc.d/init.d/postfix  $postfixd
    cp -a /etc/dovecot.conf         $postfixd
    
    # 1.3 系統的 vsftpd 伺服器的僅有的設定檔喔!
    cp -a /etc/vsftpd/*             $vsftpd
    cp -a /etc/vsftpd.*             $vsftpd
    
    # 1.4 系統的 sshd 伺服器的設定檔案!
    cp -a /etc/ssh/*                $sshd
    
    # 1.5 系統的 Samba 所動用的檔案
    cp -a /etc/samba/*              $sambad
    
    # 1.6 WWW
    cp -a /etc/my.cnf                       $wwwd
    cp -a /etc/php.ini                      $wwwd
    cp -a /etc/httpd/conf/httpd.conf        $wwwd
    cp -a /etc/httpd/conf.d                 $wwwd
    cp -a /etc/httpd/conf.d/vbird.conf*     $wwwd
    cd /usr/local
       tar -pcf $wwwd/counter-data.tar  Counter/data
    cd /var/lib
       tar -pcf $wwwd/mysql-lib.tar  mysql --exclude mysql/mysql.sock
    cd /var
       tar -pcf $wwwd/www-cgi-icon.tar  www/cgi-bin www/icons
    
    # 1.7 Others
    cp -a /etc/hosts                $others
    cp -a /etc/hosts.allow          $others
    cp -a /etc/hosts.deny           $others
    cp -a /etc/modprobe.conf*       $others
    cp -a /etc/fstab                $others
    cp -a /etc/resolv.conf          $others
    cp -a /etc/shells               $others
    cp -a /etc/wgetrc               $others
    cp -a /etc/crontab              $others
    cp -a /etc/sysconfig/i18n       $others
    cp -a /etc/sysconfig/network    $others
    cp -a /etc/sysconfig/network-scripts/ifcfg-eth0 $others
    cd /
       tar -pcf $others/etc.tar etc
    cd /usr
       tar -pcf $others/local.tar local
    
    sleep 5s
    sync; sync
    
    # ============================================================================
    # 2.  主機的重要資料與資料庫系統
    #     (1) 使用者的資訊  重點在 /etc/passwd, shadow, group 以及電子郵件、家目錄
    
    # 2.1
    cp -a /etc/passwd  $userinfod
    cp -a /etc/shadow  $userinfod
    cp -a /etc/group   $userinfod
    
    cd /var/spool
       tar -pcf $userinfod/mail.tar mail
    
    cd /
       tar -pcf $userinfod/home.tar home --exclude home/lost+found
    
    sleep 5s
    sync; sync
    
    # ============================================================================
    # 3. 將主機的重要資料複製到 192.168.1.100 那部機器上面去!
    
    # 3.1 壓縮與打包
    cd $basedir
       tar -zpcf backupweekly.tar.gz * --exclude backupweekly.tar.gz
    
    sleep 5s
    sync; sync
    
    # 3.2 ftp 到 192.168.1.100
    id="username"
    pw='yourpassword'
    cd $basedir
    ftp -n 192.168.1.100 > $basedir/backup.ftp.log 2>&1 <<EOC
    user    $id     $pw
    binary
    cd      /disk2/backup/
    put     backupweekly.tar.gz
    bye
    EOC
    sync; sync
    
    當然囉,上面的 script 是適合鳥哥的狀態,所以,你要使用的話,還得要修修改改呦! 不要照著使用,會有問題的!另外,上面的 script 當中,我已經加上了遠端儲存的功能了, 那就是 #3.2 的 FTP 部分,藉由這個簡單的動作,就可以將我這一部機器上面的資料, 整個傳送到 192.168.1.100 那部機器上面,夠簡單吧! ^_^

    每日備份資料 scripts:

    再來,繼續提供一下每日備份的資料:
    # 提供的是每日備份的 script 啊
    [root@linux ~]# vi /disk2/backup/backupdaily.sh
    #!/bin/bash
    #
    # This program is created by VBird 2002/06/13
    #
    # What is this program?
    #       This program will backup the following messages:
    #       1. MySQL data files ( /var/lib/mysql );
    #       2. HTTP's CGI-directory ( /var/www/cgi-bin )
    #
    # HOW TO RUN THIS PROGRAM?
    #       Just put the file into /etc/crontab job,
    #       or put this file's link file to /etc/cron.daily!
    #
    ###############################################################
    # History
    #  Date         What                                    Who
    #==============================================================
    # 2002/06/13    First time to run this program
    #               The only backup files are MySQL and CGI VBird
    #==============================================================
    # 0. Get the date messages and backup directory
    day=`date +%Y-%m-%d`
    basedir="/disk2/backup/daily"
    
    # 1. MySQL  ( PATH = /var/lib/mysql )
    /etc/rc.d/init.d/mysqld stop
    cd /var/lib
    tar -zcf "$basedir"/mysql."$day".tar.gz mysql 2> /dev/null
    /etc/rc.d/init.d/mysqld start
    
    # 2. CGI ( PATH = /var/www/cgi-bin )
    cd /var/www
    tar -zcf "$basedir"/cgi-bin."$day".tar.gz cgi-bin 2> /dev/null
    
    好啦!這樣一來每天的 MySQL 資料庫就可以自動的被記錄在 /disk2/backup/daily 裡頭啦!而且還是檔案名稱會自動的改變的呦!呵呵!我很喜歡!OK!再來就是開始讓系統自己跑啦! 怎麼跑?!就是 /etc/crontab 呀!提供一下我的相關設定呦!
    [root@linux ~]# vi /etc/crontab
    # 加入這兩行即可 ( 請注意您的檔案目錄!不要照抄呦! )
    # backup scripts
    30 3 * * 0 root /disk2/backup/backupweekly.sh
    30 2 * * * root /disk2/backup/backupdaily.sh
    
    這樣系統就會自動的在每天的 2:30 進行 MySQL 的備份,而在每個星期日的 3:30 進行重要檔案的備份!呵呵!您說,是不是很容易呢!?但是請千萬記得呦!還要將 /disk2 當中的資料 copy 出來才行耶!否則整部系統死掉的時候....那可不是鬧著玩的!

    Tips 鳥哥 有些時候,您在進行備份時,被備份的檔案可能同時間被其他的網路服務所修改喔! 舉例來說,當您備份 MySQL 資料庫時,剛好有人利用您的資料庫發表文章,此時, 可能會發生一些錯誤的訊息。要避免這類的問題時, 可以在備份前,將該服務先關掉,備份完成後,再啟動該服務即可! 感謝網頁 duncanlo 提供這個方法!

    遠端備援系統:

    除此之外,那麼還有沒有保險的方式呢?呵呵!剛剛前面不是提過遠端備援嗎? 最簡單的說法就是『使用網際網路的方法,將你的資料送到遠端主機去備份!』那樣就 OK 啦!那麼我們怎麼使用遠端備份的方法呢?那就用最簡易的 FTP 吧!詳細的資料, 其實上面我們就已經提到的,您可以自行參考一下。這裡僅提供一個簡單的說明:
    1. 備份的資料最好『越精簡越好』;
    2. 遠端主機必需提供 FTP 服務(當然,其他的服務例如 sftp 也是可以的,只要能夠將資料傳上去就好了!)
    3. 遠端主機必需要可以符合你上傳的屬性設定,例如 quota 容量、儲存目錄的屬性等等!
    如果你想要有自己的簡單的自動 FTP scripts 來幫我們達成自動檔案上傳的功能,那就這樣吧!
    #!/bin/bash
    #
    # WHAT IS THIS:
    # This program will automatically put the backup file
    # from this host to another hosts
    #
    # HISTORY
    # When          Who     What
    # 2002/10/14    VBird   First time to release
    #
    ###################################################################
    # 1. input your FTP's ID and PassWord
      host="192.168.1.100"
      id="testing"
      pw='your.passwd'
    
    # 2. what is the correct and remote working directory
      basedir="/disk2/backup"              # 本機上面的欲上傳檔案路徑
      remodir="/disk2/backup_testinghost"  # 遠端主機欲備份的目錄
    
    # 3. the tar file
      filename="backup.testinghost.tar"
    
    # 4. starting tar work
    # 因為我將所有預備被傳送的資料都分門別類的放置在 
    # /disk2/backup 這個目錄中, 但是FTP傳送檔案的時候,
    # 畢竟一個檔案送完會比較容易與快速,所以我先將好幾個檔案 tar 成一個!
      cd $basedir
      tar -cvf $filename *
    
    ###################################################################
    # 5. 底下就是 ftp 自動連線並操作上傳手續的 script !
      ftp -n "$host" > "$basedir"/"$filename".log 2>&1 <<EOC
      user    $id         $pw
      binary
      cd      $remodir
      put     $filename
      bye
      EOC
    
    好了!大家趕緊寫一個適合自己的備份 script 來進行備份的行為吧!重要重要喔! 如果不想要使用 FTP 而想要利用其他方式的話,或許可以 man rsync 這個指令來達成喔!

    如何還原系統的考量

    既然有備份,自然就得要考慮到還原囉~一般來說,我們針對備份與還原的考量通常有這兩種:
    • 我的主機需要在『很短的時間內』立刻就能夠還原上線;
    • 我的主機希望能夠在查詢到掛點的原因後,才正式上線;
    以第一種類來說,例如您的公司是提供數千甚至數萬人連上來的企業, 那麼貴公司的伺服器是『沒有休假的權力』的。所以囉,除非真的是天災,否則只要系統發生問題, 您都應該要在很短的時間內將該伺服器重新 on-line 才行啊! 這個時候,一部一模一樣的備份機器,或者是一份一模一樣的完整備份資料,就顯的很重要! 因為即使是被入侵,反正先上線,然後用那部被入侵的機器趕緊進行修復與還原的工作, 這樣才能夠達到公司正常營運的目的啊!

    那如果僅是一般個體戶呢?例如鳥哥的網站,就是這樣的代表。 那麼我當然不必要選擇完整備份了,因為即使我完整備份了,但是備份之初的資料如果就已經被入侵, 那我還原一個被入侵的資料有什麼好處?加上目前的硬體等級都很高, 網路頻寬都很夠的前提之下,重新安裝最新版 Linux 與更新到最新的套件,其實速度上是很快的。 如此一來,反正系統如果掛了,剛好整個 distribution 一起進行升級~似乎也不錯啊~ ^_^

    總之,備份工具是死的,使用的您是活的,您在使用 tar, cpio, dd 等工具時, 必須要優先考量您所想要達到的『目的』是什麼,再根據這個目的,以及您所可以利用的『資源與經費』, 選擇適當的備份方式與媒體,這樣就足夠啦!大家加油啦! ^_^

  • 關於儲存架構的考量
  • 在這個章節當中,我們提到的大概都是屬於中小企業環境所使用到的備份動作, 如果您所在的公司是大型企業的環境,那麼不妨考慮外接式,或者是擁有完整備份儲存網絡的架構, 例如 SAN (Storage Area Network) 及 NAS (Network Attached Storage) 設備, 這樣才能夠更快速與高效率的儲存與備份啊!^_^

    不過,這兩種架構當中,都需要比較高價位的光纖通道,或者是新技術的 iSCSI 協定的需求, 鳥哥還無緣碰到。除了 iSCSI 有接觸到一部機器之外, SAN 還真是沒有碰過..... 這兩部分的企業應用,就有待您自行與相關的廠商接觸瞭解囉! ^_^

    本章習題練習

    ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
    • 你所看到的常見的儲存設備有哪些?
    • Floppy, Mo, Zip, CD-RW, DVD-RW, 外接式 USB 硬碟, Tape, 外接式儲存陣列 (RAID),額外的儲存架構,如 SAN, NAS 等。
    修改歷史:
    • 2002/07/06:第一次完成
    • 2003/02/12:重新編排與加入 FAQ
    • 2005/10/25:舊版的資料已經移動到 此處
    • 2005/10/25:主要是增加了一些簡單的說明,以及將一些不合時宜的資料拿掉而已!
    伺服器篇文件
    各版本彙整說明
    CentOS 6.x