天天看點

四大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 目錄。您可能想要删除使用者的一大群目錄與檔案, 但唯一可讓使用者接受的備份方式,是将其資料全部寫入 錄音帶或CD光牒内儲存并交給他。 是以您不在乎 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做一完整備份至CD光牒機/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

繼續閱讀