• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      ZFS文件系統(tǒng)Snapshot技術(shù)的分析

      2009-08-28 09:09:14倪琴琴孫衛(wèi)真
      計算機(jī)教育 2009年14期
      關(guān)鍵詞:快照

      倪琴琴 孫衛(wèi)真 劉 崢

      摘要:快照是一種重要的存儲數(shù)據(jù)的技術(shù),可以在不停止應(yīng)用程序的情況下對數(shù)據(jù)進(jìn)行備份。本文對Solaris平臺下的ZFS文件系統(tǒng)中的快照技術(shù)進(jìn)行了分析,介紹了快照的工作原理、實現(xiàn)技術(shù)及數(shù)據(jù)結(jié)構(gòu),并在ZFS中進(jìn)行快照創(chuàng)建、數(shù)據(jù)恢復(fù)的實例分析,結(jié)果表明ZFS文件系統(tǒng)中的快照技術(shù)能避免數(shù)據(jù)的丟失,可以有效地保護(hù)該系統(tǒng)下的數(shù)據(jù),并且在操作系統(tǒng)的實驗教學(xué)中對文件系統(tǒng)的分析具有較大的實踐意義。

      關(guān)鍵詞:快照;Copy-on-Write;ZFS;Solaris

      中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B

      1引言

      隨著計算機(jī)技術(shù)在各個領(lǐng)域的廣泛應(yīng)用,信息量迅速增長,越來越多的單位、公司以及個人對計算機(jī)數(shù)據(jù)的依賴性逐步增強(qiáng),數(shù)據(jù)的損壞或者丟失將對用戶造成不可彌補(bǔ)的損失。為保護(hù)重要數(shù)據(jù),用戶不得不頻繁地備份數(shù)據(jù)。傳統(tǒng)的數(shù)據(jù)備份是冷備份,需要停止系統(tǒng)運(yùn)行才能進(jìn)行,在備份期間,無法進(jìn)行正常的數(shù)據(jù)訪問。但對于許多關(guān)鍵性的應(yīng)用環(huán)境,如電子商務(wù)系統(tǒng)或者銀行系統(tǒng)等,系統(tǒng)需要連續(xù)不斷地運(yùn)轉(zhuǎn),停機(jī)就意味著業(yè)務(wù)的停頓和商業(yè)機(jī)會的丟失,停止系統(tǒng)來進(jìn)行數(shù)據(jù)備份就會造成難以估量的損失。因此,如何在系統(tǒng)運(yùn)行期間對系統(tǒng)數(shù)據(jù)進(jìn)行備份,并保證數(shù)據(jù)版本的一致性就變得尤為重要。Snapshot技術(shù)正是為了解決該問題提出的。Snapshot能在不停止應(yīng)用程序的情況下生成某一瞬間的數(shù)據(jù)映像,用戶可以對該數(shù)據(jù)映像進(jìn)行保存?zhèn)浞?當(dāng)系統(tǒng)出現(xiàn)問題或者數(shù)據(jù)丟失時,用戶可以安全方便地獲得快照創(chuàng)建時刻的數(shù)據(jù)映像。

      2Snapshot技術(shù)介紹

      Snapshot也稱為快照,是本地保留的按時間點保存的數(shù)據(jù)映像。產(chǎn)生一個文件系的Snapshot,并不是對所有數(shù)據(jù)塊進(jìn)行拷貝,只是對文件系統(tǒng)當(dāng)前點的信息記錄。快照不能被直接訪問,但是可以對它們執(zhí)行克隆、備份、回滾等操作,通過這些操作,系統(tǒng)可以有效地保護(hù)數(shù)據(jù)。

      Snapshot技術(shù)的實現(xiàn)方式目前有兩種:即寫即拷(Copy-on-Write)方式和分割鏡像(Split-Mirror)方式。Snapshot需要建立一個完整一致的映像,為了保證這一點,必須在某個特定的時刻完成全部數(shù)據(jù)的拷貝,通常這種拷貝不可能在一瞬間完成的。實際上在進(jìn)行Snapshot操作時,并不是對所有的數(shù)據(jù)進(jìn)行完全復(fù)制,而是使用Copy-on-Write技術(shù)或者Split-Mirror方式。建立一個Snapshot只需要極少的工作,在極短的時間內(nèi)完成即可。

      Copy-on-Write技術(shù)可以在每次輸入新數(shù)據(jù)或已有數(shù)據(jù)被更新時生成對存儲數(shù)據(jù)改動的Snapshot,這樣做可以在發(fā)生硬盤寫錯誤、文件損壞或程序故障時迅速恢復(fù)數(shù)據(jù)。但是,如果需要對網(wǎng)絡(luò)或存儲媒介上的所有數(shù)據(jù)進(jìn)行完全的存檔或恢復(fù)時,所有以前的快照都必須可供使用。Copy-on-Write方式通常也被稱為“元數(shù)據(jù)”拷貝,即所有的數(shù)據(jù)并沒有被真正拷貝到另一個位置,只是指示數(shù)據(jù)所處位置指針被拷貝,從而使得實際用于保存Snapshot所需要的空間大大減少。

      Split-Mirror快照引用鏡像硬盤組上所有數(shù)據(jù)。每次引用運(yùn)行時,都生成整個卷的Snapshot,而不只是新數(shù)據(jù)或更新的數(shù)據(jù)。這種方式使離線訪問數(shù)據(jù)成為可能,并且簡化了恢復(fù)、復(fù)制或存檔一塊硬盤上的所有數(shù)據(jù)的過程。但是,這是個較慢的過程,而且每個快照需要占用更多的存儲空間。

      3ZFS系統(tǒng)中Snapshot的實現(xiàn)分析

      3.1ZFS中Snapshot的工作原理

      ZFS是Solaris系統(tǒng)上一個全新的文件系統(tǒng),它完全拋棄了傳統(tǒng)的文件系統(tǒng)+卷管理+存儲的架構(gòu),所有的存儲設(shè)備通過ZFS Pool進(jìn)行管理,通過把各種存儲設(shè)備加入同一個ZFS Pool,可以輕松地在ZFS Pool文件系統(tǒng)下工作。Solaris ZFS文件系統(tǒng)通過快照可避免刪除數(shù)據(jù)時出現(xiàn)意外丟失,也可以通過適當(dāng)權(quán)限把文件系統(tǒng)中的所有文件移動到遠(yuǎn)程系統(tǒng),以節(jié)省本地ZFS系統(tǒng)空間。ZFS通過使用Copy-on-Write的方式提供Snapshot功能,ZFS下的Snapshot為系統(tǒng)提供了更安全有效的數(shù)據(jù)保護(hù)方式,其工作原理如圖1所示。

      圖1(b)是對圖1(a)所示的活動的文件系統(tǒng)得一個Snapshot。在創(chuàng)建一個新的Snapshot映像時,系統(tǒng)僅僅簡單地復(fù)制一個根節(jié)點,新的Snapshot節(jié)點與原始的根節(jié)點指向完全相同的數(shù)據(jù)塊,如圖1(b)所示。一段時間后,如果文件系統(tǒng)發(fā)生變化,如刪除了一個文件時,在活動的文件系統(tǒng)中,此文件已經(jīng)丟失,但在磁盤上并沒有真正刪除此文件,Snapshot中仍然記錄此文件的信息,圖1(c)所示。也就是說,通過Snapshot仍然可以找到該文件。而修改文件系統(tǒng)中的某個數(shù)據(jù)塊時,系統(tǒng)在修改前復(fù)制該數(shù)據(jù)塊,然后修改根節(jié)點的相關(guān)數(shù)據(jù)的同時,對復(fù)制塊數(shù)據(jù)進(jìn)行修改。這樣,僅僅那些修改了的數(shù)據(jù)塊才需要進(jìn)行復(fù)制,不僅提高了復(fù)制效率,也提高了系統(tǒng)磁盤空間的利用率。需要備份時,從Snapshot根節(jié)點開始,可以讀取到該時間點的完整的存儲系統(tǒng)映像。而實際的操作仍從根節(jié)點開始,這樣可以正確地訪問到最新的數(shù)據(jù)。

      3.2Snapshot結(jié)構(gòu)分析

      ZFS文件系統(tǒng)的Snapshot是文件系統(tǒng)的只讀副本。Snapshot幾乎可以即時創(chuàng)建,而且最初不占用池中的其他磁盤空間。但是當(dāng)活動數(shù)據(jù)集中的數(shù)據(jù)發(fā)生更改時,Snapshot通過繼續(xù)引用數(shù)據(jù)占用磁盤空間,從而阻止釋放該空間。ZFS Snapshot的特征有以下幾點:

      ? 在系統(tǒng)重新引導(dǎo)前后保持不變;

      ? 用戶理論上可以創(chuàng)建的最大快照數(shù)為264,且可以根據(jù)用戶需求為Snapshot重命名;

      ? 不使用單獨的后備存儲,Snapshot直接占用存儲池(從中創(chuàng)建這些快照的文件系統(tǒng)所在的存儲池)中的磁盤空間。

      文件系統(tǒng)中的Snapshot的存在不會影響系統(tǒng)的效率,ZFS中Snapshot的實現(xiàn)主要是在ZFS的DSL(Dataset and Snapshot Layer)層。

      ZFS文件系統(tǒng)在磁盤上可以被描繪成包含諸多葉子節(jié)點樹形結(jié)構(gòu),葉子節(jié)點包含數(shù)據(jù)和含有元數(shù)據(jù)的內(nèi)部數(shù)據(jù)塊,數(shù)據(jù)塊為dnode_phys類型。在該文件系統(tǒng)中,修改磁盤上的一個數(shù)據(jù)塊,并不是直接覆蓋磁盤上的原始數(shù)據(jù)塊,而是創(chuàng)建一個新的數(shù)據(jù)塊。然后通過修改數(shù)據(jù)塊父節(jié)點的指針,使其指向新數(shù)據(jù)塊的內(nèi)容。通過持續(xù)該操作,直到到達(dá)文件系統(tǒng)的根節(jié)點,來實現(xiàn)數(shù)據(jù)的更新,如圖2所示。

      Snapshot也是一種數(shù)據(jù)塊類型,在ZFS中用dsl_dataset_ phys結(jié)構(gòu)描述。ZFS為維護(hù)Snapshot技術(shù)主要維護(hù)兩種數(shù)據(jù)結(jié)構(gòu): blkptr結(jié)構(gòu)體,其中的blk_birth記錄每個數(shù)據(jù)塊創(chuàng)建的時間;dsl_dataset_phys結(jié)構(gòu)體,維護(hù)每個文件系統(tǒng)的“dead”數(shù)據(jù)塊列表和Snapshot結(jié)構(gòu),各數(shù)據(jù)結(jié)構(gòu)的內(nèi)部關(guān)系如圖3所示。dsl_dataset_phys通過dsl_dataset指針鏈接到dsl目錄中,由dsl目錄結(jié)構(gòu)維護(hù)整個文件系統(tǒng)中Snapshot以及數(shù)據(jù)集的關(guān)系;blkptr結(jié)構(gòu)體記錄每個數(shù)據(jù)塊創(chuàng)建的時間,并通過blk_dva所保存的128位虛地址指向具體的數(shù)據(jù)塊結(jié)構(gòu)。

      系統(tǒng)通過dsl_dataset_snapshot_sync()執(zhí)行創(chuàng)建快照的功能。創(chuàng)建快照時,會生成一個新的dsl_dataset_phys節(jié)點,并將該節(jié)點加入到dsl目錄中。新的快照節(jié)點的與當(dāng)前的文件系統(tǒng)根節(jié)點指向相同的數(shù)據(jù)集。當(dāng)文件系統(tǒng)的數(shù)據(jù)被修改時,如刪除某個數(shù)據(jù)塊時,需要判斷該數(shù)據(jù)塊是否可以被完全釋放。此時系統(tǒng)調(diào)用dsl_dataset_block_born()來進(jìn)行判斷,通過比較該數(shù)據(jù)塊的創(chuàng)建時間(blk_birth)與文件系統(tǒng)中所有的Snapshot的創(chuàng)建時間,如果數(shù)據(jù)塊是在Snapshot之前創(chuàng)建,該數(shù)據(jù)塊不能被釋放,而是將其加入到文件系統(tǒng)的dead list中;如果數(shù)據(jù)塊是在Snapshot之后創(chuàng)建的,則必須釋放該數(shù)據(jù)塊。通過該方法,當(dāng)文件系統(tǒng)回滾到Snapshot創(chuàng)建點時,文件系統(tǒng)才能找回創(chuàng)建點的所有數(shù)據(jù)。當(dāng)Snapshot被刪除時,系統(tǒng)調(diào)用dsl_dataset_destroy_sync()函數(shù),并在該函數(shù)中決定哪些數(shù)據(jù)塊需被釋放,并以此維護(hù)文件系統(tǒng)的dead list。

      3.3Snapshot實例

      在ZFS文件系統(tǒng)中,Snapshot的創(chuàng)建可以隨時進(jìn)行,當(dāng)用戶為文件系統(tǒng)創(chuàng)建一個新的Snapshot時,它的初始大小為0KB。如圖4所示,為文件系統(tǒng)fs001創(chuàng)建快照fs_snapshot01,其初始大小為0。因為新創(chuàng)建Snapshot時,沒有進(jìn)行數(shù)據(jù)更新,系統(tǒng)只是創(chuàng)建了一個Snapshot節(jié)點指向文件系統(tǒng)的數(shù)據(jù)塊。

      當(dāng)進(jìn)行文件更新時,如在fs001文件系統(tǒng)中創(chuàng)建了一個新的文件test002.txt,并刪除原來的test001.txt文件,此時再觀察fs_snapshot01,其大小已經(jīng)變?yōu)?8.5K,而在文件系統(tǒng)fs001中已經(jīng)找不到文件test001.txt(圖5所示)。

      為觀察Snapshot是否保存有test001.txt文件,我們通過mdb進(jìn)入系統(tǒng)內(nèi)核,查看ZFS文件系統(tǒng)的信息。從mdb中可以看到為fs001文件系統(tǒng)創(chuàng)建的Snapshot路徑的信息,命令如下所示:

      #mdb –k /*進(jìn)入mdb*/

      >::walk vfs |::fsinfo –v !grep zfs/*查看名為zfs的文件信息*/

      fffffffffbacad650zfs /

      ffffff00c9cd8690zfs /rpool

      ffffff0e84c679c0zfs /rpool/fs001

      ffffff00d5c7f358 zfs/rpool/fs001/.zfs/snapshot/fs_snapshot01

      從圖6可以看出,進(jìn)入/rpool/fs001/.zfs/snapshot/fs_ snapshot01文件夾,可以看到,在該文件夾中保存有fs_snapshot01創(chuàng)建時fs001文件中完全相同的數(shù)據(jù)信息。創(chuàng)建文件系統(tǒng)的快照時,每個文件系統(tǒng)會在自身的根目錄下創(chuàng)建.zfs/snapshot的文件夾,該系統(tǒng)的所有快照信息數(shù)據(jù)均被保存在這個目錄下。創(chuàng)建Snapshot后,對文件系統(tǒng)中的數(shù)據(jù)進(jìn)行修改或刪除,并沒有真正地從磁盤上刪掉修改或刪除的文件,只是改變了文件系統(tǒng)數(shù)據(jù)塊的指針指向,原始的數(shù)據(jù)仍然保存在磁盤上,而通過快照回滾,仍然可以找回快照創(chuàng)建點的數(shù)據(jù)。通過Snapshot可以避免因不正當(dāng)操作誤刪數(shù)據(jù)等,能有效地保護(hù)系統(tǒng)的數(shù)據(jù)。

      5結(jié)束語

      本文主要分析了Solaris平臺下ZFS文件系統(tǒng)中Snapshot技術(shù),詳細(xì)闡述了在ZFS系統(tǒng)中Snapshot的工作原理,主要功能及數(shù)據(jù)結(jié)構(gòu),并通過具體的實例分析了Snapshot保護(hù)數(shù)據(jù)的有效性。Snapshot技術(shù)提供了一種高效的地址映射機(jī)制,使得用戶在不停止應(yīng)用程序的前提下,利用較小的空間保護(hù)數(shù)據(jù),具有極大的靈活性和廣泛的應(yīng)用性。由于Solaris系統(tǒng)使用的廣泛,該平臺下基于ZFS的Snapshot技術(shù)也會有廣闊的應(yīng)用前景。

      快照技術(shù)在我校操作系統(tǒng)分析與實踐的課程中作為文件系統(tǒng)的實驗課題,對學(xué)生的實踐教學(xué)具有實際意義。它不僅在教學(xué)過程中引入了OS新技術(shù),也加深學(xué)生對文件與IO系統(tǒng)的理解,為后續(xù)“UNIX高級編程技術(shù)”和“系統(tǒng)編程技術(shù)”課程的學(xué)習(xí)提供了前導(dǎo)幫助。近二年的實踐課程和學(xué)生報告表明,利用Solaris操作系統(tǒng)中的新技術(shù)(例如Snapshot等),對促進(jìn)和提高OS的教學(xué)具有較現(xiàn)實的意義。

      參考文獻(xiàn):

      [1] 董歡慶,李戰(zhàn)懷,王彥龍,等. Linux卷管理系統(tǒng)Snapshot技術(shù)的分析與研究[J]. 計算機(jī)工程,2004,30(2):55-57.

      [2] 胡風(fēng)華,游智勇, 李恪. 存儲系統(tǒng)中Snapshot技術(shù)研究[J]. 計算機(jī)工程,2004(01):103-105.

      [3] Ahrens. Snapshot, is it magic?[EB/OL]. [2009-04-10]. http://blogs.sun.com/ahrens/entry/is_it_magic.

      [4] Richard McDougall. Solaris內(nèi)核結(jié)構(gòu) [M]. 2版.北京:機(jī)械工業(yè)出版社,2007.

      [5] BigAdmin. ZFS源代碼概覽[EB/OL]. [2009-04-05]. http://www.sun.com/bigadmin/hubs/ multilingual/simp_chinese/content/ zfs-source.jsp.

      [6] 呂爍,羅宇. 基于設(shè)備的容災(zāi)備份方案的研究[J]. 計算機(jī)工程與科學(xué),2007(04):142-145.

      [7] 李曉林. 存儲網(wǎng)格面面觀[J]. 計算機(jī)教育,2004(11):30-32.

      猜你喜歡
      快照
      面向Linux 非邏輯卷塊設(shè)備的快照系統(tǒng)①
      在青春的賽道上奮力奔跑——中國石化十大杰出青年崗位能手快照
      中國石化(2022年5期)2022-06-10 06:39:24
      弘揚(yáng)勞動精神 再立新功再創(chuàng)佳績——中國石化全國五一勞動獎?wù)芦@得者快照
      中國石化(2022年5期)2022-06-10 06:39:20
      EMC存儲快照功能分析
      天津科技(2022年5期)2022-05-31 02:18:08
      巧破困局,快速恢復(fù)本本活力
      應(yīng)用Hbase快照機(jī)制
      一種基于Linux 標(biāo)準(zhǔn)分區(qū)的快照方法
      創(chuàng)建磁盤組備份快照
      讓時間停止 保留網(wǎng)頁游戲進(jìn)度
      電腦愛好者(2015年4期)2015-09-10 16:25:51
      數(shù)據(jù)恢復(fù)的快照策略
      酒泉市| 祁阳县| 吉安县| 梅州市| 思南县| 凉山| 枣强县| 拜泉县| 新干县| 阳曲县| 怀仁县| 武强县| 华阴市| 和田县| 白沙| 阿合奇县| 文化| 金塔县| 许昌市| 勃利县| 麻阳| 庄浪县| 杨浦区| 任丘市| 澄江县| 色达县| 浏阳市| 临清市| 商都县| 福贡县| 黄冈市| 浮山县| 色达县| 娱乐| 凯里市| 全南县| 高密市| 鄯善县| 莲花县| 金秀| 延安市|