更常見的這些問題是來自人為的錯誤,不當的變動,甚至因為刪除重要的檔案。如果您負責管理系統上的用戶, 一定可能常被要求重建因為不小心誤刪的檔案。
如果您進行一般備份,以每日為基礎較好 (至少對更動頻繁的使用者檔案),您將會有助於減少檔案的損失,並且增加復原程度。
最安全的備份方法是將他們紀錄於不同的媒體中,例如磁帶,抽取式硬碟,可寫式 cd .等。 然後將您的備份和您的 Linux系統分開存放。有時候這可能並不實際 -- 也許在您可以存放備份磁帶的地方沒有防火室 ! 或是在第一優先的地點沒有辦法存取這樣的外部備份系統。雖然如此,仍然可以進行備份,只是會受到一點限制。
在我服務的單位,我在幾個 Linux 系統上進行備份。按情況的不同,有些備份存放在磁帶,其他則寫入位於網路上的不同伺服器中,然而有一些仍然使用 cron 自動作業 (可能因為伺服器位在遠端,在那裡每天進行磁帶備份是不切實際或不可能的),簡單的放在分別不同磁碟上的分割區中 (例如,放在 ``/archive/'' 檔案系統) 。
在家裡,我沒有外部的備份系統,我也沒有大量的磁碟空間去存放備份影像檔。因此,我改為只備份在``/home/'' 的我的使用者檔案,同樣的還有一些在 ``/etc/''的自訂設定檔,將備份存放在分別不同的磁碟分割區中。
伺服器備份程序
進行Linux備份有幾種不同的方法,其中包括所有 Linux 發行版本中都有的命令列工具,例如 ``dd'', ``dump'', ``cpio''以及 ``tar''。其他還有文字型態工具,例如 ``Amanda'' 及 ``Taper'',這些是被設計來在備份及回存過程中加入更友善的使用者介面。當然也有圖形介面的工具,像是``KDat''。最後,還有商業化的備份工具,像是 ``BRU'' 和 ``PerfectBackup+''。這些備份計劃中任何之一都足以提供您寶貴資料的保護。
這裡有一些包括哪裡可以獲得工具的列表,可以在“Linux Applications and Utilities Page”找到,位於http://www.xnet.com/~blatura/linapp2.Html#back. 當決定好備份方式,您可能要考慮下列幾點因素:
可攜性 - 備份的可攜性 (亦即. 從一個 Linux 發行版本或應用 Unix備份然後回存到另外一個; 例如從Solaris 到 Red Hat Linux) 對您而言是否重要 ? 如果是,可能想要選擇一個命令列的工具 (亦即. ``dd'',``dump'', ``cpio'', 或 ``tar''),因為您可以相當地確定該工具可以在另一個 *nix 系統上找到。
無人或自動備份 - 定期自動進行備份而不需人力介入之能力,對您而言是否重要 ? 如果是,您可能需要能支援該方案的工具及備份媒體。
使用者友善 - 使用者友善的介面對您而言是否重要 ? 如果是,您可能想要選擇一個文字或圖形介面的工具。商業的應用程式可以提供最簡便的介面及技術支援。
遠端備份 - 從遠端機器進行備份及回存的能力對您而言是否重要 ? 如果是,您可能想要選擇命令列或文字模式的工具而不是圖形介面(除非您有相當快的網路連結及執行遠端 X sessions 的能力)。
網路備份 - 從網路主機進行備份及回存對您而言是否重要 ? 如果是,您可能要用一些支援從網路存取備份設備的命令列工具(像是 ``tar''),或是專用工具程式例如 ``Amanda'' 或是一些商業工具程式。
媒體型態 - 備份可以儲存在很多不同的媒體,像是磁帶,外接式硬碟,ZIP 磁碟,或可讀寫 CD。考慮售價及可靠性,儲存容量,及傳送速度。
警告: 當備份您的系統時, 不要包括 ``/proc'' 偽檔案系統 ! /proc 中的檔案並非真的檔案,而僅是看起來像檔案的描述,而且指向核心資料結構的連結。備份 ``/proc/kcore'' ,這事實上這是一個偽裝檔案,包含記憶體中所有的資料,會浪費很多的磁帶 ! 您可能也需要避免備份 ``/mnt'' 檔案系統,除非您有從 CD-ROM,軟碟機,網路分享檔案,或其他安裝設備上備份的特殊需求。
明顯地,備份及回存的過程會因您所選擇的備份方法而有所不同。然而,在這一節,我將會討論我最常使用的兩種工具備份的方法 : ``tar'' (其名稱源於“Tape ARchiver”),這是一個命令列式的工具,在 *nix 系統中具有很高的可攜性 ; 以及 ``KDat'',一個來自於 KDE 套件的圖形介面磁帶備份工具。
最後,我應該補充一點,依您所選擇的備份方式,即使該工具沒有建立於自動備份時間表上的能力,您仍然可以利用 cron 功能進行該自動備份。 參考使用Cron 和 Crontab 檔進行自動作業 有關使用 cron 的細節以及如何建立 crontab 行程表檔案。
使用 ``tar''備份:如果您選擇 ``tar'' 作為您的備份方案,您可能要花點時間去了解種種的指令選項 ; 鍵入 “man tar” 有更深入的明細。您還需要了解如何存取適當的備份媒體 ; 雖然在 Unix 的世界中對待所有的裝置就像處理檔案一樣,如果您寫入到一個字元設備像是磁帶,“檔案”的名稱就是設備本身的名稱 (亦即. ``/dev/nst0'' 是一個SCSI介面的磁帶機)。
下面的指令會將您的整個 Linux 系統備份於 ``/archive/'' 檔案系統,除了 ``/proc/'' 偽裝檔案系統,``/mnt/'', ``/archive/'' 檔案系統 (沒必要備份我們的備份檔 !),還有 Squid 很大的快取資料檔 (是的,依我之見,浪費備份媒體而且不需要去備份)之外的任何已掛載的檔案系統 :
tar -zcvpf /archive/full-backup-`date '+%d-%B-%Y'`.tar.gz
--Directory / --exclude=mnt --exclude=proc --exclude=var/spool/squid .
不要被上面的指令嚇到 ! 當我們將其分為兩部分,您將會發現這個強力工具之美。
上列的指令指定了選項 ``z'' (壓縮; 備份資料經由 ``gzip''壓縮), ``c'' (建立; 一個 archive 檔開始被建立),``v'' (verbose; 顯示出已經備份好的檔案), ``p'' (允許保存;保護的資料將會被 “記憶” ,可以被回復)。``f'' (檔案) 選項後面接的是的要寫入的 archive 檔 (或裝置)名稱,注意包含資料的檔名是如何得到的,只要用兩個後引號將``date'' 指令圈起來。 一般的命名慣例是在未壓縮過的檔案後面加上 `` .tar'' ,壓縮的檔案加上 ``tar.gz'' ``--directory'' 選項告知 tar 在開始備份前首先跳到以下的檔案路徑 ( 在本例中是``/''目錄 )。 ``--exclude'' 選項告知 tar 不要備份所指定的檔案或目錄。最後, ``.'' 符號告知 tar 要備份目前目錄中的所有東西。
注意: 有一點很重要必須了解的就是 tar 的選項是大小寫不同的 ! 此外,大部分的選項可以用助記符號加以簡化(亦即. ``f''), 或者使用較易記憶的選項全名 (亦即. ``file'')。 助記符號前用一個``-'' 字元作為字首作為辨識,在全名的前面有兩個這種符號的字首。參考 “man”頁以得到更多有關使用 tar 的資訊。
另一個例子,這一次只有寫入指定的檔案系統 (和上一個除了例外全部寫入的例子相反) 到一台 SCSI 的磁帶機 :tar -cvpf /dev/nst0 --label="Backup set created on `date '+%d-%B-%Y'`." --directory / --exclude=var/spool/ etc home usr/local var/spool
在上面一行的選項,注意沒有用到 ``z'' (壓縮) 選項。我強烈建議反對寫入壓縮資料到磁帶上,因為如果磁帶上資料有一部份損壞,您會失去整個備份 ! 然而,未壓縮的儲存的 archive 檔具有很高的可恢復性,即使磁帶上的檔案有一部份損毀。
因為磁帶機是一個字元設備,沒有辦法指定一個確實的檔名。因此,指定給 tar 的檔名可簡化為裝置名稱,``/dev/nst0'',是在 SCSI 排匯上的第一個磁帶設備。
注意: ``/dev/nst0'' 設備在備份做好後不會回帶 ; 因此有可能將好幾組備份寫到同一磁帶。(您也可以選擇``/dev/st0''這個裝置,在這種情形磁帶在備份完後會自動回帶)
既然我們無法對一套備份指定檔名, ``--label'' 選項可以來寫進檔案本身一些有關這一套備份的資訊。
最後,只有包含在 ``/etc/'', ``/home/'', ``/usr/local'', 及 ``/var/spool/'' (除了 Squid 的 快取資料檔)會寫進磁帶。
當使用磁帶時,可以使用下列命令回帶,以及退出磁帶:
mt -f /dev/nst0 rewind
mt -f /dev/nst0 offline
小技巧: 您將會發現到當 archive 檔建立時,前面的``/'' (斜線) 符號會被 tar 去除。這是 tar 的預設操作模式, 這是故意用來保護您避免覆寫這些重要檔案的原先版本,以防萬一您不慎在重建過程中覆寫了不正確的檔案。
如果您真的不喜歡這個特性 (記住,這是特性!) 您可以指定 tar ``--absolute-paths'' 選項,這樣會保留前面的斜線。然而,我不建議這樣做,因為很危險 !
使用``KDat''備份: 如果您使用 KDE 桌面環境,我相信您會發現``KDat'' 公用程式不但強大而且對使用者很友善。此外,另一個好處是KDat 利用``tar'' 作為其備份 engine。因此,用 KDat 寫入的備份組不但可以用 KDat 讀取,也可以用 tar ! 這使得 KDat 成為在使用者友善及備份可攜性中很好的選擇。
小技巧: 即使您決定不使用也不安裝完整的 KDE 套件,如果您安裝了 Qt 函式館就仍然可以使用KDE。
當您第一次執行 KDat,您需要建立一個備份 profile。這個 profile 告訴 KDat 您想要備份系統中的哪些檔案。如果您要的話,您可以建立好幾個備份 profile,依照您的需求 (例如,您可以建立一個 profile 叫做“Full Backup”作系統的完全備份,或是 “Quick Backup”只備份使用者的檔案)。
要建立備份 profile,可以選擇從選單欄中“File”選項選擇“Create Backup Profile” (或在“Backup Profiles”文件夾上按滑鼠右鍵,然後選擇 “Create Backup Profile”)。在右手邊的是 KDat 視窗,您可以改變各種設定,像是profile 名稱,archive 名稱, tar 選項, 以及其他的。單擊 “Help” 選單有關於這些設定的用途說明。
要指定哪些檔案應該包含在您的 backup profile, 在 ``/'' 目錄文件夾旁的核對圖示上敲一下左鍵。這會確定所有的檔案及這個目錄下所有東西都會備份。然後,在文件夾旁的小 ``+''符號上敲一下左鍵,資料夾會展開,顯示檔案及以下的目錄。您可以排除掉所不想備份的檔案;只要在您想排除的每一個檔案或目錄旁的核對符號上敲一下左鍵。例如,一個完全備份應該包含已標記的所有檔案及目錄,要排除 ``/proc'' (一個偽裝檔案系統,包含您目前運作系統的資料),``/mnt'' ( 位於CD-ROM下面的目錄,軟碟機,網路分享常被掛載在此),而且如果您是 Squid 使用者,``/var/spool/squid'' (Squid的快取資料檔)。一旦您選好了合適的檔案,在您建立好的備份 profile 上按一下左鍵,然後在“Files >>” 鈕上按一下左鍵將選好的檔案移進您的備份 profile。
注意: 如果您的伺服器資料到巨大到無法實際存放到磁帶中,您需要建立分別的備份 profiles,備份組中每部份一個。
實際進行備份時,將磁帶放入,從 “File” 選單中選擇 “Mount Tape” (或是用滑鼠敲一下看起來像磁帶的圖示)。
這樣會 “掛載” 磁帶 (事實上,因為磁帶機是字元裝置,事實上無法掛載它 -- 其實 KDat 只是先回帶,試著去讀取開頭資訊,如果成功,找尋磁帶機上符合的索引。否則,KDat 會提醒您格式化磁帶。
(注意: 如果 KDat 持續反映沒有磁帶在磁帶機但事實上有,您應該確定在參數中指定的磁帶機名稱正確,在選單欄中用滑鼠敲一下 “Edit” 選項然後選擇“User Preferences”.)
一旦 KDat 已經掛載好磁帶,在您開始備份前必須選擇備份的 profile。當打算開始備份,只要在您要的備份 profile上敲一下右鍵,然後在“Backup”上敲一下左鍵。KDat 會先顯示一個對話框告訴您有關您所選擇備份 profile 的細節 ;在“Ok” 上敲一下左鍵就會開始備份。
當備份開始進行,KDat 會顯示一個有各種狀態資訊的對話框 (經過時間,備份大小,備份比率,估計剩馀時間,檔案數量及總共寫入 bytes 數),以及已經備份檔案的列表。一個包含好幾 gigabyte 資料的完全備份可能需要花上好幾個小時。必要的話,在備份過程中任何時候您可以在“Abort” 鈕上敲一下左鍵放棄備份。
一旦備份完成,您可以在選單欄中選擇 “Edit”,再選 “Unmount Tape”以解掛載磁帶,或在磁帶圖示上敲一下,這樣磁帶會回帶然後跳出。
無疑地, 比例行備份更重要的事就是當問題發生後能讓重要檔案正常回復 !
明顯地,就像伺服器備份程序所討論的,進行回存的程序依您所選擇的備份方案而有所不同。在這一節,我將會討論由 ``tar'' 及 ''KDat''所備份的回存方法。
使用 ``tar'' 回存:
下面的指令會從 ``full-backup-09-October-1999.tar.gz'' 回存所有的檔案,這是我們 Linux 系統的備份例 (按照在 使用``tar'' 備份 一節中的命令例所做的):tar -zxvpf /archive/full-backup-09-October-1999.tar.gz
上面的命令會從 archive 檔中取出所有的檔案,保留原檔案的擁有者及權限。 ``x'' 選項用來作解出(其他的選項在 使用``tar'' 備份 這節中有提到:)
警告: 從一個 tar 的 archive檔中解出檔案可能是一件危險的事,因此必須謹慎進行。也許這些檔案作時並未包括准備好的路徑 (有一些被誤導或未被告知的發展者散他們的檔案時可能會這樣),表示檔案會被解到目前的目錄下。也許檔案壓縮時有加上 ``/'' 斜線 (當備份檔建立時指定 ``--absolute-paths'' 選項),表示檔案會被回存到絕對位置 (即使您不願意)。或者也許檔案壓縮時未加上 ``/'' 斜線, 表示檔案會被解到目前的目錄下 (即使您不願意這樣)。當然,全看備份是如何建立的。因為這個緣故,我強烈建議先在 ``tar''命令加上``t'' (type) 選項加以測試,然後當您完全確定命令會依您預期進行後將 ``t'' 換成``x'' (extract) 。
如果您不需要回存 archive 中所有的檔案,您可以指定一個或更多的檔案,按照下面例 :
tar -zxvpf /archive/full-backup-09-October-1999.tar.gz etc/profile usr/local/bin/tolower
上面的命令會從例的檔案回存 ``etc/profile'' 及 ``usr/local/bin/tolower''
如果您只試著從您的 archive 檔中回存一個或幾個檔案,除非您確實地指定和 archive 檔中所存放相同的檔名及路徑,否則不會成功。 下面的例會幫您解決問題:
tar -ztvpf /archive/full-backup-09-October-1999.tar.gz grep -i profile
在上面的例,所有在 archive 檔中的檔案都以檔名列出。所有的結果都會輸出到 ``grep'' 指令 (使用 grep的``i'' 選項可忽略混雜的情況),顯示``profile''中任何檔案的目錄及檔名。當您確實決定要回存的檔名時,您可以用一般的 tar 指令表達指定所要回存的檔案。
就像在 伺服器備份程序 所提到的,當建立一個 archive 檔時, tar 會從檔案路徑去除前面的 ``/'' (斜線)符號。
這表示檔案回存時可能不會在和備份時相同的位置結束。因此,不要改變到 ``/'' root 目錄或者``--directory /'' 選項。
注意: 一個更安全的方法是在不同的目錄回存檔案 (例如您的 home 目錄),然後比對,搬移及更新檔案到之後的原始位置。
使用``KDat''回存:
要從 KDat 建立的備份組回存一個或更多檔案,將備份磁帶放進磁帶機,從“File”選單項目選擇“Mount Tape”(或在磁帶的圖示上按下滑鼠左鍵) KDat 會試著從磁帶讀入開頭資訊,如果成功的話,會試著找尋符合開頭資訊的磁帶索引。這個索引存在硬碟,是由 KDat 為所格式化的每一個備份磁帶所做的唯一檔案,每一次進行備份就會更新。如果符合的檔案索引遺失了(也許您回存的備份組是由另一部機器所備份的,或是因為硬碟損毀而刪除了索引檔), KDat 會通知您這件事,並且如果可以讀取磁帶重建索引的話會詢問您。由於您必須在您回存檔案前先重建索引,按左鍵選擇“Yes”是有意義的。
(注意: 一但磁帶重新索引過,名稱會變成“Reindexed Tape”。 您可以將它重新命名成原來的樣子)
當磁帶索引成功地讀入,可以用來選擇您想從備份組回存的檔案或目錄,和您建立備份檔時所用的方法十分相同(查看 伺服器備份程序 有關選擇檔案過程的詳細說明)。
當您選擇好合適的檔案,您可以從目錄頁中的“File”選項選擇“Restore...”開始回存程序 (或在磁帶回存的圖示上按滑鼠左鍵)。KDat會顯示一個對話框,讓您確認要回存的檔案。此外,您有指定回存的檔案所到目錄的選項。這讓您回存重要檔案到您的 home 目錄下,然後可以和預期位置中的檔案做比較,移動或是更新。這實際上是最安全的回存檔案方法。
要開始回復程序,在“Okay”鈕上按一下,KDat 會掃描磁帶並且開始回存選定好的檔案。
有時,您會發現不使用 KDat 回存一個用 KDat 備份過的檔案是必須或有幫助的。也許您想要在不提供圖形介面的系統上回存這些檔案,或是您的網路速度很慢而透過它執行 KDat 是不切實際。幸運地, KDat 使用 ``tar'' 工具寫入備份資料, 在任何 *nix 系統都有的命令列工具。
如果您打算用 tar 回存用 KDat 建立的備份組,就像您回存用 tar 本身備份的普通備份組所做的選項一樣。記住,資料組並未以壓縮格式儲存。
注意: 當您試著使用 tar 存取由 KDat 所做的備份組時,一定會得到錯誤訊息。這是因為當磁帶第一次格式化時 KDat 加入了開頭及其他資訊。重 tar 指令兩三次就會跳到檔案真正開頭的地方。
要從 KDat 建立的備份組回存一個或更多檔案,將備份磁帶放進磁帶機,從“File”選單項目選擇“Mount Tape”(或在磁帶的圖示上按下滑鼠左鍵) KDat 會試著從磁帶讀入開頭資訊,如果成功的話,會試著找尋符合開頭資訊的磁帶索引。這個索引存在硬碟,是由 KDat 為所格式化的每一個備份磁帶所做的唯一檔案,每一次進行備份就會更新。如果符合的檔案索引遺失了(也許您回存的備份組是由另一部機器所備份的,或是因為硬碟損毀而刪除了索引檔), KDat 會通知您這件事,並且如果可以讀取磁帶重建索引的話會詢問您。由於您必須在您回存檔案前先重建索引,按左鍵選擇“Yes”是有意義的。
(注意: 一但磁帶重新索引過,名稱會變成“Reindexed Tape”。 您可以將它重新命名成原來的樣子)
當磁帶索引成功地讀入,可以用來選擇您想從備份組回存的檔案或目錄,和您建立備份檔時所用的方法十分相同(查看 伺服器備份程序 有關選擇檔案過程的詳細說明)。
當您選擇好合適的檔案,您可以從目錄頁中的“File”選項選擇“Restore...”開始回存程序 (或在磁帶回存的圖示上按滑鼠左鍵)。KDat會顯示一個對話框,讓您確認要回存的檔案。此外,您有指定回存的檔案所到目錄的選項。這讓您回存重要檔案到您的 home 目錄下,然後可以和預期位置中的檔案做比較,移動或是更新。這實際上是最安全的回存檔案方法。
要開始回復程序,在“Okay”鈕上按一下,KDat 會掃描磁帶並且開始回存選定好的檔案。
有時,您會發現不使用 KDat 回存一個用 KDat 備份過的檔案是必須或有幫助的。也許您想要在不提供圖形介面的系統上回存這些檔案,或是您的網路速度很慢而透過它執行 KDat 是不切實際。幸運地, KDat 使用 ``tar'' 工具寫入備份資料, 在任何 *nix 系統都有的命令列工具。
如果您打算用 tar 回存用 KDat 建立的備份組,就像您回存用 tar 本身備份的普通備份組所做的選項一樣。記住,資料組並未以壓縮格式儲存。
注意: 當您試著使用 tar 存取由 KDat 所做的備份組時,一定會得到錯誤訊息。這是因為當磁帶第一次格式化時 KDat 加入了開頭及其他資訊。重 tar 指令兩三次就會跳到檔案真正開頭的地方。