国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > 綜合 > 正文

高級(jí)文件系統(tǒng)實(shí)現(xiàn)者指南

2024-07-21 02:37:35
字體:
供稿:網(wǎng)友

  日志和 ReiserFS
  Daniel Robbins (drobbins@gentoo.org)
  總裁/CEO,Gentoo Technologies, Inc
  2001 年 6 月
  
  伴隨著 linux 2.4 版本的發(fā)行,出現(xiàn)了大量的文件系統(tǒng)可能性,其中包括 ReiserFS、XFS、GFS 和其它文件系統(tǒng)。這些文件系統(tǒng)聽起來的確都很酷,但是它們真正能做些什么呢,擅長(zhǎng)在哪些方面,以及在 Linux 產(chǎn)品環(huán)境下如何才能安全地使用它們呢?在高級(jí)文件系統(tǒng)實(shí)現(xiàn)者指南中,Daniel Robbins 通過向您展示如何在 Linux 2.4 的環(huán)境下建立這些新的高級(jí)文件系統(tǒng)往返答以上的問題。遵從這個(gè)方法,他提供了在實(shí)際實(shí)現(xiàn)過程中的有價(jià)值的建議,性能信息和重要的技術(shù)性注重要點(diǎn),以便于您在新的文件系統(tǒng)中能有令人愉快的經(jīng)歷。在這里,也就是這個(gè)系列的第一篇文章中,他解說了日志和 ReiserFS 的優(yōu)點(diǎn)。
  預(yù)備好的內(nèi)容
  這一系列文章的目的是向您詳實(shí)地介紹 Linux 的各種新的文件系統(tǒng),包括 ReiserFS、XFS、JFS、GFS、ext3 和其它的文件系統(tǒng)。我要讓您知道一些必要的實(shí)用知識(shí),有了這些知識(shí)您才能開始使用這些文件系統(tǒng)。我的目標(biāo)是幫助您盡可能地避免潛在的隱患;這就是說,我們將仔細(xì)地了解一下文件系統(tǒng)的穩(wěn)定性、性能問題(或好或差)、您應(yīng)該知道的任何的負(fù)面應(yīng)用程序交互作用、內(nèi)核與補(bǔ)丁的最佳搭配以及更多內(nèi)容。您可以把這一系列的文章看成是這些下一代文件系統(tǒng)的“內(nèi)幕指南”。
  
  這就是預(yù)備好的內(nèi)容。但是要開始這一系列工作,我還有一篇文章要脫離這個(gè)主題,用來為接下來的行程做預(yù)備。我將會(huì)涉及兩個(gè)對(duì)于 Linux 開發(fā)社區(qū)非常重要的主題 — 日志和 ReiserFS 后的設(shè)計(jì)理念。日志是非常重要的,因?yàn)樗俏覀冮L(zhǎng)期以來一直期待的技術(shù),而現(xiàn)在終于出現(xiàn)了。在 ReiserFS、XFS、JFS、ext3 和 GFS 中都用到它。確切地理解日志是做什么的和為什么 Linux 需要它是非常重要的。即使您對(duì)日志已有所把握,我還是希望我有關(guān)日志的介紹可以成為一個(gè)好的模型,以用來向其他人解釋這項(xiàng)技術(shù),或者作為一項(xiàng)慣例,以利于全世界的部門和組織開始向這些新的日志文件系統(tǒng)進(jìn)行轉(zhuǎn)變。這個(gè)過程通常是由“Linux guy/gal”開始的,就像您自己也會(huì)說服其他人應(yīng)該這么做。
  
  在這篇文章的后半部分,我們將看看 ReiserFS 后的設(shè)計(jì)理念。通過這么做,我們能夠很好地把握一個(gè)事實(shí),那就是這些新的文件系統(tǒng)并不只是為了做同樣的事比老的系統(tǒng)快一點(diǎn)。它們還答應(yīng)我們用以前完全不可能的方法來處理事情。開發(fā)人員在閱讀這一系列文章時(shí)應(yīng)該牢記這一點(diǎn)。這些新的文件系統(tǒng)的能力將很可能對(duì)您今后的 Linux 軟件開發(fā)工程的代碼編寫產(chǎn)生影響。
  
  理解日志:元數(shù)據(jù)
  正如您所了解的那樣,文件系統(tǒng)的存在答應(yīng)您儲(chǔ)存、檢索和操作數(shù)據(jù)。為了實(shí)現(xiàn)這一目的,文件系統(tǒng)需要保持一個(gè)內(nèi)在的數(shù)據(jù)結(jié)構(gòu)使得您的數(shù)據(jù)有組織并且便于訪問。這一內(nèi)部的數(shù)據(jù)結(jié)構(gòu)(確切地說就是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”)被稱為元數(shù)據(jù)。就是這個(gè)元數(shù)據(jù)的結(jié)構(gòu)為文件系統(tǒng)提供了其特定的身份和性能特征。
  
  通常,我們并不直接和文件系統(tǒng)的元數(shù)據(jù)打交道。而是一個(gè)非凡的 Linux 文件系統(tǒng)驅(qū)動(dòng)程序?yàn)槲覀冏飨鄳?yīng)的工作。Linux 文件系統(tǒng)驅(qū)動(dòng)程序是專門用來操作復(fù)雜的元數(shù)據(jù)的。然而,為了使得文件系統(tǒng)驅(qū)動(dòng)程序正常工作,有一個(gè)很重要的必要條件;它需要在某種合理的、一致的和沒有干擾的狀態(tài)下找到元數(shù)據(jù)。否則,文件系統(tǒng)驅(qū)動(dòng)程序就不能理解和操作元數(shù)據(jù),那么您也就不能存取文件了。
  
  理解日志:fsck
  這就引出了 fsck。當(dāng) Linux 系統(tǒng)啟動(dòng)時(shí),fsck 啟動(dòng)并掃描系統(tǒng)的 /etc/fstab 文件中列出的所有本地文件系統(tǒng)。fsck 的工作就是確保要裝載的文件系統(tǒng)的元數(shù)據(jù)是處于可使用的狀態(tài)。大多數(shù)的時(shí)候是可使用的。當(dāng) Linux 關(guān)閉時(shí),它仔細(xì)地把所有的緩沖區(qū)數(shù)據(jù)轉(zhuǎn)送到磁盤,并確保文件系統(tǒng)被徹底卸載,以保證系統(tǒng)再次啟動(dòng)時(shí)能夠使用。典型的就是,fsck 掃描那些將被裝載的文件系統(tǒng),確定它們已被徹底卸載,并做出合理的假設(shè) — 所有的元數(shù)據(jù)都沒有問題。
  
  然而,我們都知道不時(shí)地會(huì)有一些意外發(fā)生,例如意想不到的電源故障或者系統(tǒng)掛起。當(dāng)出現(xiàn)這些不幸的情況時(shí),Linux 沒有機(jī)會(huì)徹底卸載文件系統(tǒng)。當(dāng)系統(tǒng)重新啟動(dòng),fsck 開始掃描時(shí),它會(huì)檢測(cè)到這些沒有徹底卸載的文件系統(tǒng),并做出合理的假設(shè) — 文件系統(tǒng)可能沒有為 Linux 文件系統(tǒng)驅(qū)動(dòng)程序預(yù)備好。這就很有可能導(dǎo)致元數(shù)據(jù)在某種情況下陷入困境。
  
  所以,為了彌補(bǔ)這種情況,fsck 將開始徹底的掃描并且全面地檢查元數(shù)據(jù),修正這一過程中找到的任何錯(cuò)誤。一旦 fsck 完成這樣的工作,文件系統(tǒng)就可以使用了。盡管意想不到的電源故障或者系統(tǒng)掛起可能造成最近修改的數(shù)據(jù)丟失,但是由于元數(shù)據(jù)現(xiàn)在是一致的,文件系統(tǒng)就可以被裝載和投入使用了。
  
  fsck 的問題
  迄今為止,為確保文件系統(tǒng)的一致性,這種方法可能聽起來并不是個(gè)壞主意,但是卻不是最佳的解決方案。
問題出自于這樣一個(gè)事實(shí) — fsck 必須掃描文件系統(tǒng)全部的元數(shù)據(jù),以確保文件系統(tǒng)的一致性。對(duì)所有的元數(shù)據(jù)做徹底的一致性檢查是一項(xiàng)極為費(fèi)時(shí)的工作。通常至少要花上好幾分鐘才能完成。更糟糕的是,文件系統(tǒng)越大,完成這個(gè)徹底的掃描所花費(fèi)的時(shí)間就越長(zhǎng)。這就是個(gè)大問題,因?yàn)楫?dāng) fsck 做它自己事情的時(shí)候,您的 Linux 系統(tǒng)實(shí)際上就是被切斷的,并且假如您有一個(gè)龐大數(shù)量的文件系統(tǒng)存儲(chǔ),您的系統(tǒng)可能就會(huì)花上半個(gè)小時(shí)或者更長(zhǎng)的時(shí)間來執(zhí)行 fsck。當(dāng)然,在任務(wù)緊要的數(shù)據(jù)中心的環(huán)境里,也就是在系統(tǒng)正常運(yùn)行極為重要的環(huán)境下,標(biāo)準(zhǔn)的 fsck 工作可能會(huì)造成破壞性的結(jié)果。幸運(yùn)的是,有更好的解決方案。
  
  日志
  日志文件系統(tǒng)通過增加一個(gè)叫做日志的新的數(shù)據(jù)結(jié)構(gòu)來解決這個(gè) fsck 問題。這個(gè)日志是位于磁盤上的結(jié)構(gòu)。在對(duì)元數(shù)據(jù)做任何改變以前,文件系統(tǒng)驅(qū)動(dòng)程序會(huì)向日志中寫入一個(gè)條目,這個(gè)條目描述了它將要做些什么。然后,它繼續(xù)并修改元數(shù)據(jù)。通過這種方法,日志文件系統(tǒng)就擁有了近期元數(shù)據(jù)被修改的歷史記錄,當(dāng)檢查到?jīng)]有徹底卸載的文件系統(tǒng)的一致性問題時(shí),這個(gè)記錄就唾手可得了。
  
  可以這樣來看待日志文件系統(tǒng) — 除了存儲(chǔ)數(shù)據(jù)(您的素材)和元數(shù)據(jù)(關(guān)于素材的數(shù)據(jù))以外,它們還有一個(gè)日志。您可以稱它們?yōu)樵獢?shù)據(jù)(關(guān)于素材數(shù)據(jù)的數(shù)據(jù))。
  
  運(yùn)作中的日志
  那么,fsck 如何處理日志文件系統(tǒng)呢?實(shí)際上,通常它什么都不做。它只是忽略文件系統(tǒng)并答應(yīng)它被裝載。在快速地恢復(fù)文件系統(tǒng)到達(dá)一致性狀態(tài)的背后,真正起作用的在于 Linux 文件系統(tǒng)驅(qū)動(dòng)程序中。當(dāng)文件系統(tǒng)被裝載時(shí),Linux 文件系統(tǒng)驅(qū)動(dòng)程序查看文件系統(tǒng)是否完好。假如由于某些原因出了問題,那么就需要對(duì)元數(shù)據(jù)進(jìn)行修復(fù),但不是執(zhí)行對(duì)元數(shù)據(jù)的徹底掃描(就像 fsck 那樣),而是查看日志。由于日志中包含了按時(shí)間順序排列的近期的元數(shù)據(jù)修改記錄,它就簡(jiǎn)單地查看最近被修改的那部分元數(shù)據(jù)。因而,它能夠在幾秒鐘時(shí)間內(nèi)將文件系統(tǒng)恢復(fù)到一致性狀態(tài)。并且與 fsck 所采用的傳統(tǒng)方法不同,這個(gè)日志重放過程在大型的文件系統(tǒng)上并不需要花更多的時(shí)間。多虧了日志,數(shù)百 G 的文件系統(tǒng)元數(shù)據(jù)幾乎能在瞬間恢復(fù)到一致性的狀態(tài)。
  
  ReiserFS
  現(xiàn)在,我們來談一談 ReiserFS,它是我們將要研究的幾個(gè)日志文件系統(tǒng)中的第一個(gè)。ReiserFS 3.6.x(作為 Linux 2.4 一部分的版本)是由 Hans Reiser 和他的在 Namesys 的開發(fā)組共同開發(fā)設(shè)計(jì)的。Hans 和他的組員們相信最好的文件系統(tǒng)是那些能夠有助于創(chuàng)建獨(dú)立的共享環(huán)境或者命名空間的文件系統(tǒng),應(yīng)用程序可以在其中更直接、有效和有力地相互作用。為了實(shí)現(xiàn)這一目標(biāo),文件系統(tǒng)就應(yīng)該滿足其使用者對(duì)性能和功能方面的需要。那樣,使用者就能夠繼續(xù)直接地使用文件系統(tǒng),而不必建造運(yùn)行在文件系統(tǒng)之上(如數(shù)據(jù)庫(kù)之類)的非凡目的層。
  
  小文件的性能
  那么,如何能使文件系統(tǒng)更加適應(yīng)環(huán)境呢?Namesys 已經(jīng)決定著眼于文件系統(tǒng)的一個(gè)方面,至少最初是 — 小文件的性能。通常,像 ext2 和 ufs 這樣的文件系統(tǒng)在這一方面做的并不是很好,經(jīng)常迫使開發(fā)人員轉(zhuǎn)向數(shù)據(jù)庫(kù)或者非凡組織的處理來獲取他們所需要的某種性能。隨著時(shí)間的推移,這種“圍繞問題進(jìn)行編碼”的方法慫恿了代碼的膨脹和許多不兼容的非凡目的 API,這并不是好事情。
  
  這兒有一個(gè) ext2 如何鼓勵(lì)這種編程的例子。ext2 很擅長(zhǎng)存儲(chǔ)大量大小在 20k 以上的文件,但是對(duì)于存儲(chǔ) 2,000 個(gè) 50 字節(jié)的文件來說,它就不是一種很理想的技術(shù)了。當(dāng) ext2 必須處理非常小的文件時(shí),不只是性能顯著地下降,而且存儲(chǔ)效率也同樣下降,因?yàn)?ext2 是按 1k 或者 4k 的塊來分配空間的(可在文件系統(tǒng)創(chuàng)建時(shí)設(shè)定)。
  
  現(xiàn)在,常規(guī)的明智做法會(huì)提示您不應(yīng)該在文件系統(tǒng)上儲(chǔ)存這么多小的文件。而是應(yīng)該存儲(chǔ)在某種運(yùn)行在文件系統(tǒng)之上的數(shù)據(jù)庫(kù)里。作為對(duì)這種說法的回應(yīng),Hans Reiser 指出無(wú)論何時(shí)您需要在文件系統(tǒng)的頂上建立一層,那就意味著文件系統(tǒng)不滿足您的需要。假如文件系統(tǒng)滿足您的需要,那么您首先就要避免使用非凡目的的解決方案。這樣就可以節(jié)省開發(fā)的時(shí)間,并消除代碼膨脹。這些代碼可能是在您手動(dòng)處理自己的個(gè)人存儲(chǔ)器或者緩沖機(jī)制時(shí),或者與數(shù)據(jù)庫(kù)的某個(gè)庫(kù)交互作用過程時(shí)所產(chǎn)生的。
  
  理論上是這樣。但是在實(shí)際運(yùn)用中,ReiserFS 的小文件性能會(huì)是如何的好呢?好得讓人吃驚。實(shí)際上,當(dāng)處理小于 1k 的文件時(shí),ReiserFS 大概要比 ext2 快 8 到 15 倍!更妙的是,這些性能提高并不以其它文件類型的性能損失為代價(jià)。通常,ReiserFS 幾乎在各個(gè)方面都優(yōu)于 ext2,但是在處理小文件時(shí)才真正體現(xiàn)出了其閃光點(diǎn)。
  
  ReiserFS 技術(shù)
  那么 ReiserFS 是怎樣提供如此出色的小文件性能的呢?ReiserFS 使用了非凡的優(yōu)化 b* 平衡樹(每個(gè)文件系統(tǒng)一個(gè))來組織所有的文件系統(tǒng)數(shù)據(jù)。這為其自身提供了非常不錯(cuò)的性

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 哈密市| 宁波市| 阳西县| 香港| 格尔木市| 毕节市| 巴塘县| 景宁| 错那县| 阿拉善盟| 蓬溪县| 武宁县| 肇源县| 寿光市| 霍山县| 彭水| 太和县| 林芝县| 哈尔滨市| 罗平县| 新野县| 江油市| 清苑县| 巴彦县| 囊谦县| 阿勒泰市| 通山县| 西乡县| 两当县| 红安县| 克东县| 武强县| 桑植县| 吉水县| 新乡市| 迭部县| 元谋县| 喀喇| 博白县| 独山县| 项城市|