成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux內(nèi)核ext4 extent:解決大文件存儲(chǔ)難題的關(guān)鍵

系統(tǒng) Linux
在 Linux 系統(tǒng)中,當(dāng)用戶執(zhí)行文件刪除操作時(shí),ext4 extent 會(huì)迅速響應(yīng),釋放文件占用的物理塊,更新映射關(guān)系及相關(guān)數(shù)據(jù)結(jié)構(gòu),以確保磁盤空間的有效回收和文件系統(tǒng)的一致性。

在Linux 操作系統(tǒng)的龐大生態(tài)中,文件系統(tǒng)猶如一座城市的基礎(chǔ)設(shè)施,支撐著數(shù)據(jù)的有序存儲(chǔ)與高效訪問。而 ext4 文件系統(tǒng),作為 Linux 文件系統(tǒng)家族中的重要一員,自誕生起便憑借諸多先進(jìn)特性備受矚目。其中,extent 機(jī)制堪稱 ext4 的一大核心亮點(diǎn),它從根本上改變了文件數(shù)據(jù)的組織與尋址方式。在深入探究 ext4 extent 之前,讓我們先回溯一下歷史。早期的 ext2、ext3 文件系統(tǒng)采用直接 + 間接尋址模式來處理文件邏輯地址到物理塊地址的映射,這種方式在面對(duì)大文件時(shí),暴露出諸如物理塊浪費(fèi)、磁盤性能低下、效率不高以及易碎片化等諸多弊端。

extent 機(jī)制的引入,正是為了革除這些弊病。它以一種更為緊湊、高效的方式,描述大文件邏輯地址與物理地址的映射關(guān)系,大幅節(jié)省磁盤空間,顯著提升尋址性能,并有效緩解碎片化問題。接下來,本文將深入 Linux 內(nèi)核源碼的世界,從數(shù)據(jù)結(jié)構(gòu)定義、操作函數(shù)實(shí)現(xiàn)等底層視角,結(jié)合實(shí)例演示,全方位、深層次地剖析 ext4 extent,力圖揭開其神秘面紗,讓大家透徹理解其工作原理與精妙之處 。

Part1.Linux 文件系統(tǒng)小科普

在 Linux 系統(tǒng)的龐大體系中,文件系統(tǒng)就像是一個(gè)井然有序的圖書館,負(fù)責(zé)高效管理和存儲(chǔ)數(shù)據(jù)。它不僅提供了文件和目錄的組織管理功能,還負(fù)責(zé)文件讀寫、權(quán)限管理、存儲(chǔ)設(shè)備的格式化等操作,其好壞直接影響到系統(tǒng)的性能、可靠性和安全性 。

圖片圖片

ext4 文件系統(tǒng),作為 Linux 系統(tǒng)中廣泛應(yīng)用的文件系統(tǒng),憑借其卓越的性能、強(qiáng)大的穩(wěn)定性以及出色的兼容性,成為眾多用戶的信賴之選,也是當(dāng)下 Linux 系統(tǒng)的默認(rèn)文件系統(tǒng)。在 ext4 眾多的特性中,extent 堪稱其核心與靈魂所在,它的出現(xiàn),徹底革新了文件數(shù)據(jù)的存儲(chǔ)與管理方式,為提升文件系統(tǒng)的性能開辟了全新的路徑。接下來,就讓我們深入到 Linux 內(nèi)核源碼的世界,詳細(xì)解讀 ext4 extent。

Part2.ext4 extent是什么?

2.1傳統(tǒng)文件系統(tǒng)的痛點(diǎn)

在 extent 出現(xiàn)之前,傳統(tǒng)文件系統(tǒng)采用的是直接映射或間接映射方式,將文件邏輯塊號(hào)映射到物理塊號(hào)。在這種映射方式下,每個(gè)文件的數(shù)據(jù)塊地址都需要在映射表中記錄,隨著文件規(guī)模不斷增大,映射表會(huì)急劇膨脹,占用大量磁盤空間和內(nèi)存資源。例如,一個(gè) 1GB 的文件,若以 4KB 為一個(gè)數(shù)據(jù)塊,就需要 262144 個(gè)塊地址記錄在映射表中,這對(duì)系統(tǒng)資源是極大的消耗。

同時(shí),復(fù)雜的映射關(guān)系也使得文件讀寫操作時(shí),需要頻繁訪問映射表來獲取物理塊地址,大大增加了系統(tǒng)開銷。以讀取一個(gè)大文件為例,系統(tǒng)需要多次查詢映射表,每次查詢都伴隨著磁盤 I/O 操作,這不僅增加了尋道時(shí)間,還延長了數(shù)據(jù)傳輸時(shí)間,導(dǎo)致文件讀寫速度大幅下降,嚴(yán)重影響系統(tǒng)性能。

2.2 extent閃亮登場(chǎng)

extent 的核心思想是將文件中的數(shù)據(jù)劃分為若干個(gè)連續(xù)的物理塊,這些連續(xù)的物理塊被視為一個(gè)整體,即 extent。通過這種方式,文件的數(shù)據(jù)不再是零散地分布在磁盤的各個(gè)角落,而是以連續(xù)的塊組形式存儲(chǔ),大大提高了數(shù)據(jù)的存儲(chǔ)密度和連續(xù)性。比如,一個(gè)視頻文件在存儲(chǔ)時(shí),其數(shù)據(jù)可以被劃分為多個(gè) extent,每個(gè) extent 包含若干連續(xù)的物理塊,這樣在讀取視頻文件時(shí),就可以一次性讀取一個(gè) extent 的數(shù)據(jù),減少了磁盤尋道次數(shù),提高了讀取效率。

這種連續(xù)性存儲(chǔ)方式帶來了諸多顯著的優(yōu)勢(shì)。首先,它減少了文件數(shù)據(jù)的碎片化程度,使得文件在磁盤上的存儲(chǔ)更加緊湊和有序。這不僅有助于提高磁盤空間的利用率,還能減少文件讀寫時(shí)的尋道時(shí)間和旋轉(zhuǎn)延遲,從而顯著提升文件的讀寫性能。其次,extent 的使用簡化了文件的映射關(guān)系,使得文件的邏輯塊號(hào)與物理塊號(hào)之間的映射更加直觀和高效。通過 extent,文件系統(tǒng)可以直接定位到文件數(shù)據(jù)所在的物理塊,無需像傳統(tǒng)方式那樣進(jìn)行復(fù)雜的映射表查詢,大大提高了文件的訪問速度和效率。

2.3實(shí)際應(yīng)用大放送

在實(shí)際應(yīng)用中,extent 的優(yōu)勢(shì)得到了充分的體現(xiàn)。在處理大型數(shù)據(jù)庫文件時(shí),extent 能夠確保數(shù)據(jù)庫文件的數(shù)據(jù)連續(xù)存儲(chǔ),使得數(shù)據(jù)庫的讀寫操作更加高效和穩(wěn)定。例如,在一個(gè)企業(yè)級(jí)數(shù)據(jù)庫系統(tǒng)中,經(jīng)常需要對(duì)大規(guī)模數(shù)據(jù)進(jìn)行查詢和更新操作,使用 extent 存儲(chǔ)數(shù)據(jù)可以大大提高數(shù)據(jù)庫的響應(yīng)速度,滿足企業(yè)對(duì)數(shù)據(jù)處理的高要求。

在進(jìn)行大規(guī)模文件傳輸時(shí),extent 的連續(xù)性存儲(chǔ)方式可以減少文件傳輸過程中的中斷和錯(cuò)誤,提高文件傳輸?shù)某晒β屎退俣取_@對(duì)于需要頻繁進(jìn)行文件傳輸?shù)膱?chǎng)景,如數(shù)據(jù)備份、文件共享等,具有重要的實(shí)用價(jià)值。比如,在進(jìn)行數(shù)據(jù)備份時(shí),使用 extent 存儲(chǔ)數(shù)據(jù)可以加快備份速度,減少備份時(shí)間,提高數(shù)據(jù)安全性。

Part3.ext4 extent誕生的故事

3.1 ext2、ext3 的 “老黃歷”

在計(jì)算機(jī)發(fā)展的早期,數(shù)據(jù)量相對(duì)較小,對(duì)文件系統(tǒng)的性能要求也不像現(xiàn)在這么高。ext2 文件系統(tǒng)應(yīng)運(yùn)而生,它采用直接 + 間接尋址的方式,在 inode 結(jié)構(gòu)體中的 i_block 數(shù)組里,前 12 個(gè)元素用于直接尋址,對(duì)于小文件來說,這種方式簡單高效,系統(tǒng)能直接通過這些元素找到對(duì)應(yīng)的物理塊,快速訪問文件數(shù)據(jù)。例如,一個(gè)大小為幾十 KB 的文本文件,其數(shù)據(jù)塊地址可以直接存儲(chǔ)在這 12 個(gè)元素中,讀取時(shí)無需復(fù)雜的尋址過程,大大提高了小文件的讀寫速度。

然而,隨著數(shù)據(jù)量的不斷增長,大文件的出現(xiàn)越來越頻繁,ext2 的局限性逐漸暴露出來。當(dāng)文件較大時(shí),僅靠直接尋址無法滿足需求,需要借助間接尋址。i_block 數(shù)組的第 13 個(gè)元素用于一級(jí)間接尋址,指向一個(gè)存儲(chǔ)數(shù)據(jù)塊地址的塊;第 14 個(gè)元素用于二級(jí)間接尋址,通過多層索引來找到數(shù)據(jù)塊地址;第 15 個(gè)元素用于三級(jí)間接尋址 。

這種復(fù)雜的尋址方式,在處理大文件時(shí)效率極其低下。以一個(gè) 1GB 的大文件為例,假設(shè)每個(gè)數(shù)據(jù)塊大小為 4KB,那么這個(gè)文件就需要 262144 個(gè)數(shù)據(jù)塊。在 ext2 文件系統(tǒng)中,為了記錄這些數(shù)據(jù)塊的地址,需要不斷地進(jìn)行間接尋址,這不僅浪費(fèi)了大量的磁盤空間來存儲(chǔ)索引信息,還導(dǎo)致文件讀寫時(shí)需要多次訪問磁盤,增加了尋道時(shí)間和數(shù)據(jù)傳輸時(shí)間,大大降低了文件系統(tǒng)的性能。

ext3 在 2001 年出現(xiàn),它在 ext2 的基礎(chǔ)上增加了日志功能,大大提高了文件系統(tǒng)的可靠性和穩(wěn)定性。在系統(tǒng)崩潰或掉電時(shí),ext3 可以利用日志快速恢復(fù)文件系統(tǒng)的一致性,減少數(shù)據(jù)丟失的風(fēng)險(xiǎn)。然而,ext3 并沒有從根本上解決 ext2 在處理大文件時(shí)的性能問題,仍然采用直接 + 間接尋址的方式,隨著數(shù)據(jù)量的持續(xù)增長,ext3 在大文件處理上的局限性也越發(fā)明顯,無法滿足日益增長的存儲(chǔ)和性能需求。

3.2 extent 來救場(chǎng)

為了解決 ext2 和 ext3 在大文件處理上的困境,extent 應(yīng)運(yùn)而生。extent 的出現(xiàn),徹底改變了文件數(shù)據(jù)的存儲(chǔ)和管理方式。它將文件中的數(shù)據(jù)劃分為若干個(gè)連續(xù)的物理塊,這些連續(xù)的物理塊被視為一個(gè)整體,即 extent。通過這種方式,文件的數(shù)據(jù)不再是零散地分布在磁盤的各個(gè)角落,而是以連續(xù)的塊組形式存儲(chǔ),大大提高了數(shù)據(jù)的存儲(chǔ)密度和連續(xù)性。

在處理大文件時(shí),extent 機(jī)制將大文件的數(shù)據(jù)存儲(chǔ)在較少的 extent 中,減少了磁盤尋道時(shí)間和數(shù)據(jù)傳輸?shù)拈_銷,從而顯著提高了大文件的讀寫速度。例如,對(duì)于一個(gè)大型視頻文件,extent 可以將其數(shù)據(jù)存儲(chǔ)在幾個(gè)連續(xù)的 extent 中,讀取時(shí)只需一次性讀取這些 extent 的數(shù)據(jù),而不需要像傳統(tǒng)方式那樣頻繁地尋道和讀取零散的數(shù)據(jù)塊,大大提高了視頻播放的流暢性和加載速度。

extent 還能有效減少文件碎片的產(chǎn)生,提高磁盤空間的利用率。在傳統(tǒng)的文件系統(tǒng)中,由于文件數(shù)據(jù)的零散存儲(chǔ),容易產(chǎn)生大量的文件碎片,導(dǎo)致磁盤空間浪費(fèi)和文件讀寫性能下降。而 extent 優(yōu)先分配連續(xù)的磁盤空間,使得文件在磁盤上的存儲(chǔ)更加緊湊和有序,減少了碎片的產(chǎn)生,提高了磁盤空間的利用率。

Part4.ext4 extent 核心數(shù)據(jù)結(jié)構(gòu)

深入探究 ext4 extent,就如同打開了一扇通往文件系統(tǒng)底層世界的大門,其核心數(shù)據(jù)結(jié)構(gòu)精妙而復(fù)雜,支撐著文件系統(tǒng)的高效運(yùn)行。這些數(shù)據(jù)結(jié)構(gòu)不僅是理解 ext4 extent 工作原理的關(guān)鍵,更是掌握文件系統(tǒng)性能優(yōu)化的基礎(chǔ)。接下來,讓我們一同揭開 ext4 extent 核心數(shù)據(jù)結(jié)構(gòu)的神秘面紗,領(lǐng)略其設(shè)計(jì)的精妙之處。

4.1 inode里的小秘密

inode,作為文件系統(tǒng)中的關(guān)鍵概念,在 ext4 extent 中扮演著舉足輕重的角色。它是文件元數(shù)據(jù)的載體,存儲(chǔ)著文件的各種屬性信息,如文件大小、權(quán)限、所有者、創(chuàng)建時(shí)間、修改時(shí)間等 。這些屬性信息對(duì)于文件的管理和訪問至關(guān)重要,是文件系統(tǒng)進(jìn)行各種操作的依據(jù)。

在 inode 結(jié)構(gòu)體中,有一個(gè)重要的數(shù)組 i_block,它在文件尋址過程中起著關(guān)鍵作用。在傳統(tǒng)的 ext2 和 ext3 文件系統(tǒng)中,i_block 數(shù)組的前 12 個(gè)元素用于直接尋址,直接存儲(chǔ)文件數(shù)據(jù)塊的物理地址。對(duì)于小文件而言,這種直接尋址方式簡單高效,系統(tǒng)能迅速定位到文件數(shù)據(jù)所在的物理塊,實(shí)現(xiàn)快速的數(shù)據(jù)訪問。然而,當(dāng)文件較大時(shí),僅靠這 12 個(gè)直接尋址元素?zé)o法滿足需求,就需要借助間接尋址。

i_block 數(shù)組的第 13 個(gè)元素指向一個(gè)塊,該塊中存儲(chǔ)的是數(shù)據(jù)塊的地址,通過這種一級(jí)間接尋址,系統(tǒng)可以訪問更多的數(shù)據(jù)塊;第 14 個(gè)元素用于二級(jí)間接尋址,通過多層索引來找到數(shù)據(jù)塊地址;第 15 個(gè)元素則用于三級(jí)間接尋址 。這種復(fù)雜的尋址方式在處理大文件時(shí),效率較低,且會(huì)占用大量的磁盤空間來存儲(chǔ)索引信息。

在 ext4 文件系統(tǒng)中,引入 extent 機(jī)制后,inode 的結(jié)構(gòu)和功能發(fā)生了一些變化。inode 不再僅僅通過 i_block 數(shù)組來進(jìn)行文件尋址,而是結(jié)合 extent 來更高效地管理文件數(shù)據(jù)的存儲(chǔ)位置。extent 的出現(xiàn),使得 inode 能夠以更緊湊、更高效的方式記錄文件數(shù)據(jù)的物理位置,減少了尋址的復(fù)雜度和磁盤空間的浪費(fèi) 。

4.2 extent 結(jié)構(gòu)體剖析

extent 結(jié)構(gòu)體是 ext4 extent 機(jī)制的核心組成部分,它精準(zhǔn)地描述了文件邏輯塊與物理塊之間的映射關(guān)系。通過這個(gè)結(jié)構(gòu)體,文件系統(tǒng)能夠清晰地知曉文件數(shù)據(jù)在磁盤上的存儲(chǔ)位置,實(shí)現(xiàn)高效的數(shù)據(jù)訪問和管理。

extent 結(jié)構(gòu)體包含了多個(gè)關(guān)鍵信息,其中文件邏輯塊號(hào)(ee_block)明確標(biāo)識(shí)了 extent 所對(duì)應(yīng)的文件邏輯塊的起始位置,它是文件數(shù)據(jù)在邏輯層面的索引。起始磁盤塊號(hào)(由 ee_start_hi 和 ee_start_lo 共同確定)則指明了文件數(shù)據(jù)在磁盤上的實(shí)際起始物理位置,這是數(shù)據(jù)存儲(chǔ)的物理起點(diǎn)。塊數(shù)量(ee_len)表示該 extent 所包含的連續(xù)物理塊的數(shù)量,它決定了 extent 的大小和數(shù)據(jù)存儲(chǔ)的范圍。

這些信息相互配合,構(gòu)成了 extent 結(jié)構(gòu)體的核心功能。通過文件邏輯塊號(hào),文件系統(tǒng)可以快速定位到需要訪問的文件邏輯塊;再結(jié)合起始磁盤塊號(hào)和塊數(shù)量,就能準(zhǔn)確地找到對(duì)應(yīng)的物理塊,實(shí)現(xiàn)文件數(shù)據(jù)的高效讀寫。這種映射關(guān)系的建立,使得文件系統(tǒng)能夠更有效地管理文件數(shù)據(jù)的存儲(chǔ),提高了數(shù)據(jù)訪問的效率和可靠性 。

4.3 extent_tree 的魔法

對(duì)于大文件來說,單一的 extent 可能無法容納其全部數(shù)據(jù),此時(shí) ext4 采用 extent_tree 來管理多個(gè) extent。extent_tree 本質(zhì)上是一種基于 B + 樹的數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)在文件系統(tǒng)中發(fā)揮著重要的作用,極大地提升了文件系統(tǒng)的性能 。

在 extent_tree 中,B + 樹的葉子節(jié)點(diǎn)存儲(chǔ)著實(shí)際的 extent 信息,每個(gè) extent 結(jié)構(gòu)體都包含了文件邏輯塊號(hào)到物理塊號(hào)的映射關(guān)系。非葉子節(jié)點(diǎn)則作為索引節(jié)點(diǎn),用于快速定位葉子節(jié)點(diǎn)。當(dāng)文件系統(tǒng)需要查找某個(gè)文件邏輯塊對(duì)應(yīng)的物理塊時(shí),首先從根節(jié)點(diǎn)開始,通過比較邏輯塊號(hào)在非葉子節(jié)點(diǎn)中進(jìn)行索引查找,逐步向下遍歷,最終找到對(duì)應(yīng)的葉子節(jié)點(diǎn),從而獲取到準(zhǔn)確的 extent 信息 。

這種基于B+樹的間接尋址方式,具有諸多優(yōu)勢(shì)。B+樹的結(jié)構(gòu)特點(diǎn)使得數(shù)據(jù)查詢更加高效,它能夠快速定位到目標(biāo)extent,減少了磁盤I/O操作的次數(shù)。與傳統(tǒng)的直接 + 間接尋址方式相比,extent_tree大大減少了元數(shù)據(jù)的存儲(chǔ)量,降低了磁盤空間的占用。B+樹的平衡性和有序性也保證了文件系統(tǒng)在處理大文件時(shí)的穩(wěn)定性和可靠性 。

Part5.ext4 extent運(yùn)行機(jī)制

5.1文件創(chuàng)建時(shí)的操作

當(dāng)用戶在 Linux 系統(tǒng)中創(chuàng)建一個(gè)新文件時(shí),ext4 文件系統(tǒng)會(huì)迅速響應(yīng),為文件分配連續(xù)的物理塊,構(gòu)建文件邏輯塊號(hào)與物理塊號(hào)的映射關(guān)系,這一過程涉及多個(gè)關(guān)鍵步驟。

系統(tǒng)首先會(huì)在文件系統(tǒng)中查找一個(gè)空閑的 inode,inode 是文件元數(shù)據(jù)的載體,包含了文件的各種屬性信息,如文件大小、權(quán)限、所有者、創(chuàng)建時(shí)間、修改時(shí)間等 。一旦找到合適的空閑 inode,系統(tǒng)便會(huì)為其初始化相關(guān)信息,將文件的基本屬性記錄其中。

接著,ext4 文件系統(tǒng)會(huì)根據(jù)文件的大小和磁盤空間的使用情況,為文件分配連續(xù)的物理塊。在分配物理塊時(shí),ext4 會(huì)優(yōu)先嘗試在磁盤上找到一段連續(xù)的空閑空間,將這些連續(xù)的物理塊劃分為一個(gè) extent。例如,當(dāng)創(chuàng)建一個(gè)大小為 10MB 的文件時(shí),如果磁盤上存在一段連續(xù)的 10MB 空閑空間,ext4 會(huì)將這段空間分配給文件,形成一個(gè) extent。這樣做的好處是,文件的數(shù)據(jù)可以連續(xù)存儲(chǔ),大大提高了文件的讀寫性能。

在完成物理塊的分配后,ext4 會(huì)構(gòu)建文件邏輯塊號(hào)與物理塊號(hào)的映射關(guān)系。通過 extent 結(jié)構(gòu)體,文件系統(tǒng)能夠清晰地記錄文件邏輯塊號(hào)與物理塊號(hào)之間的對(duì)應(yīng)關(guān)系。每個(gè) extent 結(jié)構(gòu)體包含文件邏輯塊號(hào)、起始磁盤塊號(hào)和塊數(shù)量等關(guān)鍵信息。文件邏輯塊號(hào)(ee_block)明確標(biāo)識(shí)了 extent 所對(duì)應(yīng)的文件邏輯塊的起始位置;起始磁盤塊號(hào)(由 ee_start_hi 和 ee_start_lo 共同確定)則指明了文件數(shù)據(jù)在磁盤上的實(shí)際起始物理位置;塊數(shù)量(ee_len)表示該 extent 所包含的連續(xù)物理塊的數(shù)量。通過這些信息,文件系統(tǒng)可以快速定位到文件數(shù)據(jù)所在的物理塊,實(shí)現(xiàn)高效的數(shù)據(jù)訪問。

5.2文件讀取的過程

在 Linux 系統(tǒng)中,當(dāng)用戶發(fā)起文件讀取請(qǐng)求時(shí),ext4 extent 會(huì)迅速響應(yīng),根據(jù)文件邏輯塊號(hào)與物理塊號(hào)的映射關(guān)系,快速定位到文件數(shù)據(jù)所在的物理塊,并將數(shù)據(jù)讀取到內(nèi)存中,這一過程涉及多個(gè)關(guān)鍵步驟。

系統(tǒng)會(huì)根據(jù)用戶提供的文件路徑,找到對(duì)應(yīng)的 inode。inode 中包含了文件的各種元數(shù)據(jù)信息,如文件大小、權(quán)限、所有者、創(chuàng)建時(shí)間、修改時(shí)間等 ,以及指向文件數(shù)據(jù)的指針。通過 inode,系統(tǒng)可以獲取到文件的 extent tree 的指針,extent tree 是一種基于 B + 樹的數(shù)據(jù)結(jié)構(gòu),用于組織和管理文件的 extent。

接著,系統(tǒng)會(huì)利用 extent tree 來查找文件數(shù)據(jù)所在的 extent。在 extent tree 中,B + 樹的葉子節(jié)點(diǎn)存儲(chǔ)著實(shí)際的 extent 信息,每個(gè) extent 結(jié)構(gòu)體都包含了文件邏輯塊號(hào)到物理塊號(hào)的映射關(guān)系。非葉子節(jié)點(diǎn)則作為索引節(jié)點(diǎn),用于快速定位葉子節(jié)點(diǎn)。當(dāng)系統(tǒng)需要查找某個(gè)文件邏輯塊對(duì)應(yīng)的物理塊時(shí),首先從根節(jié)點(diǎn)開始,通過比較邏輯塊號(hào)在非葉子節(jié)點(diǎn)中進(jìn)行索引查找,逐步向下遍歷,最終找到對(duì)應(yīng)的葉子節(jié)點(diǎn),從而獲取到準(zhǔn)確的 extent 信息 。

在找到對(duì)應(yīng)的 extent 后,系統(tǒng)會(huì)根據(jù) extent 結(jié)構(gòu)體中記錄的物理塊號(hào),從磁盤上讀取相應(yīng)的數(shù)據(jù)塊,并將數(shù)據(jù)讀取到內(nèi)存中。由于 extent 將文件數(shù)據(jù)存儲(chǔ)在連續(xù)的物理塊中,減少了磁盤尋道時(shí)間和數(shù)據(jù)傳輸?shù)拈_銷,從而大大提高了文件的讀取速度。例如,當(dāng)讀取一個(gè)視頻文件時(shí),extent 機(jī)制可以使得視頻數(shù)據(jù)能夠連續(xù)地從磁盤讀取到內(nèi)存中,保證了視頻播放的流暢性,減少了卡頓現(xiàn)象的發(fā)生。

5.3文件寫入的步驟

在 Linux 系統(tǒng)中,當(dāng)用戶執(zhí)行文件寫入操作時(shí),ext4 extent 會(huì)有條不紊地處理數(shù)據(jù)寫入、空間分配及映射關(guān)系更新等流程,確保文件數(shù)據(jù)的準(zhǔn)確存儲(chǔ)和文件系統(tǒng)的高效運(yùn)行。

當(dāng)用戶向文件寫入數(shù)據(jù)時(shí),系統(tǒng)首先會(huì)檢查文件當(dāng)前的大小和已分配的磁盤空間。如果文件需要擴(kuò)展,即寫入的數(shù)據(jù)量超過了當(dāng)前已分配的磁盤空間,ext4 會(huì)為文件分配合適的 extent。在分配 extent 時(shí),ext4 會(huì)優(yōu)先嘗試在磁盤上找到一段連續(xù)的空閑空間,將這些連續(xù)的物理塊劃分為一個(gè)新的 extent。例如,當(dāng)用戶向一個(gè)已存在的文件中追加 10MB 的數(shù)據(jù)時(shí),如果磁盤上存在一段連續(xù)的 10MB 空閑空間,ext4 會(huì)將這段空間分配給文件,形成一個(gè)新的 extent。這樣做的好處是,文件的數(shù)據(jù)可以連續(xù)存儲(chǔ),大大提高了文件的讀寫性能。

如果沒有足夠大的連續(xù)空間,ext4才會(huì)考慮分配不連續(xù)的空間,并將其作為多個(gè)extent來管理。在分配不連續(xù)的空間時(shí),ext4會(huì)為每個(gè)不連續(xù)的空間創(chuàng)建一個(gè)新的 extent,并在extent tree 中記錄這些 extent 的信息 。

在完成 extent 的分配后,系統(tǒng)會(huì)將用戶寫入的數(shù)據(jù)寫入到新分配的 extent 中。同時(shí),ext4會(huì)更新文件的inode信息,包括文件的大小、修改時(shí)間等,以反映文件的最新狀態(tài)。ext4 還會(huì)更新 extent tree 中相關(guān)的映射關(guān)系,確保文件邏輯塊號(hào)與物理塊號(hào)的映射關(guān)系始終準(zhǔn)確無誤。例如,當(dāng)用戶向文件中寫入新的數(shù)據(jù)時(shí),ext4 會(huì)在 extent tree 中更新對(duì)應(yīng)的 extent 結(jié)構(gòu)體,記錄新的數(shù)據(jù)存儲(chǔ)位置和塊數(shù)量等信息。

5.4文件刪除的處理

在 Linux 系統(tǒng)中,當(dāng)用戶執(zhí)行文件刪除操作時(shí),ext4 extent 會(huì)迅速響應(yīng),釋放文件占用的物理塊,更新映射關(guān)系及相關(guān)數(shù)據(jù)結(jié)構(gòu),以確保磁盤空間的有效回收和文件系統(tǒng)的一致性。

當(dāng)用戶刪除一個(gè)文件時(shí),系統(tǒng)首先會(huì)找到該文件對(duì)應(yīng)的 inode。inode 中包含了文件的各種元數(shù)據(jù)信息,如文件大小、權(quán)限、所有者、創(chuàng)建時(shí)間、修改時(shí)間等 ,以及指向文件數(shù)據(jù)的指針。通過 inode,系統(tǒng)可以獲取到文件的 extent tree 的指針,extent tree 是一種基于 B + 樹的數(shù)據(jù)結(jié)構(gòu),用于組織和管理文件的 extent。

接著,系統(tǒng)會(huì)遍歷 extent tree,找到文件占用的所有 extent,并將這些 extent 標(biāo)記為空閑。在標(biāo)記 extent 為空閑后,ext4 會(huì)將這些 extent 所占用的物理塊釋放回磁盤空間,以便后續(xù)文件的分配使用。例如,當(dāng)刪除一個(gè)包含多個(gè) extent 的大文件時(shí),ext4 會(huì)逐一將每個(gè) extent 所占用的物理塊標(biāo)記為空閑,釋放這些物理塊,使得磁盤空間得到有效回收。

系統(tǒng)會(huì)刪除文件的 inode 和 extent tree,更新文件系統(tǒng)的元數(shù)據(jù)信息,以反映文件的刪除操作。這一步驟確保了文件系統(tǒng)的一致性,避免了因文件刪除而導(dǎo)致的元數(shù)據(jù)不一致問題。在刪除 inode 和 extent tree 后,文件在文件系統(tǒng)中的所有痕跡被徹底清除,完成了文件的刪除操作。

責(zé)任編輯:武曉燕 來源: 深度Linux
相關(guān)推薦

2018-09-12 15:48:35

ext4Linux文件系統(tǒng)

2012-05-08 10:56:15

Linux

2011-06-27 10:17:15

EXT4 Btrfs

2025-03-28 09:44:17

2017-07-12 12:29:54

2017-11-23 09:30:01

Linux文件系統(tǒng)sudo命令

2010-12-17 09:37:13

ext4文件系統(tǒng)

2011-01-06 09:57:31

Linux Kerne

2012-05-21 09:48:58

Ext4

2009-11-30 09:46:45

Ubuntu文件系統(tǒng)選擇

2018-11-21 10:35:44

DropboxLinux同步支持

2022-09-15 08:06:02

FTL閃存存儲(chǔ)

2009-03-25 08:32:33

Windows Ser微軟操作系統(tǒng)

2009-03-24 14:29:04

LinuxExt4數(shù)據(jù)丟失

2009-08-12 17:42:24

Linux文件系統(tǒng)BTRFSext4

2010-12-28 09:51:06

ext4文件系統(tǒng)

2010-06-01 09:55:24

ext4文件系統(tǒng)

2011-01-14 10:42:45

RHEL 5.6紅帽企業(yè)級(jí)Linux

2012-05-21 10:42:02

Ext4

2010-04-27 09:27:36

Linux文件系統(tǒng)Linux 2.6.3
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 99这里只有精品视频 | 日韩中文在线视频 | 国产精品96久久久久久 | 亚洲激精日韩激精欧美精品 | 夜夜骑首页 | 四虎影院一区二区 | 在线免费看毛片 | 国产乱码精品一区二区三区中文 | 一级少妇女片 | 一区二区三区国产好的精 | 精品国产一区二区 | 91精品国产综合久久香蕉麻豆 | 99久久精品视频免费 | 中文字幕在线精品 | www.日韩 | 国产精品视频在线播放 | 在线观看中文字幕视频 | 中文字幕亚洲欧美日韩在线不卡 | 久久av一区二区 | 三级国产三级在线 | 欧美一区二区三区视频 | 亚洲人精品午夜 | 久久免费国产 | 中文字幕在线视频免费视频 | av黄色免费 | 亚洲激精日韩激精欧美精品 | 亚洲成人99| 四虎在线观看 | 欧美伊人久久久久久久久影院 | 天天天天操 | 黄色综合 | 电影在线 | 密乳av | 伊人手机在线视频 | 国产精品福利视频 | 三极网站 | 色视频网站免费 | 国产传媒在线观看 | 污视频在线免费观看 | 久久在视频 | 超碰97人人人人人蜜桃 |