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