淺談備份策略
本文已不再更新,更新文章請參閱 此處
最近更新日期:2003/02/12
誰需要備份資料
哪些 Linux 資料具有備份的意義
選擇的備份裝置
備份的種類完整備份(full backup), 部分備份(Implement backup),
備份的工具選擇
VBird 的備份策略與 scripts系統備份, 每日備份, 遠端備份,
本章習題練習

誰需要備份資料
前面我們提到了相當多的 Linux 系統基礎,這個時候我們再來談一談:『若您的系統由於不預期的傷害,導致系統發生錯誤,該如何修復?』這可是個相當大的問題呀!怎麼說呢?又什麼叫做『不預期的傷害?』好了,假如您的 Linux 系統上面某些Internet的服務套件是最新的!也意味著可能是『相對最安全的』,但是,這個世界目前是閒人相當的多的,你不知道什麼時候會有所謂的『駭客軟體』被提供出來,萬一你在 Internet 上面的服務套件被入侵,導致你的 Linux 系統全毀,這個時候怎麼辦?!『重新安裝就好啦!』或許您會這麼說,但是,像鳥哥管理的幾個網站的資料,尤其是 MySQL 資料庫的資料,這些都是彌足珍貴的經驗資料,萬一被損毀而就不回來的時候,不是很可惜嗎?這個還好哩,萬一您是某家銀行的話,呵呵!那麼資料的損毀可就不是能夠等閒視之的!!關係的可是數千甚至上萬人的身家財產!!這就是備份的重要性了!他可以最起碼的稍微保障我們的資料有另外一份 copy 的備援以達到『安全回復』的基本要求!
 
如果是針對個人資料的話,那麼在一般桌上型電腦中,最好用的備份軟體就是『Ghost』這一個遠近馳名的備份大師了!他可以很輕快的就將我們的整個 partition 搞定的非常的完美!在還原方面也是非常的快速且操作簡便!由於個人桌上型電腦所使用的資料量通常不大,所以當 ghost 完成之後,通常只要將資料燒錄到光碟片當中,大約只要一至兩片的光碟片也就綽綽有餘囉!那麼將光碟片保存好,這就是最簡易的資料備份模式囉!此外,由於個人的資料變動性不大,所以資料的備份頻率方面也不需要非常的頻繁!
 
但是,萬一您提供的是『Internet』上面服務的主機資訊呢?!怎麼辦?舉個例子來說,像是我們 TnLUG 同好領導者之一的『阿基』兄,他提供的 Internet 服務是 BBS ,您曉得嗎? BBS 的資料量雖然不大,但是由於他的文件是天天在增加的,每天都有相當多的資訊流入,由於某些資訊都是屬於重要的人物之留言,這個時候,我們能夠讓機器死掉嗎?再提到最近VBird的討論區曾經掛點的問題,以及數週前 Study-Area 討論區掛點的問題,討論區一旦掛點的話,該資料庫內容如果損毀到無法救回來,嘿嘿!要曉得討論區可不是一個人的心血耶!有的時候(像 Study-Area 討論區)是一群熱心 Linux 的朋友們互相建立交流起來的資料流通網,如果死掉了,那麼不是讓這些熱血青年的熱情付之一炬了嗎?!所以囉,建立備份的策略是相當的重要的。
 
基本上,『電腦是一個相當不可靠的機器』這句話在大部分的時間內還是成立的!常常會聽到說『要電腦正常的工作,最重要的是要去拜拜!』嘿嘿!不要笑!這還是真的哩!尤其是在日前一些電腦周邊硬體的生產良率 ( 就是將硬體產生出來之後,經過測試,發現可正常工作的與不能正常工作的硬體總數之比值 ) 越來越差的情況之下,電腦的不穩定狀態實在是越來越嚴重了!舉個例子來說,我曾經同時買過同一廠牌的 IxM 30GB 硬碟三顆,回來之後經過一個星期,嘿嘿!掛掉了兩顆!其中一棵是有壞軌,另外一棵是『完全死掉』,拿去公司要求修理,結果呢?嗯!店家直接拿了一棵新的給我,害我嚇一跳,店家的工程師說『唉呀!目前這個牌子的良率太差了,所以代理商為了怕麻煩,都會直接拿新的替換給我們啦!』要曉得的是,當初那一棵完全死掉的硬碟,是我用來備份我的主機資料的....好在當時我將備份的資料放在三四的地方,還好....
 
所以囉!由於電腦 ( 尤其是目前的電腦,操作頻率太高、硬體良率太差、使用者操作習慣不良、『某些』作業系統的當機率太高.... ) 的穩定性較差,所以囉!備份的工作就越來越重要了!
 
那麼 Linux 在備份時考慮的因素有哪些呢?
 
  1. 備份哪些檔案:

  2. 例如在帳號管理那一篇當中,我們知道最起碼主機的帳號資訊在/etc/*及/home/*等等檔案都是重要的!
     
  3. 選擇什麼備份的媒介:

  4. 是可讀寫光碟、另一棵硬碟、同一顆硬碟的不同 partition、還是使用網路備援系統?哪一種的速度最快,最便宜,可將資料保存最久?
     
  5. 考慮備份的方式:

  6. 是完全備份(類似 ghost)還是部分備份即可?
     
  7. 備份的頻率:

  8. 例如 MySQL 資料庫是否天天備份、若完全備份,需要多久進行一次?
     
  9. 備份使用的工具為何:

  10. 是 tar 還是 cpio 等等?
底下我們就來談一談這些問題的解決之道吧! ^_^

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

選擇的備份裝置
在備份的時候,選擇一個『資料存放的地方』也是很需要考慮的一個因素!什麼叫做資料存放的地方呢?講個最簡單的例子好了,我們知道說,較為大型的機器都會使用 tap 這一種磁帶機來備份資料,而如果是一般個人電腦的話,很可能是使用類似 Mo 這一種可讀寫式光碟片來存取資料!但是您不要忘記了幾個重要的因素,那就是萬一您的 Linux 主機被偷了呢?這不是不可能的,我們隔壁校區的研究室曾經遭小偷,裡面所有的電腦都被偷走了!包括『 Mo 片』,當他們發現的時候,一開始以為是硬體被偷走了,還好,他們都有習慣進行備份,但是很不幸的,這一次連『備份的 MO 都被拿走了!』怎麼辦?!只能道德勸說小偷先生能夠良心發現的將硬碟拿回來囉!唉∼真慘....
這個時候,所謂的『遠端備援系統』就顯的相當的重要了!什麼是遠端備援呀!說的太文言了!呵!簡單的說,就是將你的系統資料『備份』到其他的地方去,例如說我的機器在台南,但是我還有另一部機器在高雄老家,這樣的話,我可以將台南機器上面重要的資料都給他定期的自動的 ftp 回去!也可以將家裡重要的資料給他丟到台南來!這樣的最大優點是可以在台南的機器死掉的時候,即使是遭小偷,也可以有一個『萬一』的備份所在!但是缺點是∼∼頻寬嚴重的不足!在這種狀態下,所能採取的策略大概就是『僅將最重要的資料給他 ftp 回去囉!』至於一些只要系統從新安裝就可以回覆的咚咚!那就沒有這個必要了!當然囉,如果你的網路是屬於 T1 專線的話,那麼完整備份將資料丟到另一地去,呵呵!也是很可行的啦!只是我沒有那麼好命....唉∼窮學生一個∼
在此同時,我們再來談一談,那麼除了這個『相對較為安全的備份』方法之外,畢竟這種網路備援系統實在是太耗頻寬了!如果像我們一般家用的 ADSL 根本就是吃不消!那麼怎麼辦!還有其他的方法嗎?喔∼那就只好使用近端的裝置來備份囉!這也是目前我們最常見到的備份方法!例如一般我們使用的 Tap, Mo, Zip, CD-RW, 還有備份用抽取式硬碟等等!那麼在選擇上需要注意些什麼呢?需要注意的地方有幾點: 無論如何,如果經費夠的話, Tap 備份資料真的是一個不錯的點子!因為他的高容量讓我好滿意!再來,如果經費稍微短缺的話,那麼 CD-RW 經常性的將資料燒錄下來,這也是蠻好的,尤其 CD 片又不佔空間!再來,如果還是沒有辦法,那麼一顆內建在 Linux 的硬碟用來備份也是不錯的!什麼!!連備份的硬碟都沒有,唉!怎麼跟我一樣∼這個時候沒辦法啦,用原來的安裝系統的硬碟,多留一個 partition 用來當作備份之用吧(這也是目前我常用的方法之一!)
一些裝置的檔案代號

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

備份的工具選擇
好了,選定了備份的裝置與備份的頻率之後,那麼我要使用什麼方式來備份呀!呵呵!這個也要跟備份的種類相互配合呢!通常我在備份的時候,除非有磁帶機或者有特殊的功用,否則通常我只使用 tar 啦!但是這裡我們介紹一下 cpio 這個東西!如果你有磁帶機的話, cpio 可是相當好用的一個指令呢! ^_^  ,呵呵!由於這兩個指令我們早在『壓縮工具』當中稍微提過了,請再自行過去瞧一瞧去囉!另外,您或許會問道:『那麼我為什麼不直接給他 copy 過去備份的地點就好了呢!?』呵呵!既然可以在 copy 的過程裡面增加壓縮的功能來減低整個儲存空間的消耗,為何不壓縮?!那當然還是壓縮一下比較好囉!所以啊!我還是比較喜歡 tar, cpio 的啦!
完整備份的工具
在完整備份的工具裡面,三個工具 tar, cpio 與 dump 都很常被使用!但是我沒有使用過 dump ,所以這裡就不談他!至於 cpio 的話,他最大的好處就是『 cpio 連一般的裝置檔都可以 copy 過來!』很棒吧!所以使用 cpio 進行完整備份是很棒的一個選擇。不過需要注意的是,由於 cpio 需要配合 find 才可以正常的動作!這裡請特別留意囉!另外,使用 cpio 常常配合另一顆完全用來備份的硬碟或者是磁帶機才好!至於完整的指令用法請到 『壓縮工具』 那一篇去查看囉!備份與反備份分別可以這樣使用:
 
1. 使用 cpio 來備份與反備份
[root @test /root]# find / -print | cpio -covB > /dev/st0 <==備份至 tap 
[root @test /root]# cpio -iduv < /dev/st0         <==由 tap 將資料存回系統中!

2. 使用 tar 來備份
[root @test /root]# tar -zcvPf host.tar.gz / --exclude /proc --exclude /mnt --exclude /tmp
[root @test /root]# tar -zxvf  host.tar.gz

這兩個工具都蠻好用的!尤其我特喜歡 tar 的用途!因為他相當的適合於另一顆硬碟的備份呢!

部分備份的基礎工具
至於部分備份方面,我們就以簡單的 tar 來說明一下吧!!假如我們需要備份的資料是每天的 MySQL 資料庫時,由於我想讓每天的資料都存成不同的檔案,而要分別檔案的新舊又以日期來分別最簡單了!所以我就可以這樣做:
 
[root @test /root]# tar -zcvf mysql.`date +%Y-%m-%d`.tar.gz /var/lib/mysql
如果忘記了上面的指令代表什麼意思,那麼請回到 bash 那一章去瞧一瞧吧!

[root @test /root]# tar -N '2002/07/05' -zcvf home.tar.gz /home
只有在比 2002/07/05 還要新的檔案,在 /home 底下的檔案才會被打包進 home.tar.gz 中!

這樣就能將 mysql 的資料庫壓縮備份至 mysql.2002-07-06.tar.gz 這個檔案,並且日期會每天都不一樣!呵呵!這樣一來如果系統的資料庫出了問題,就可以馬上的回復了!而且還有很多的檔案可供回復呢!不錯吧!此外,也可以利用類似上面的第二個範例的例子,將最新的資料備份就好,其他的資料則不予以更動!嘿嘿!提供了更完善的方式呢!

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

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

本章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )

2002/07/06:第一次完成
2003/02/12:重新編排與加入 FAQ