輕松玩轉(zhuǎn)Solaris ZFS文件系統(tǒng)的備份恢復(fù)
原創(chuàng)【51CTO獨(dú)家特稿】在全面了解Solaris 10 ZFS文件系統(tǒng)的管理一文當(dāng)中,我們對ZFS文件系統(tǒng)的特點(diǎn)、結(jié)構(gòu)、命令、管理等方面進(jìn)行了詳細(xì)的介紹。本篇文章是之前一篇的續(xù)作,將以O(shè)penSolaris為例,介紹管理ZFS文件系統(tǒng)的不同方法。
51CTO編輯推薦:下一代Linux文件系統(tǒng)
ZFS文件系統(tǒng)的快照是一個(gè)很方便的功能,可以輕松地對系統(tǒng)進(jìn)行備份、恢復(fù)而無需擔(dān)心系統(tǒng)受到修改。你可以通過命令行進(jìn)行快照的創(chuàng)建、刪除和修改,也可以通過瀏覽器進(jìn)行圖形化的管理。除此之外,OpenSolaris中還提供了非常方便的時(shí)間滑塊功能,而我們還可以更加方便的使用一些shell腳本組合進(jìn)行批處理。
一、ZFS文件系統(tǒng)快照簡介
快照是文件系統(tǒng)或卷在給定時(shí)間點(diǎn)上的只讀版本。使用文件系統(tǒng)快照可以對動態(tài)文件系統(tǒng)進(jìn)行聯(lián)機(jī)備份。快照若與日志技術(shù)相結(jié)合,可實(shí)現(xiàn)文件系統(tǒng)的快速恢復(fù)。快照行為類似于文件系統(tǒng)的只讀副本,反映文件系統(tǒng)在創(chuàng)建快照的時(shí)間點(diǎn)的狀態(tài)。快照對于備份和最終用戶能否從錯(cuò)誤中恢復(fù)非常重要。可從文件系統(tǒng)根目錄中的 .zfs/snapshot 目錄下訪問文件系統(tǒng)快照。
用戶通常無需使用磁帶備份便可恢復(fù)意外刪除的文件,并可在開始進(jìn)行風(fēng)險(xiǎn)升級或執(zhí)行其他任務(wù)前捕獲快照,以便在需要時(shí)可以回復(fù)到升級或執(zhí)行其他任務(wù)前的狀態(tài)。ZFS 允許進(jìn)行回復(fù)或“回滾”,這可將文件系統(tǒng)的內(nèi)容復(fù)位到捕獲該快照時(shí)的狀態(tài)。ZFS 利用寫復(fù)制 (copy-on-write, COW) 機(jī)制來存儲數(shù)據(jù),并且?guī)缀蹩梢宰鳛閿?shù)據(jù)存儲的副效應(yīng)來生成快照。COW 在將新數(shù)據(jù)寫入磁盤前會讀入舊數(shù)據(jù)。之后,COW 會將舊數(shù)據(jù)寫入某個(gè)新位置以供快照使用。此讀取和復(fù)制數(shù)據(jù)的過程同時(shí)適用于用戶數(shù)據(jù)和文件系統(tǒng)的專用數(shù)據(jù)(元數(shù)據(jù))。任何后續(xù)寫入操作都將導(dǎo)致通過 COW 機(jī)制分配新塊,因此永遠(yuǎn)不會修改組成快照的那些塊。
從本質(zhì)上而言,從某個(gè)備份進(jìn)行恢復(fù)的步驟與從傳統(tǒng)備份恢復(fù)的步驟是一樣的:
◆重建文件系統(tǒng)。
◆恢復(fù)完整備份。
◆恢復(fù)每個(gè)增量備份。
我們也可以創(chuàng)建某個(gè)特定快照的克隆(克隆指一個(gè)其初始內(nèi)容與某個(gè)快照的內(nèi)容相同的文件系統(tǒng))。正如可以修改其他文件系統(tǒng)屬性一樣,可以修改克隆的屬性和內(nèi)容。
二、使用命令創(chuàng)建和刪除ZFS快照
我們使用zfs snapshot命令來創(chuàng)建快照,這個(gè)命令只有一個(gè)變量就是快照的名字。快照名字如下所示:
filesystem@snapname
volume@snapname
◆創(chuàng)建快照
# zfs snapshot rpool/tank@sun
通過使用 -r 選項(xiàng)可為所有后代文件系統(tǒng)創(chuàng)建快照。
# zfs snapshot -r tank1/home@now
然后使用命令查看所有快照,如圖1 。
# zfs list -t snapshot

圖1 使用命令查看所有快照
說明:快照不能被修改屬性,也不能使數(shù)據(jù)集的屬性應(yīng)用到快照上。
◆刪除快照
請使用zfs destroy命令刪除快照:
# zfs destroy tank/home/ahrens@Friday
在快照存在的情況下,數(shù)據(jù)集不能被刪除。另外,如果存在快照的克隆,也不能刪除數(shù)據(jù)集。
◆修改快照名稱
可以使用zfs rename命令,給快照改名字。
將cindys快照的名字改為today:
# zfs rename tank/home/cindys@111205 pool/home/cindys@today
◆顯示和訪問ZFS快照
快照可以使用下面的方法進(jìn)行顯示:
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT tank/home@now 0 - 19K - tank1/home@now 0 - 19K - tank1/home/bo@now 16K - 18K -
◆恢復(fù)到最初的快照
使用zfs rollback命令能使快照放棄所有的改變,恢復(fù)到建立快照的最初狀態(tài)。如果有些最近的快照的話,使用-r選項(xiàng)能強(qiáng)制刪除這些快照,而恢復(fù)到最初的快照。
恢復(fù)pool/home/ahrens文件系統(tǒng)的星期二的快照:
# zfs rollback pool/home/ahrens@tuesday # zfs rollback -r pool/home/ahrens@tuesday
#p#
三 通過瀏覽器管理快照
1 安裝配置Java Web Console
和Solaris 10相比,OpenSolaris 沒有預(yù)先配置Java Web Console,需要自行安裝配置,這里需要使用Solaris 10 安裝DVD光盤或者ISO文件。
安裝操作如下:
# lofiadm -a sol-10-u8-ga-x86-dvd.iso /dev/lofi/1 # mkdir /mnt2 # mount -F hsfs /dev/lofi/1 /mnt2 # cd Solaris_10/ # cd Product/ # cp -rf SUNWjhrt SUNWjhdev SUNWj5dev SUNWj5rt SUNWj6rt SUNWjato SUNWmconr SUNWmcon SUNWmcos SUNWmcosx SUNWmctag SUNWmfrun SUNWzfsgr SUNWzfsgu /var/spool/pkg # pkgadd
配置Java Web Console :
執(zhí)行以下命令以恢復(fù)對 RPC 通信的外部訪問。
# svccfg
svc:> select system/webconsole
svc:/system/webconsole> setprop options/tcp_listen=true
svc:/system/webconsole> quit
# /usr/sbin/smcwebserver start
starting Sun Java(TM) Web Console Version 3.1 ...
The console is running
# netstat -a | grep 6789
*.6789 *.* 0 0 49152 0 LISTEN
*.6789 *.* 0 0 49152 0 LISTEN
最后一條命令的輸出應(yīng)返回一個(gè) 6789 項(xiàng),該項(xiàng)為用于連接到 Sun Java Web Console 的端口號。
如果希望服務(wù)器在系統(tǒng)引導(dǎo)時(shí)自動啟動,請運(yùn)行以下命令:
# /usr/sbin/smcwebserver enable
如果沒有Solaris 10 安裝DVD 光盤可以訪問Oracle/Sun的官網(wǎng)(需注冊)下載Java Web Console 3.0.2 軟件包。安裝過程從略。
2 進(jìn)入ZFS的管理界面
點(diǎn)擊zfs管理鏈接進(jìn)入zfs的web管理頁面,如圖 2 。

圖2 zfs的web管理頁面
相比Solaris 10,這里只有英文界面了,對于中國用戶可能稍微有些麻煩,下面稍微說明下。
◆創(chuàng)建普通快照
包括四個(gè)部分:
a.定義快照

圖3 定義快照
說明:有效的快照名稱長度介于 1 到 256 個(gè)字符之間,并且可以包含以下字符:A-Z、a-z、0-9、.、:、_ 和 -。
b.檢查配置

圖4檢查配置
在創(chuàng)建快照之前,如果要進(jìn)行更改,請?jiān)?ldquo;步驟”選項(xiàng)卡中單擊前面的某個(gè)步驟,或單擊“上一步”按鈕在向?qū)е邢蚯皩?dǎo)航。
c.預(yù)覽要執(zhí)行的命令
在創(chuàng)建快照之前,可以預(yù)覽所要執(zhí)行的命令。
d.查看命令結(jié)果
如果出現(xiàn)命令執(zhí)行成功字樣是成功建立快照成功的標(biāo)志。
◆克隆文件系統(tǒng)快照
克隆指一個(gè)其初始內(nèi)容與某個(gè)快照的內(nèi)容相同的文件系統(tǒng)。借助克隆,可對文件系統(tǒng)進(jìn)行快速復(fù)制,這種方法可高效利用空間。克隆最適用于需要某個(gè)數(shù)據(jù)集的許多幾乎完全相同的副本的情況。例如,可能有多個(gè)系統(tǒng)映像,每個(gè)區(qū)域?qū)?yīng)一個(gè)系統(tǒng)映像。與其他文件系統(tǒng)一樣,可以修改克隆的設(shè)置和內(nèi)容。克隆文件系統(tǒng)快照同樣包括四個(gè)步驟:
定義文件系統(tǒng)克隆、檢查配置、預(yù)覽要執(zhí)行的命令、以及查看命令結(jié)果。

圖5 定義文件系統(tǒng)克隆
和之前一樣。有效的文件系統(tǒng)名稱長度介于 1 到 256 個(gè)字符之間,并且可以包含以下字符:A-Z、a-z、0-9、.、:、_ 和 -。此處還必須選擇一個(gè)現(xiàn)有文件系統(tǒng)快照,以作為新文件系統(tǒng)的基礎(chǔ)。新文件系統(tǒng)的存儲池必須和包含要克隆的快照的存儲池相同。新文件系統(tǒng)或克隆的內(nèi)容最初和它所基于的現(xiàn)有文件系統(tǒng)快照相同。第2-4個(gè)步驟與之前一樣,此處不再贅述。
#p#
四、ZFS自動快照服務(wù)的管理:時(shí)間滑塊
OpenSolaris在ZFS自動快照服務(wù)之上引進(jìn)了時(shí)間滑塊服務(wù),并將這些功能整合進(jìn)GNOME桌面環(huán)境。這些創(chuàng)新使得我們能輕松使用GNOME文件管理器來管理ZFS自動快照服務(wù)。時(shí)間滑塊功能默認(rèn)是關(guān)閉的,可以通過系統(tǒng)-系統(tǒng)管理-時(shí)間滑塊進(jìn)行開啟和設(shè)置,如圖6 。

圖6 時(shí)間滑塊進(jìn)行開啟和設(shè)置
要查看以前的備份,打開想查看的文件夾,如果下圖中的紅線標(biāo)識的按鈕可以,說明文件的備份可用。點(diǎn)擊該按鈕,就會顯示時(shí)間滑塊。時(shí)間滑塊顯示如圖7,滑動滑快就能看到指定時(shí)間上的備份。

圖7 時(shí)間滑塊顯示
顯示以前版本的文件或目錄后,就可以通過拖拽或復(fù)制粘貼將舊版本恢復(fù)到其他目錄,也可以選中要恢復(fù)文件或文件夾,點(diǎn)擊右鍵選擇恢復(fù)到桌面。
五、使用shell腳本管理ZFS
從命令行輸入命令時(shí),每輸入一次命令,就可得到系統(tǒng)的一次響應(yīng)。當(dāng)需要經(jīng)常一個(gè)接一個(gè)地連續(xù)執(zhí)行命令,而得到最后的結(jié)果時(shí),再像這種操作方法進(jìn)行操作就顯得沒有效率了。在這種情況下,可以利用shell程序或shell腳本來實(shí)現(xiàn)這一目的。剛開始理解shell編程的時(shí)候,可以把它想像成DOS下的批處理程序。DOS離不開批處理,每一個(gè)DOS甚至是Windows都會由一個(gè)批處理文件(autoexec.bat)在它在啟動后不久運(yùn)行一連串的程序,完成為用戶服務(wù)的準(zhǔn)備工作。同樣,在Unix系統(tǒng)中,用戶也可以為每次登錄系統(tǒng)配置環(huán)境、刪除垃圾文件等,這就要用到shell編程。shell程序器其實(shí)不像批處理程序,它遠(yuǎn)比批處理要強(qiáng)大。shell編程有很多C語言和其他編程語言的特征,然而又沒有編程語言那么復(fù)雜。shell程序是通過文本編輯程序放在一個(gè)文件中的一系列Unix命令和實(shí)用程序。執(zhí)行shell程序時(shí),通過Unix一個(gè)接一個(gè)地解釋和執(zhí)行每個(gè)命令。
一位國外的資深系統(tǒng)管理員Prashant Shashikant在Sun的社區(qū)上分享了一系列管理ZFS的shell腳本組合,51CTO的讀者們可以在這里下載它們:
http://www.sun.com/bigadmin/scripts/submittedScripts/zfsufs_scripts.zip
您可以修改該腳本也可以直接使用。建立一個(gè)用戶名pilankar,并且建立一個(gè)目錄/export/home/pilankar/fs-scripts 把zip解壓縮到該目錄命令行下運(yùn)行fsadmin 腳本就可以使用。這些腳本可用于執(zhí)行以下任務(wù):
◆創(chuàng)建一個(gè)ZFS存儲池
◆添加到存儲池設(shè)備
◆創(chuàng)建一個(gè)存儲池在一個(gè)文件系統(tǒng)
◆設(shè)置配額在ZFS文件系統(tǒng)
◆創(chuàng)建一個(gè)鏡像存儲池
◆添加到設(shè)備鏡像存儲池
◆創(chuàng)建一個(gè)RAID - Z的(增強(qiáng)RAID5的)存儲池
◆添加至RAID - Z的存儲池設(shè)備
◆摧毀一個(gè)存儲池
◆確定是否問題存在于一個(gè)存儲池
◆創(chuàng)建的UFS文件系統(tǒng),并且安裝
命令行下運(yùn)行fsadmin 腳本工作界面如圖8

圖 8使用shell腳本管理ZFS
腳本的使用詳細(xì)教程可參考Prashant寫的技術(shù)文檔。
【編輯推薦】


















