www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]如今,日志文件系統(tǒng)(ext3)已經(jīng)成為 Linux 的缺省文件系統(tǒng)。本文向大家揭示了日志文件系統(tǒng)背后的一些思想,以及在電源故障或系統(tǒng)崩潰時,如何提供更好的完整性。此外本文還介紹了現(xiàn)行的幾種日志文件 系統(tǒng)和下一代日志文件系統(tǒng)。

在近代歷史上,日志文件系統(tǒng)被認(rèn)為十分奇特,主要是處于研究階段。而如今,日志文件系統(tǒng)(ext3)已經(jīng)成為 Linux 的缺省文件系統(tǒng)。本文向大家揭示了日志文件系統(tǒng)背后的一些思想,以及在電源故障或系統(tǒng)崩潰時,如何提供更好的完整性。此外本文還介紹了現(xiàn)行的幾種日志文件 系統(tǒng)和下一代日志文件系統(tǒng)。

定義日志文件系統(tǒng)的方法有很多種,但是讓我們抓住要點。日志文件系統(tǒng)就是專為那些厭倦了一直盯著啟動時 fsck(即文件系統(tǒng)一致性檢查)的人而設(shè)計的(日志文件系統(tǒng)同樣適用于希望文件系統(tǒng)具有故障恢復(fù)能力的群體)。如果系統(tǒng)采用傳統(tǒng)的未提供日志功能的文件系統(tǒng),那么操作系統(tǒng)在檢測到系統(tǒng)為非正常關(guān)機(jī)時,會使用 fsck 應(yīng)用程序執(zhí)行一致性檢驗。該應(yīng)用程序會掃描文件系統(tǒng)(這要花費(fèi)很長的時間),并修復(fù)任何可安全修復(fù)的問題。而在某些情況下,當(dāng)文件系統(tǒng)損壞嚴(yán)重時,操作系統(tǒng)會啟動到單用戶模式,由用戶進(jìn)行進(jìn)一步的修復(fù)。

那么現(xiàn)在您應(yīng)該清楚日志文件系統(tǒng)針對的是哪類人群了,但是他們是如何取締 fsck 的呢?籠統(tǒng)地說,日志文件系統(tǒng)就是通過維護(hù)一份日志來防止文件系統(tǒng)崩潰。所謂日志就是一種特殊的文件,它會在一個循環(huán)的緩沖區(qū)內(nèi)記錄文件系統(tǒng)的修改,然后 將其定期提交到文件系統(tǒng)。一旦系統(tǒng)發(fā)生崩潰,日志文件就會起到一個檢查點的作用,用于恢復(fù)未保存的信息,防止損壞文件系統(tǒng)元數(shù)據(jù)。

總之,日志文件系統(tǒng)就是一種具有故障恢復(fù)能力的文件系統(tǒng),它利用日志來記錄尚未提交到文件系統(tǒng)的修改,以防止元數(shù)據(jù)破壞(請參見圖 1)。但是如眾多其他 Linux 解決方案一樣,日志文件系統(tǒng)有多種方案供您選擇。下面就讓我們一起簡短回顧一下日志文件系統(tǒng)的歷史,然后再看一看現(xiàn)行的幾種文件系統(tǒng),看看它們之間有什么 區(qū)別。//本文轉(zhuǎn)自www.45it.com電腦軟硬件應(yīng)用網(wǎng)


圖 1. 典型的日志文件系統(tǒng)


Linux 日志文件系統(tǒng)的歷史

最早的日志文件系統(tǒng)是 IBM-Journaled File System(JFS)。JFS 于 1990 年首次發(fā)行,而當(dāng)前 Linux 支持的版本是后期開發(fā)的 JFS2。1994 年,Silicon Graphics 為 IRIX 操作系統(tǒng)引進(jìn)了高性能的 XFS。XFS 于 2001 年被植入 Linux 系統(tǒng)中。1998 年開發(fā)的智能文件系統(tǒng)(SFS)起初是為 Amiga 開發(fā)的,但之后卻在 GNU Lesser General Public License(LGPL)下發(fā)行,并于 2005 年獲得了 Linux 的支持。最常用的日志文件系統(tǒng) ext3fs (third extended file system)是 ext2 的擴(kuò)展,它增加了記錄日志的功能。從 2001 年起,Linux 系統(tǒng)中就開始支持 ext3fs。最終,ReiserFS 日志文件系統(tǒng)在其被引入之后,力壓群雄,被廣泛使用。但由于其原開發(fā)者的一些法律糾紛,ReiserFS 日志文件系統(tǒng)未能得到進(jìn)一步的發(fā)展。


日志的幾種變體

日志文件系統(tǒng)是使用日志來緩沖文件系統(tǒng)的修改(同時也可以應(yīng)用于緊急故障恢復(fù))的,但可以根據(jù)記錄的時間與內(nèi)容采取不同的策略。其中,三種常見的策略為:回寫(writeback)、預(yù)定(ordered)和數(shù)據(jù)(data)。

在回寫模式 中,僅有元數(shù)據(jù)被記錄到日志,數(shù)據(jù)塊則被直接寫入到磁盤位置上。這樣可以保存文件系統(tǒng)結(jié)構(gòu),防止崩潰,但卻有可能發(fā)生數(shù)據(jù)崩潰(比如:在元數(shù)據(jù)記錄到日志后,數(shù)據(jù)塊寫入磁盤前,系統(tǒng)崩潰)。要想解決這個問題,您可以使用預(yù)定模式。預(yù)定模式 只將元數(shù)據(jù)記錄到日志,但是在此之前將數(shù)據(jù)寫入到磁盤。這樣就可以保證系統(tǒng)恢復(fù)后數(shù)據(jù)和文件系統(tǒng)的一致性。最后一種模式將數(shù)據(jù)也記錄到了日志中。在數(shù)據(jù)模式 中,元數(shù)據(jù)和數(shù)據(jù)都被記錄到日志中。這種模式可以最大限度地防止文件系統(tǒng)崩潰與數(shù)據(jù)丟失,但由于全部數(shù)據(jù)都寫入了兩次(先寫入日志,再寫入磁盤),系統(tǒng)性能可能會降低。

日志的提交也有很多種不同的策略。比如,是在日志將滿時,還是在超時后?


日志文件系統(tǒng)的現(xiàn)狀

如今,有幾種日志文件系統(tǒng)應(yīng)用非常廣泛。每一種都有其自己的優(yōu)缺點。下面介紹現(xiàn)存最普遍的四種日志文件系統(tǒng)。

JFS2

JFS2(又稱 enhanced journaled file system)是最早期的日志文件系統(tǒng),在植入 Linux 之前已被應(yīng)用于 IBM AIX? 操作系統(tǒng)多年。它是 64 位的文件系統(tǒng),雖然它是在原來的 JFS 的基礎(chǔ)上開發(fā)的,但卻較之有所改進(jìn),即:JFS2 具有更優(yōu)的擴(kuò)展性能,而且支持多處理器架構(gòu)。

JFS2 支持預(yù)定的日志記錄方式,可以提高較高的性能,并實現(xiàn)亞秒級文件系統(tǒng)恢復(fù)。JFS2 同時為提高性能提供了基于分區(qū)的文件分配(Extent-based allocation)?;诜謪^(qū)的分配 是指對一組連續(xù)的塊而非單一的塊進(jìn)行分配。由于這些塊在磁盤上是連續(xù)的,其讀取和寫入的性能就會更好。這種分配的另外一個優(yōu)勢就是可以將元數(shù)據(jù)管理最小化。按塊分配磁盤空間就意味著要逐塊更新元數(shù)據(jù)。而使用分區(qū),元數(shù)據(jù)則僅需按照分區(qū)(可以代表多個塊)更新。

JFS2 還使用了 B+ 樹,以便更快地查找目錄和管理分區(qū)描述符。JFS2 沒有內(nèi)部日志提交策略,而是在 kupdate 守護(hù)進(jìn)程超時時提交。

XFS

XFS 是 Silicon Graphicsis 于 1995 年為 IRIX 操作系統(tǒng)開發(fā)的其他早期日志文件系統(tǒng)之一。它于 2001 年就已經(jīng)被植入 Linux,因此,它已經(jīng)成熟而且可靠。

XFS 支持 64 位全地址尋址,并以 B+ 樹為目錄和文件分配提供高性能。XFS 同樣使用了基于分區(qū)的分配,支持可變的塊大?。◤?512 字節(jié)到 64KB )。除分區(qū)外,XFS 還采用延時分配,即等到塊將被寫入磁盤時,再為其分配磁盤空間。這樣所需磁盤空間總數(shù)就一目了然,因此這個功能提高了分配連續(xù)磁盤塊的可能性。

XFS 還有一些其他的有趣特性,它可以保證 rate 輸入輸出(I/O — 通過為文件系統(tǒng)用戶保留帶寬)和直接 I/O。其中,數(shù)據(jù)是直接在磁盤和用戶空間緩沖區(qū)間拷貝的(而不是從多個緩沖區(qū)進(jìn)入)。XFS 采用回寫日志策略。

第三擴(kuò)展文件系統(tǒng)(ext3fs)

第三擴(kuò)展文件系統(tǒng)(third extended file system,ext3fs)是最流行的日志文件系統(tǒng),是由 ext2 文件系統(tǒng)演化而來。實際上,Ext3fs 可以與 ext2fs 兼容,這是因為 ext3fs 使用的結(jié)構(gòu)與 ext2fs 相同,僅僅多了一個日志而已。我們甚至可以把 ext3fs 的一部分當(dāng)作 ext2 文件系統(tǒng)掛載,或者將 ext2 文件系統(tǒng)轉(zhuǎn)換成 ext3 文件系統(tǒng)(使用 tune2fs 實用程序)。

Ext3fs 允許用三種方式記錄日志(回寫,預(yù)定和數(shù)據(jù)),但預(yù)定模式為默認(rèn)模式。日志提交策略也是可配置的,但是默認(rèn)在日志填滿 1/4 時或其中一個提交計時器超時時,提交日志。

ext3fs 主要的弊端之一就是它最初不是作為日志文件系統(tǒng)而設(shè)計的。它是在 ext2fs 的基礎(chǔ)上開發(fā)的,因此缺少一些其他日志文件系統(tǒng)所具備的高級特性(例如分區(qū))。它在性能方面較之 ReiserFS、JFS 以及 XFS 也尤為遜色,但它所需要的 CPU 和內(nèi)存要比同類解決方案少。

ReiserFS

ReiserFS 是從一開始就按照記錄日志的意圖而開發(fā)的日志文件系統(tǒng)。ReiserFS 于 2001 年被引進(jìn)到主流 2.4 內(nèi)核(Linux 采用的第一個日志文件系統(tǒng))。其默認(rèn)的日志記錄方法為預(yù)定,且支持以在線調(diào)整大小的方式擴(kuò)展文件系統(tǒng)。ReiserFS 同時還具有 tail packing 功能,顯著減少了磁盤碎片。在處理較小文件方面,ReiserFS 的速度要比 ext3f 快(當(dāng) tail packing 可用時)。

ReiserFS(又稱 ReiserFS v3)具有很多先進(jìn)的功能,如 B+ 樹。該文件系統(tǒng)的基礎(chǔ)格式建立在單一的 B+ 樹的基礎(chǔ)之上,這使得搜索的效率和可伸縮性增強(qiáng)。提交策略則取決于日志的大小,但是要以待提交的塊的數(shù)量為基礎(chǔ)。

ReiserFS 也遇到了幾個問題 — 大多是最近出現(xiàn)的,這與其開發(fā)者遇到了一些法律糾紛有直接原因。


日志文件系統(tǒng)的未來

現(xiàn)在您已經(jīng)了解了現(xiàn)行的(和過去的)日志文件系統(tǒng),下面就讓我們看一看它的發(fā)展趨勢。

Reiser4

在成功地將 ReiserFS 合并到 Linux 內(nèi)核,并被很多的 Linux 發(fā)行版采用之后,Namesys(開發(fā) ReiserFS 的公司)便開始致力于新的日志文件系統(tǒng)的開發(fā)。Reiser4 被設(shè)計成為全新的日志文件系統(tǒng),它擁有很多先進(jìn)的功能。

Resier4 擬定通過 wandering 日志和延遲分配塊直至日志提交(像在 XFS 中一樣)的方式來實現(xiàn)更優(yōu)秀的日志記錄。Reiser4 還設(shè)計有靈活的插件架構(gòu)(以支持諸如壓縮和加密之類的功能),但是被 Linux 社區(qū)拒絕了,因為這些在虛擬文件系統(tǒng)(virtual file system,VFS)被當(dāng)作是最好的功能。

由于 Namesys 的所有者的堅持,所有關(guān)于 Reiser4 的商業(yè)活動都停止了。

第四擴(kuò)展文件系統(tǒng)

第四擴(kuò)展日志文件系統(tǒng)(fourth extended journaling file system,ext4fs)是由 ext3fs 演化而來。Ext4 文件系統(tǒng)被設(shè)計為具有向前和向后兼容性,但它具有許多新的高級特性(其中的一些特性破壞了兼容性)。這就意味著您可以將 ext4fs 的一部分作為 ext3fs 掛載,反之亦然。

首先,ext4fs 是 64 位文件系統(tǒng),并被設(shè)計為可以支持很大的容量(1 exabyte)。它還可以使用分區(qū),但是這樣做將失去與 ext3fs 的兼容性。像 XFS 和 Reiser4 一樣,ext4fs 還支持在必要時采取延時分配方式分配塊(這樣可以減少磁盤碎片)。日志的內(nèi)容也已經(jīng)執(zhí)行過檢查和(checksum),使日志更加可靠。ext4fs 并沒有采用標(biāo)準(zhǔn)的 B+ 或者 B* 樹,取而代之的是 B 樹的一種變體,叫做 H 樹,它支持更大的子目錄(ext3 的上限為 32KB )。

雖然延時分配的方法可以減少磁盤碎片,但時間久了,一個大的文件系統(tǒng)可能會成為碎片。為解決這個問題,開發(fā)了在線磁盤碎片整理工具(e4defrag)。您可以使用這個工具來整理單個的文件或者整個文件系統(tǒng)。

ext3fs 與 ext4fs 間的另一個有趣的區(qū)別就在于文件的日期分辨率。在 ext3 中,時間戳的最小分辨率為 1 秒。而 Ext4fs 是面向未來的:那時處理器和接口的速度會持續(xù)加快,需要更高的分辨率。因此,ext4 中時間戳的最小分辨率為 1 納秒。

Ext4fs 已被合并到自 2.6.19 以后的 Linux 內(nèi)核中,但它還是不夠穩(wěn)定。下一代系統(tǒng)的開發(fā)將繼續(xù)致力于此;輔之以上一代的優(yōu)勢, 它就會是下一代的 Linux 日志文件系統(tǒng)。


結(jié)束語

日志文件系統(tǒng)在系統(tǒng)崩潰或斷電時提供了可靠性,并防止系統(tǒng)崩潰。另外,與較傳統(tǒng)的文件系統(tǒng)方法(比如那些依賴于 fsck 的系統(tǒng))相比,日志文件系統(tǒng)大大地縮短了系統(tǒng)崩潰的恢復(fù)時間。新的日志記錄功能的開發(fā)要指望將來的新算法與結(jié)構(gòu),也要仰仗以前的算法與結(jié)構(gòu),將 JFS 和 XFS 的功能結(jié)合起來。將來日志文件系統(tǒng)到底會如何發(fā)展還不得而知,但可以確定的是它們會更具實用性,并會成為新的日志文件系統(tǒng)標(biāo)準(zhǔn)

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

CPU親和度通過限制進(jìn)程或線程可以運(yùn)行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數(shù),提高緩存命中率,從而提升系統(tǒng)性能。

關(guān)鍵字: Linux 嵌入式

在Linux系統(tǒng)性能優(yōu)化中,內(nèi)存管理與網(wǎng)絡(luò)連接處理是兩大核心領(lǐng)域。vm.swappiness與net.core.somaxconn作為關(guān)鍵內(nèi)核參數(shù),直接影響系統(tǒng)在高負(fù)載場景下的穩(wěn)定性與響應(yīng)速度。本文通過實戰(zhàn)案例解析這兩個...

關(guān)鍵字: Linux 內(nèi)存管理

對于LLM,我使用b谷歌Gemini的免費(fèi)層,所以唯一的成本是n8n托管。在使用了n8n Cloud的免費(fèi)積分后,我決定將其托管在Railway上(5美元/月)。然而,由于n8n是開源的,您可以在自己的服務(wù)器上托管它,而...

關(guān)鍵字: 人工智能 n8n Linux

在Linux系統(tǒng)管理中,權(quán)限控制是安全運(yùn)維的核心。本文通過解析/etc/sudoers文件配置與組策略的深度應(yīng)用,結(jié)合某金融企業(yè)生產(chǎn)環(huán)境案例(成功攔截98.7%的非法提權(quán)嘗試),揭示精細(xì)化權(quán)限管理的關(guān)鍵技術(shù)點,包括命令別...

關(guān)鍵字: Linux 用戶權(quán)限 sudoers文件

Linux內(nèi)核中的信號量(Semaphore)是一種用于資源管理的同步原語,它允許多個進(jìn)程或線程對共享資源進(jìn)行訪問控制。信號量的主要作用是限制對共享資源的并發(fā)訪問數(shù)量,從而防止系統(tǒng)過載和數(shù)據(jù)不一致的問題。

關(guān)鍵字: Linux 嵌入式

在云計算與容器化技術(shù)蓬勃發(fā)展的今天,Linux網(wǎng)絡(luò)命名空間(Network Namespace)已成為構(gòu)建輕量級虛擬網(wǎng)絡(luò)的核心組件。某頭部互聯(lián)網(wǎng)企業(yè)通過命名空間技術(shù)將測試環(huán)境資源消耗降低75%,故障隔離效率提升90%。本...

關(guān)鍵字: Linux 云計算

在Linux內(nèi)核4.18+和主流發(fā)行版(RHEL 8/Ubuntu 20.04+)全面轉(zhuǎn)向nftables的背景下,某電商平臺通過遷移將防火墻規(guī)則處理效率提升40%,延遲降低65%。本文基于真實生產(chǎn)環(huán)境案例,詳解從ipt...

關(guān)鍵字: nftables Linux

在Linux設(shè)備驅(qū)動開發(fā)中,等待隊列(Wait Queue)是實現(xiàn)進(jìn)程睡眠與喚醒的核心機(jī)制,它允許進(jìn)程在資源不可用時主動放棄CPU,進(jìn)入可中斷睡眠狀態(tài),待資源就緒后再被喚醒。本文通過C語言模型解析等待隊列的實現(xiàn)原理,結(jié)合...

關(guān)鍵字: 驅(qū)動開發(fā) C語言 Linux

在Unix/Linux進(jìn)程間通信中,管道(pipe)因其簡單高效被廣泛使用,但默認(rèn)的半雙工特性和無同步機(jī)制容易導(dǎo)致數(shù)據(jù)競爭。本文通過父子進(jìn)程雙向通信案例,深入分析互斥鎖與狀態(tài)機(jī)在管道同步中的應(yīng)用,實現(xiàn)100%可靠的數(shù)據(jù)傳...

關(guān)鍵字: 管道通信 父子進(jìn)程 Linux

RTOS :RTOS的核心優(yōu)勢在于其實時性。它采用搶占式調(diào)度策略,確保高優(yōu)先級任務(wù)能夠立即獲得CPU資源,從而在最短時間內(nèi)完成處理。RTOS的實時性是通過嚴(yán)格的時間管理和任務(wù)調(diào)度算法實現(xiàn)的,能夠滿足對時間敏感性要求極高的...

關(guān)鍵字: Linux RTOS
關(guān)閉