四大Linux備份工具比較與操作實例

 標準的UNIX系統皆有提供基本的備份工具,不同的備份工具有不同的差異。dump,cpio,tar及dd,dump及restore通常是最好的選擇。其次是cpio,但是它比tar來的不親和些;tar則比dump或cpio更容易使用。如果希望使用tar或cpio備份raw devices或執行異地備份,那麼dd是你的另一個選擇。

dump
dump 可將目錄或整個文件系統備份至指定的設備,或備份成一個大文件。dump 可以執行類似 tar 的功能。然而,dump 傾向於考慮文件系統而不是個別的文件。下面是引自 dump 手冊文件中的內容:“dump 檢查 ext2 文件系統上的文件,並確定哪些文件需要備份。這些文件將出於安全保護而被複制到給定的磁盤、磁帶或其他存儲媒體上,大於輸出媒體容量的轉儲將被劃分到多個卷。在大多數媒體上,容量是通過一直寫入直至返回一個 end-of-media 標記來確定的。”
配合 dump 的程序是 restore ,它用於從轉儲映像還原文件。
restore 命令執行轉儲的逆向功能。可以首先還原文件系統的完全備份,而後續的增量備份可以在已還原的完全備份之上覆蓋。可以從完全或部分備份中還原單獨的文件或者目錄樹。
dump 和 restore 都能在網絡上運行,因此您可以通過遠程設備進行備份或還原。 dump 和 restore 使用磁帶驅動器和提供廣泛選項的文件設備。然而,兩者都僅限用於 ext2 和 ext3 文件系統。如果使用的是 JFS、Reiser 或者其他文件系統,您將需要其他的實用工具,比如 tar 。
cpio
如果沒有 dump 指令或者 dump 版本不符所需, 則 cpio 是您的下一個好選擇。cpio 比其它備份工具存在的時間久,且具有一些其它工具所缺乏的重要特性。 但首先需說明的是,有些功能 dump 有提供而 cpio 則無,如下:
◆無需使用touch或find檔案,即可執行變動備份(incremental backup);
◆備份完後不改變資料的atime及ctime;
◆以互動方式執行資料恢復,如restore的選項-i。
cpio 是一個非常有用的備份工具,它最大的不同處,是可以備份從標準輸入( stdin )而來的的檔案。 目前有些新版的 tar 支持 從標準輸入來的檔案備份,但大部份尚未有此功能。
爲什麼cpio較不常被使用?
如果 cpio 如此好用,爲何 tar 卻比較流行?最可能的理由是同樣的功能,tar 比 cpio 較簡單易用(也較標準)。 例如:每個版本的 tar 都支持 tar cf device 及 tar xf device, 然而 cpio有時支持 I 及 O;有的版本則無。如果將 cpio 每種版本的選項累計,則有近 40 個選項, 甚至有些使用同一字母的參數,在不同版本的 Unix 有不同的意義。 但您只要使用在大部份平臺皆標準的選項,那麼,cpio 幾乎與 tar 一般簡單好用。
tar
如果需要定期備份整個作業系統,dump 可能是最好的選擇。其次是 cpio, 因爲它可與 find 搭配執行變動備份( incremental backup )。如果您像大部份的人一般,只爲了將資料做一次完整的 備份,那麼就不需要定期或變動備份等功能。 例如,您可能希望快速地備份使用者 /home 目錄。您可能想要刪除使用者的一大羣目錄與檔案, 但唯一可讓使用者接受的備份方式,是將其資料全部寫入 磁帶或光盤內儲存並交給他。 因此您不在乎 atime,不需定期做變動備份, 只希望將一堆資料放到備份媒體上,而且也希望他人可以很容易地將資料從備份中取出, 在這種情況下,tar 會是最佳選擇。
有一些功能是 cpio 有而大部份的 tar 則無的( GNU tar 沒有這些限制),例如:
◆可以備份來自stdin的檔案;
◆當備份完成時重新設定檔案的atime,儘管這會改變其ctime。
雖然 tar 的歷史並不比 cpio 來得久,但它卻得到較大的歡迎,這也正是它的特點之一。幾乎每個人都知道如何讀 tar 檔,即使不會也很容易學。 有些程序如 WinZip, 甚至可以自動地解開一個tar 檔或壓縮過的 tar 檔以讀取其內容( WinZip 卻無法開啓cpio 檔)。tar 也較 dump 或 cpio 在 Unix 平臺間具可性。
dd
大部份的人不常使用 dd 來作備份, 它是一個相當低級的指令, 可將資訊內涵的每個位元( bit )原封不動地從一個地方搬到另一個地方, 它不管也無需知道備份資料的結構。 因此不同於 dump,tar, 及 cpio, 它不可以拷貝一羣檔案至儲存媒體, 只可以拷貝一個檔案或一檔案的部份或 partition 或部份 partition,甚至可以在資料修改中途將資料從標準輸入( stdin )拷貝至標準輸出(stdout )。即使 dd 可以拷貝單一檔案,但其對檔名或檔案內容是一無所知的, 它純粹只是從一個地方搬運檔案的位元內容至另一個地方而已。
dd 是一個文件系統複製實用工具,它產生文件系統的二進制副本。dd 還可用於產生硬盤驅動器的映像,類似於使用諸如 Symantec 的 Ghost 這樣的產品。然而,dd 不是基於文件的,因此您只能使用它來將數據還原到完全相同的硬盤驅動器分區
這種方式看似相當簡單, 相對地它也相當有彈性,可以在不考慮資料格式之下執行拷貝動作, 因此它可在兩個不同平臺間作資料轉換。 例如:從 EBCDIC 到 ASCII,或 Oracle 允許資料以檔案系統下的檔案形式存在, 亦可以直接放在原始磁盤區塊上,然而備份程序無法預測管理員會以何種方式存放資料, 故採用富彈性的dd 作自動備份,甚至備份結果是混合此兩種資料形式也無妨,亦即有些在檔案系統中,有些則在原始磁盤上。 如此,管理員可依資料應用特性決定其存放形式,可見 dd 所提供的彈性好處之大。
其它備份工具
尚有其它較不爲人知或只出現在某些平臺的備份工具, 其中較常使用的包括:
◆cp命令:cp是copy的縮寫,用於複製文件;目錄。標準的 cp 命令可用於複製整個目錄樹。該選項將對非標準的文件執行未知的操作。有些 UNIX 變種和 GNU cp 工具支持 -R 選項,使用該選項可以正確地複製命名管道、鏈接和其他的文件。
◆pax:pax是Portable Archive eXchange的縮寫,可產生一便攜式的備份,此備份格式符合    IEEE    Std.1003.1-1988     的Archive/Interchange File Format。 pax 亦可讀寫一些其它的檔案格式如 tar 或 cpio。 正如 Unix 世界的許多現象般,pax也有一羣擁護者認爲它是備份工具中最好的選擇。
◆fbackup:fbackup只有HP-UX提供且屬於HP的System Administration Menu ( SAM )的工具之一,使用 fbackup 作的備份, 只 能在另一個 HP-UX 主機上使用 frecover 讀取之。 僅管fbackup 比傳統的 tar 及 cpio 有較多的功能, 但它缺乏可攜性的缺點是非常使人詬病的。 即使您無法用 SAM 來操作 dump, cpio 或 tar,但這三個指令的可攜帶特性,絕對值得您花較多的心力去使用它們。
dump命令操作舉例
dump命令格式:
dump [-cnu][-0123456789][-b <區塊大小>][-B <區塊數目>][-d <密度>][-f <設備名稱>][-h <層級>][-s <磁帶長度>][-T <日期>][目錄或文件系統] 或 dump [-wW]
主要選項:
-0123456789  備份的層級。 
-b<區塊大小>  指定區塊的大小,單位爲KB。 
-B<區塊數目>  指定備份卷冊的區塊數目。 
-c  修改備份磁帶預設的密度與容量。 
-d<密度>  設置磁帶的密度。單位爲BPI。 
-f<設備名稱>  指定備份設備。 
-h<層級>  當備份層級等於或大雨指定的層級時,將不備份用戶標示爲"nodump"的文件。 
-n  當備份工作需要管理員介入時,向所有"operator"羣組中的使用者發出通知。 
-s<磁帶長度>  備份磁帶的長度,單位爲英尺。 
-T<日期>  指定開始備份的時間與日期。 
-u  備份完畢後,在/etc/dumpdates中記錄備份的文件系統,層級,日期與時間等。 
-w  與-W類似,但僅顯示需要備份的文件。 
-W  顯示需要備份的文件及其最後一次備份的層級,時間與日期。
1.執行一個完全 Linux 備份,它把所有 ext2 和 ext3 文件系統備份到一個 SCSI 磁帶設備。
dump 0f /dev/nst0 /boot
dump 0f /dev/nst0 /
說明:在這個例子中,系統中有兩個文件系統。一個用於 /boot,另一個用於 / ,這是常見的配置。它們必須在執行備份時單獨地引用。 /dev/nst0 引用第一個 SCSI 磁帶驅動器,不過是以非重繞的模式引用。這樣確保各個卷在磁帶上一個接一個地排列。dump 的一個有趣特性是其內置的增量備份功能。在上面的例子中,0 表示 0 級或基本級備份。這是完全系統備份,您要定期執行以保存整個系統。對於後續的備份,您可以使用其他數字(1-9)來代替 0,以改變備份級別。1 級備份會保存自從執行 0 級備份以來更改過的所有文件。2 級備份會保存自從執行 1 級備份以來更改過的所有文件,以此類推。使用 tar 和腳本可以執行相同的功能,但要求腳本創建人員提供一種機制來確定上次備份是何時執行的。dump 具有它自己的機制,即它在執行備份時會輸出一個更新文件(/etc/dumpupdates)。這個更新文件將在每次執行 0 級備份時被重設。後續級別的備份會保留它們的標記,直至執行另一次 0 級備份。如果您在執行基於磁帶的備份,dump 會自動跟蹤多個卷。
2. 配合使用 find 命令複製整個目錄
$ find . |cpio -ov >archive.cpio
使用dump備份資料
# dump levelunbdsf blkg-factor density size device-name file_system
下面是執行此指令的例子:
◆對/home做一完整備份至本地磁帶機/dev/rmt/0cbn:
# dump 0unbdsf 126 141000 11500 /dev/rmt/0cbn /home
◆對/home做一完整備份至光盤機/backup/home.dump:
# dump 0unbdsf 126 141000 11500 /backup/home.dump /home
◆對/home做一完整備份至遠端主機hsm的磁帶機/dev/rmt/0cbn:
# (r)dump 0unbdsf 126 141000 11500 hsm:/dev/rmt/0cbn /home
上述的指令包含不需要參數的三個選項( 0,u, 及 n ),及需要參數的四個選項( b,d,s 及 f )。
dump 指令的第一個參數是一串選項,然後每個選項對應的參數依照選項的順序依次放置於指令行。
使用resotore工具恢復
配合 dump 的程序是 restore,它用於從轉儲映像還原文件。restore 命令執行轉儲的逆向功能。可以首先還原文件系統的完全備份,而後續的增量備份可以在已還原的完全備份之上覆蓋。可以從完全或部分備份中還原單獨的文件或者目錄樹。    
您必須相當熟悉以不同的方式使用 restore 指令,從 dump 產生 的備份中取得資料。
restore指令的語法
一旦可以讀取 dump 磁帶, 您必須決定要讀什麼資料及如何讀它,以下討論 restore 一般常用的參數。
基本上,有四件事情是你希望dump磁帶提供的:
◆讀取dump磁帶的目錄以確認內容是否需要;
◆恢復整個檔案系統;
◆恢復選定的檔案;
◆執行互動式的恢復。
一般restore指令語法如下:
restore [trxi]vbsfy blocking-factor file-number device-name
restore指令的選項
restore 的行爲如何,端視其後的參數型態決定恢復的形式。 第一個參數指明 restore 的型式,只可以從四種可能的參數中挑選一種:
t:告訴restore顯示備份磁帶的目錄。
r:指明備份磁帶的整卷內容恢復到目前的工作目錄之下。
x:只恢復restore指令行末端所列的檔案。
i:以互動方式恢復資料。
決定恢復的行爲
下面的參數不是必須的,但會影響恢復的行爲:
v:指定以明細(verbose)的方式輸出。
s:在開始讀磁帶前需跳過一些磁帶上的檔案。
b:指定正要讀取磁帶的區塊因子。
f:標明正使用的備份設備之檔名。
y:告訴restore嘗試從讀取錯誤中救回。
含備份資料的儲存媒體可讀否?
爲確保你知道備份磁帶的格式與區塊數目大小, 先嚐試列出它的 目錄。 下列指令可產生 dump 備份磁帶的目錄:
$ restore tbfy block_size device-name
例如,從一個在 /dev/rmt/0cbn 磁帶設備上的 dump 磁帶(使用 的區塊因子是 32 )讀取其目錄,指令如下:
$ restore tbfy 32 /dev/rmt/0cbn
Restore命令舉例:
從磁帶備份中提取 /etc 目錄,可使用以下命令:
restore -xf /dev/nst0 /etc
使用dump/restore恢復單個文件
1. 準備用dump備份/boot目錄下的文件. 使用df /boot查看/boot所在的設備(以下假設爲/dev/hda1)
2. 首先確認備份需要的空間. 查看一個0級備份需要的字節數,使用 -S
# dump -oS /dev/hda1
3. 備份到文件而非磁帶. 確認在/var/tmp目錄是否有足夠的空間,執行
# dump -0u –f /var/tmp/dumpfile /dev/hda1
4. 檢查/etc/dumpdates,查看完全備份的時間戳.
5. 使用restore檢查備份文件的內容
# restore –tf /var/tmp/dumpfile
6. 我們可以使用restore的互動模式恢復特定文件到一個臨時目錄.
# mkdir /tmp/restored; cd /tmp/restored# restore –if /var/tmp/dumpfile
7. 這時會看到一個restore > 提示符. 鍵入help查看可用命令的列表. 使用ls和cd命令查看備份文件的列表.
8. 使用add,選中/grub.menu.1st和/grub/grub.conf文件.列出所在目錄,恢復的文件應該帶有星號.
9. 鍵入extract命令恢復選中的文件.設置下個卷名爲1, 不爲解壓目錄設置所有者模式. quit退出restore模式.
10. 在restore運行的目錄中應該有一個grub目錄,包含恢復的grub.conf和menu.1st文件.
cpio 命令操作舉例:
1. 拷貝當前目錄中所有文件到磁帶設備 /dev/rmt0,輸入:
find . | /usr/sysv/bin/cpio -oc >/dev/rmt0
2. 從 cpio 歸檔中只抽取一個常規文件中的文件列表,使用下列命令:
cat ar | /usr/sysv/bin/cpio -i -E Efile
3. 把/home目錄備份到SCSI磁帶設備中,輸入下面的命令:
$ls /home | cpio -o > /dev/st0
你也可以對cpio的備份進行計劃,用crontab工具設置成基於任何時間的有規律地運行。例如,要在每晚2點把/ home目錄備份到SCSI磁帶驅動器中,把下面的語句添加到root的crontab文件中即可:
00 02 * * * ls /home | cpio -o > /dev/st0
dd命令舉例:
1.把第一個硬盤的前 512 個字節存爲一個文件:
dd if=/dev/hda of=disk.mbr bs=512 count=1
2爲軟盤建立鏡像文件
dd if=/dev/fd0 of=disk.img bs=1440k
有趣的是,這個鏡像文件能被 HD-Copy ,Winp_w_picpath 等工具軟件讀出。
cp命令舉例:
1 將dir1下的所有目錄包括子目錄陸續地複製到dir2中。
#cp -a dir1 dir2
2.將一個目錄中的內容複製到一個已有的目錄中
$ cp -r /home/mc/* /export/home/mc
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章