輕松玩轉(zhuǎn)Solaris ZFS文件系統(tǒng)的備份恢復(fù)
原創(chuàng)【51CTO獨家特稿】在全面了解Solaris 10 ZFS文件系統(tǒng)的管理一文當中,我們對ZFS文件系統(tǒng)的特點、結(jié)構(gòu)、命令、管理等方面進行了詳細的介紹。本篇文章是之前一篇的續(xù)作,將以O(shè)penSolaris為例,介紹管理ZFS文件系統(tǒng)的不同方法。
51CTO編輯推薦:下一代Linux文件系統(tǒng)
ZFS文件系統(tǒng)的快照是一個很方便的功能,可以輕松地對系統(tǒng)進行備份、恢復(fù)而無需擔心系統(tǒng)受到修改。你可以通過命令行進行快照的創(chuàng)建、刪除和修改,也可以通過瀏覽器進行圖形化的管理。除此之外,OpenSolaris中還提供了非常方便的時間滑塊功能,而我們還可以更加方便的使用一些shell腳本組合進行批處理。
一、ZFS文件系統(tǒng)快照簡介
快照是文件系統(tǒng)或卷在給定時間點上的只讀版本。使用文件系統(tǒng)快照可以對動態(tài)文件系統(tǒng)進行聯(lián)機備份??煺杖襞c日志技術(shù)相結(jié)合,可實現(xiàn)文件系統(tǒng)的快速恢復(fù)??煺招袨轭愃朴谖募到y(tǒng)的只讀副本,反映文件系統(tǒng)在創(chuàng)建快照的時間點的狀態(tài)??煺諏τ趥浞莺妥罱K用戶能否從錯誤中恢復(fù)非常重要??蓮奈募到y(tǒng)根目錄中的 .zfs/snapshot 目錄下訪問文件系統(tǒng)快照。
用戶通常無需使用磁帶備份便可恢復(fù)意外刪除的文件,并可在開始進行風險升級或執(zhí)行其他任務(wù)前捕獲快照,以便在需要時可以回復(fù)到升級或執(zhí)行其他任務(wù)前的狀態(tài)。ZFS 允許進行回復(fù)或“回滾”,這可將文件系統(tǒng)的內(nèi)容復(fù)位到捕獲該快照時的狀態(tài)。ZFS 利用寫復(fù)制 (copy-on-write, COW) 機制來存儲數(shù)據(jù),并且?guī)缀蹩梢宰鳛閿?shù)據(jù)存儲的副效應(yīng)來生成快照。COW 在將新數(shù)據(jù)寫入磁盤前會讀入舊數(shù)據(jù)。之后,COW 會將舊數(shù)據(jù)寫入某個新位置以供快照使用。此讀取和復(fù)制數(shù)據(jù)的過程同時適用于用戶數(shù)據(jù)和文件系統(tǒng)的專用數(shù)據(jù)(元數(shù)據(jù))。任何后續(xù)寫入操作都將導(dǎo)致通過 COW 機制分配新塊,因此永遠不會修改組成快照的那些塊。
從本質(zhì)上而言,從某個備份進行恢復(fù)的步驟與從傳統(tǒng)備份恢復(fù)的步驟是一樣的:
◆重建文件系統(tǒng)。
◆恢復(fù)完整備份。
◆恢復(fù)每個增量備份。
我們也可以創(chuàng)建某個特定快照的克?。寺≈敢粋€其初始內(nèi)容與某個快照的內(nèi)容相同的文件系統(tǒng))。正如可以修改其他文件系統(tǒng)屬性一樣,可以修改克隆的屬性和內(nèi)容。
二、使用命令創(chuàng)建和刪除ZFS快照
我們使用zfs snapshot命令來創(chuàng)建快照,這個命令只有一個變量就是快照的名字??煺彰秩缦滤荆?/p>
filesystem@snapname
volume@snapname
◆創(chuàng)建快照
# zfs snapshot rpool/tank@sun
通過使用 -r 選項可為所有后代文件系統(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快照
快照可以使用下面的方法進行顯示:
# 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選項能強制刪除這些快照,而恢復(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)返回一個 6789 項,該項為用于連接到 Sun Java Web Console 的端口號。
如果希望服務(wù)器在系統(tǒng)引導(dǎo)時自動啟動,請運行以下命令:
# /usr/sbin/smcwebserver enable
如果沒有Solaris 10 安裝DVD 光盤可以訪問Oracle/Sun的官網(wǎng)(需注冊)下載Java Web Console 3.0.2 軟件包。安裝過程從略。
2 進入ZFS的管理界面
點擊zfs管理鏈接進入zfs的web管理頁面,如圖 2 。
圖2 zfs的web管理頁面
相比Solaris 10,這里只有英文界面了,對于中國用戶可能稍微有些麻煩,下面稍微說明下。
◆創(chuàng)建普通快照
包括四個部分:
a.定義快照
圖3 定義快照
說明:有效的快照名稱長度介于 1 到 256 個字符之間,并且可以包含以下字符:A-Z、a-z、0-9、.、:、_ 和 -。
b.檢查配置
圖4檢查配置
在創(chuàng)建快照之前,如果要進行更改,請在“步驟”選項卡中單擊前面的某個步驟,或單擊“上一步”按鈕在向?qū)е邢蚯皩?dǎo)航。
c.預(yù)覽要執(zhí)行的命令
在創(chuàng)建快照之前,可以預(yù)覽所要執(zhí)行的命令。
d.查看命令結(jié)果
如果出現(xiàn)命令執(zhí)行成功字樣是成功建立快照成功的標志。
◆克隆文件系統(tǒng)快照
克隆指一個其初始內(nèi)容與某個快照的內(nèi)容相同的文件系統(tǒng)。借助克隆,可對文件系統(tǒng)進行快速復(fù)制,這種方法可高效利用空間??寺∽钸m用于需要某個數(shù)據(jù)集的許多幾乎完全相同的副本的情況。例如,可能有多個系統(tǒng)映像,每個區(qū)域?qū)?yīng)一個系統(tǒng)映像。與其他文件系統(tǒng)一樣,可以修改克隆的設(shè)置和內(nèi)容??寺∥募到y(tǒng)快照同樣包括四個步驟:
定義文件系統(tǒng)克隆、檢查配置、預(yù)覽要執(zhí)行的命令、以及查看命令結(jié)果。
圖5 定義文件系統(tǒng)克隆
和之前一樣。有效的文件系統(tǒng)名稱長度介于 1 到 256 個字符之間,并且可以包含以下字符:A-Z、a-z、0-9、.、:、_ 和 -。此處還必須選擇一個現(xiàn)有文件系統(tǒng)快照,以作為新文件系統(tǒng)的基礎(chǔ)。新文件系統(tǒng)的存儲池必須和包含要克隆的快照的存儲池相同。新文件系統(tǒng)或克隆的內(nèi)容最初和它所基于的現(xiàn)有文件系統(tǒng)快照相同。第2-4個步驟與之前一樣,此處不再贅述。
#p#
四、ZFS自動快照服務(wù)的管理:時間滑塊
OpenSolaris在ZFS自動快照服務(wù)之上引進了時間滑塊服務(wù),并將這些功能整合進GNOME桌面環(huán)境。這些創(chuàng)新使得我們能輕松使用GNOME文件管理器來管理ZFS自動快照服務(wù)。時間滑塊功能默認是關(guān)閉的,可以通過系統(tǒng)-系統(tǒng)管理-時間滑塊進行開啟和設(shè)置,如圖6 。
圖6 時間滑塊進行開啟和設(shè)置
要查看以前的備份,打開想查看的文件夾,如果下圖中的紅線標識的按鈕可以,說明文件的備份可用。點擊該按鈕,就會顯示時間滑塊。時間滑塊顯示如圖7,滑動滑快就能看到指定時間上的備份。
圖7 時間滑塊顯示
顯示以前版本的文件或目錄后,就可以通過拖拽或復(fù)制粘貼將舊版本恢復(fù)到其他目錄,也可以選中要恢復(fù)文件或文件夾,點擊右鍵選擇恢復(fù)到桌面。
五、使用shell腳本管理ZFS
從命令行輸入命令時,每輸入一次命令,就可得到系統(tǒng)的一次響應(yīng)。當需要經(jīng)常一個接一個地連續(xù)執(zhí)行命令,而得到最后的結(jié)果時,再像這種操作方法進行操作就顯得沒有效率了。在這種情況下,可以利用shell程序或shell腳本來實現(xiàn)這一目的。剛開始理解shell編程的時候,可以把它想像成DOS下的批處理程序。DOS離不開批處理,每一個DOS甚至是Windows都會由一個批處理文件(autoexec.bat)在它在啟動后不久運行一連串的程序,完成為用戶服務(wù)的準備工作。同樣,在Unix系統(tǒng)中,用戶也可以為每次登錄系統(tǒng)配置環(huán)境、刪除垃圾文件等,這就要用到shell編程。shell程序器其實不像批處理程序,它遠比批處理要強大。shell編程有很多C語言和其他編程語言的特征,然而又沒有編程語言那么復(fù)雜。shell程序是通過文本編輯程序放在一個文件中的一系列Unix命令和實用程序。執(zhí)行shell程序時,通過Unix一個接一個地解釋和執(zhí)行每個命令。
一位國外的資深系統(tǒng)管理員Prashant Shashikant在Sun的社區(qū)上分享了一系列管理ZFS的shell腳本組合,51CTO的讀者們可以在這里下載它們:
http://www.sun.com/bigadmin/scripts/submittedScripts/zfsufs_scripts.zip
您可以修改該腳本也可以直接使用。建立一個用戶名pilankar
,并且建立一個目錄/export/home/pilankar/fs-scripts 把zip解壓縮到該目錄
命令行下運行fsadmin
腳本就可以使用。這些腳本可用于執(zhí)行以下任務(wù):
◆創(chuàng)建一個ZFS存儲池
◆添加到存儲池設(shè)備
◆創(chuàng)建一個存儲池在一個文件系統(tǒng)
◆設(shè)置配額在ZFS文件系統(tǒng)
◆創(chuàng)建一個鏡像存儲池
◆添加到設(shè)備鏡像存儲池
◆創(chuàng)建一個RAID - Z的(增強RAID5的)存儲池
◆添加至RAID - Z的存儲池設(shè)備
◆摧毀一個存儲池
◆確定是否問題存在于一個存儲池
◆創(chuàng)建的UFS文件系統(tǒng),并且安裝
命令行下運行fsadmin
腳本工作界面如圖8
圖 8使用shell腳本管理ZFS
腳本的使用詳細教程可參考Prashant寫的技術(shù)文檔。
【編輯推薦】