日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] 文件系統(tǒng)是用來管理和組織保存在磁盤驅(qū)動器上的數(shù)據(jù)的系統(tǒng)軟件,其實現(xiàn)了數(shù)據(jù)完整性的保證,也就是保證寫入磁盤的數(shù)據(jù)和隨后讀出的內(nèi)容的一致性。除了保存以文件方式存儲的

 文件系統(tǒng)是用來管理和組織保存在磁盤驅(qū)動器上的數(shù)據(jù)的系統(tǒng)軟件,其實現(xiàn)了數(shù)據(jù)完整性的保證,也就是保證寫入磁盤的數(shù)據(jù)和隨后讀出的內(nèi)容的一致性。除了保存以文件方式存儲的數(shù)據(jù)以外,一個文件系統(tǒng)同樣存儲和管理關(guān)于文件和文件系統(tǒng)自身的一些重要信息(例如:日期時間、屬主、訪問權(quán)限、文件大小和存儲位置等等)。這些信息通常被稱為元數(shù)據(jù)(metadata)。

由于為了避免磁盤訪問瓶頸效應,一般文件系統(tǒng)大都以異步方式工作,因此如果磁盤操作被突然中斷可能導致數(shù)據(jù)被丟失。例如如果出現(xiàn)這種情況:如果當你處理一個在linux的ext2文件系統(tǒng)上的文檔,突然機器崩潰會出現(xiàn)什么情況?

有這幾種可能:

當你保存文件以后,系統(tǒng)崩潰。這是最好的情況,你不會丟失任何信息。只需要重新啟動計算機然后繼續(xù)工作。

在你保存文件之前系統(tǒng)崩潰。你會丟失你所有的工作內(nèi)容,但是老版本的文檔還會存在。

當正在將保存的文檔寫入磁盤時系統(tǒng)崩潰。這是最糟的情況:新版文件覆蓋了舊版本的文件。這樣磁盤上只剩下一個部分新部分舊的文件。如果文件是二進制文件那么就會出現(xiàn)不能打開文件的情況,因為其文件格式和應用所期待的不同。

在最后這種情況下,如果系統(tǒng)崩潰是發(fā)生在驅(qū)動器正在寫入元數(shù)據(jù)時,那么情況可能更糟。這時候就是文件系統(tǒng)發(fā)生了損壞,你可能會丟失整個目錄或者整個磁盤分區(qū)的數(shù)據(jù)。

linux標準文件系統(tǒng)(ext2fs)在重新啟動時會通過調(diào)用文件掃描工具fsck試圖恢復損壞的元數(shù)據(jù)信息。由于ext2文件系統(tǒng)保存有冗余的關(guān)鍵元數(shù)據(jù)信息的備份,因此一般來說不大可能出現(xiàn)數(shù)據(jù)完全丟失。系統(tǒng)會計算出被損壞的數(shù)據(jù)的位置,然后或者是通過恢復冗余的元數(shù)據(jù)信息,或者是直接刪除被損壞或是元數(shù)據(jù)信息損毀的文件。

很明顯,要檢測的文件系統(tǒng)越大,檢測過程費時就越長。對于有幾十個G大小的分區(qū),可能會花費很長時間來進行檢測。由于Linux開始用于大型服務(wù)器中越來越重要的應用,因此就越來越不能容忍長時間的當機時間。這就需要更復雜和精巧的文件系統(tǒng)來替代ext2.

因此就出現(xiàn)了日志式文件系統(tǒng)(journalling filesystems)來滿足這樣的需求。

什么是日志式文件系統(tǒng)

這里僅僅對日志式文件系統(tǒng)進行簡單的說明。如果需要更深入的信息請參考文章日志式文件系統(tǒng),或者是日志式文件系統(tǒng)介紹。

大多數(shù)現(xiàn)代文件系統(tǒng)都使用了來自于數(shù)據(jù)庫系統(tǒng)中為了提高崩潰恢復能力而開發(fā)的日志技術(shù)。磁盤事務(wù)在被真正寫入到磁盤的最終位置以前首先按照順序方式寫入磁盤中日志區(qū)(或是log區(qū))的特定位置。

根據(jù)日志文件系統(tǒng)實現(xiàn)技術(shù)的不同,寫入日志區(qū)的信息是不完全一樣的。某些實現(xiàn)技術(shù)僅僅寫文件系統(tǒng)元數(shù)據(jù),而其他則會記錄所有的寫操作到日志中。

現(xiàn)在,如果崩潰發(fā)生在日志內(nèi)容被寫入之前發(fā)生,那么原始數(shù)據(jù)仍然在磁盤上,丟失的僅僅是最新的更新內(nèi)容。如果當崩潰發(fā)生在真正的寫操作時(也就是日志內(nèi)容已經(jīng)更新),日志文件系統(tǒng)的日志內(nèi)容則會顯示進行了哪些操作。因此當系統(tǒng)重啟時,它能輕易根據(jù)日志內(nèi)容,很快地恢復被破壞的更新。

在任何一種情況下,都會得到完整的數(shù)據(jù),不會出現(xiàn)損壞的分區(qū)的情況。由于恢復過程根據(jù)日志進行,因此整個過程會非常快只需要幾秒鐘時間。

應該注意的是使用日志文件系統(tǒng)并不意味著完全不需要使用文件掃描工具fsck了。隨機發(fā)生的文件系統(tǒng)的硬件和軟件錯誤是根據(jù)日志是無法恢復的,必須借助于fsck工具。

目前Linux環(huán)境下的日志文件系統(tǒng)

在下面的內(nèi)容里將討論三種日志文件系統(tǒng):第一種是ext3,由Linux內(nèi)核Stephen Tweedie開發(fā)。ext3是通過向ext2文件系統(tǒng)上添加日志功能來實現(xiàn)的,目前是redhat7.2的默認文件系統(tǒng);Namesys開發(fā)的ReiserFs日志式文件系統(tǒng),可以從www.namesys.com下載,目前Mandrake8.1采用該日志式文件系統(tǒng)。SGI在2001年三月發(fā)布了XFS日志式文件系統(tǒng)。可以在 oss.sgi.com/projects/xfs/下載。下面將對這三種日志文件系統(tǒng)采用不同的工具進行檢測和性能測試。

安裝ext3

關(guān)于ext3文件系統(tǒng)技術(shù)方面的問題請參考Dr. Stephen Tweedie的論文和訪談。ext3日志式文件系統(tǒng)直接來自于其祖先ext2文件系統(tǒng)。其具有完全向后兼容的關(guān)鍵特性,實際上其僅僅是在ext2日志式文件系統(tǒng)上添加了日志功能。其最大的缺點是沒有現(xiàn)代文件系統(tǒng)所具有的能提高文件數(shù)據(jù)處理速度和解壓的高性能。

ext3從 2.2.19開始是作為一個補丁方式存在的。如果希望對內(nèi)核添加對ext3文件系統(tǒng)的支持,就需要使用補丁,可以從ftp.linux.org.uk/pub/linux/sct/fs/jfs或ftp.kernel.org/pub/linux/kernel/people/sct/ext3得到補丁程序,一共需要如下文件:

* ext3-0.0.7a.tar.bz2:內(nèi)核補丁

* e2fsprogs-1.21-WIP-0601.tar.bz2 支持ext3的e2fsprogs程序套件

拷貝linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目錄下,進行解壓:

mv linux linux-old

tar -Ixvf linux-2.2.19.tar.bz2

tar -Ixvf ext3-0.0.7a.tar.bz2

cd linux

cat ……/ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1

cat ……/ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1

首先對內(nèi)核添加SGI的kdb內(nèi)核調(diào)試器補丁,第二個是ext3文件系統(tǒng)補丁。下來就需要配置內(nèi)核,對文件系統(tǒng)部分的"Enable Second extended fs development code"回答Yes.然后編譯。

內(nèi)核編譯安裝以后,需要安裝e2fsprogs軟件套件:

tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2

cd e2fsprogs-1.21

。/configure

make

make check

make install

下來要做的工作就是在分區(qū)上創(chuàng)建一個ext3文件系統(tǒng),使用新內(nèi)核重新啟動,這時候你有兩種選擇創(chuàng)建新的日志文件系統(tǒng)或者對一個已有的ext2文件系統(tǒng)升級到ext3日志文件系統(tǒng)。

對于需要創(chuàng)建新ext3文件系統(tǒng)的情況下,只需要使用安裝的e2fsprogs軟件包中的mke2fs命令加-f參數(shù)就可以創(chuàng)建新的ext3文件系統(tǒng):

mke2fs -j /dev/xxx[!--empirenews.page--]

這里/dev/xxx是希望創(chuàng)建ext3文件系統(tǒng)的新分區(qū)。-j參數(shù)表示創(chuàng)建ext3而不是ext2文件系統(tǒng)。可以使用參數(shù)"-Jsize="來指定希望的日志區(qū)大小(n單位為M)。

升級一個已有的ext2,使用tune2fs就可以了:

tune2fs -j /dev/xxx

你可以對正在加載的文件系統(tǒng)和沒有加載的文件系統(tǒng)進行升級操作。如果當前文件系統(tǒng)正在被加載,則文件。journal會在文件系統(tǒng)加載點的所在目錄被創(chuàng)建。如果是升級一個當時沒有加載的文件系統(tǒng),則使用隱含的系統(tǒng)inode來記錄日志,這時候文件系統(tǒng)的所有內(nèi)容都會被保留不被破壞。

你可以使用下面的命令加載ext3文件系統(tǒng):

mount -t ext3 /dev/xxx /mount_dir

由于ext3實際上是帶有日志功能的ext2文件系統(tǒng) ,因此一個ext3文件系統(tǒng)可以以ext2的方式被加載。

安裝XFS文件系統(tǒng)

如果需要從技術(shù)方面了解XFS文件系統(tǒng),請參考SGI的XFS文件系統(tǒng)和SGI信息頁面。也可以參考FAQ.

XFS是一個SGI開發(fā)的linux環(huán)境下的日志文件系統(tǒng),它是一個成熟的技術(shù),最初是使用在IRIX系統(tǒng)上的文件系統(tǒng)。XFS遵循GPL版權(quán)申明。目前xfs文件系統(tǒng)最新版本是1.02.可以http://linux-xfs.sgi.com/projects/xfs/102_release.html從下載得到對內(nèi)核xfs文件系統(tǒng)支持補丁或者直接下載RPM包方式的內(nèi)核,下面我們就以補丁方式說明如何對2.4.14內(nèi)核使用xfs.首先下載如下內(nèi)容

patch-2.4.14-xfs-1.0.2.bz2

patch-2.4.14-xfs-1.0.2-kdb.bz2

拷貝Linux內(nèi)核linux-2.4.2.tar.bz2到 /usr/src目錄下,修改老的內(nèi)核目錄名,然后解壓新內(nèi)核:

mv linux linux-old

tar -Ixf inux-2.4.2.tar.bz2

拷貝每個每個補丁到內(nèi)核源碼目錄下(例如:/usr/src/linux),并打補?。?/p>

zcat patch-2.4.14-xfs-1.0.2.bz2 | patch -p1

zcat patch-2.4.14-xfs-1.0.2-kdb.bz2 | patch -p1

然后配置內(nèi)核,打開文件系統(tǒng)部分的內(nèi)核選項:"XFS filesystem support" (CONFIG_XFS_FS)和"


age Buffer support" (CONFIG_PAGE_BUF)。同時需要升級下面這些系統(tǒng)工具到下面或更高的版本:

modutils-2.4.0 autoconf-2.13 e2fsprogs-devel-1.18

安裝新內(nèi)核并重啟服務(wù)器。

然后下載xfs工具。這個軟件包包括下面的命令來處理文件系統(tǒng),使用下面的命令來安裝該軟件包::

tar -zxf xfsprogs-1.2.0.src.tar.gz

cd xfsprogs-1.2.0

make configure

make

make install

安裝這些命令以后,就可以創(chuàng)建新的XFS文件系統(tǒng):

mkfs -t xfs /dev/xxx

如果xxx是一個已經(jīng)存在的文件系統(tǒng),那么就需要使用"-f"參數(shù)來創(chuàng)建新分區(qū),但是記得這將會破壞該分區(qū)的所有數(shù)據(jù)。

mkfs -t xfs -f /dev/xxx

創(chuàng)建以后就可以使用基于下面的命令加載新文件系統(tǒng):

mount -t xfs /dev/xxx /mount_dir

安裝ReiserFS文件系統(tǒng)

如果希望更多地從技術(shù)方面了解reiserFS文件系統(tǒng),請參考NAMESYS和FAQ.

ReiserFS文件系統(tǒng)從2.4.1-pre4開始就是Linux內(nèi)核的正式支持的文件系統(tǒng)了。為了使用reiserFS文件系統(tǒng)那你首先需要在系統(tǒng)上安裝文件系統(tǒng)支持工具(如:創(chuàng)建ReiserFS文件系統(tǒng)的mkreiserfs工具)。最新的ReiserFS文件系統(tǒng)版本可以以補丁的方式添加到2.2.x或者2.4.x內(nèi)核中。這里我們以2.2.19為例:

第一步,首先下在內(nèi)核源碼,并下在ReiserFS文件系統(tǒng)的2.2.19補丁 ,目前補丁最新版本是linux-2.2.19-reiserfs-3.5.34-patch.bz2.同時應該下載工具軟件包:reiserfsprogs-3.x.0j.tar.gz.

然后解壓內(nèi)核源碼和補丁包到/usr/src中:

tar -Ixf linux-2.2.19.tar.bz2

bzcat linux-2.2.19-reiserfs-3.5.34-patch.bz2 | patch -p0

編譯內(nèi)核支持reiserfs,安裝內(nèi)核。然后安裝文件系統(tǒng)工具軟件:

cd /usr/src/linux/fs/reiserfs/utils

make

make install

安裝新內(nèi)核并重新啟動?,F(xiàn)在就可以創(chuàng)建新的reiserfs文件系統(tǒng),并加載:

mkreiserfs /dev/xxxx

mount -t reiserfs /dev/xxx /mount_dir

文件系統(tǒng)性能測試

測試環(huán)境使用的計算機環(huán)境如下:Pentium III - 16 Mb RAM - 2 Gb HD,操作系統(tǒng)為RedHat6.2.所有的文件系統(tǒng)都能正常工作,所以就進行benchmark分析來對它們進行性能比較。首先我直接拔掉系統(tǒng)電源以模擬系統(tǒng)掉電情況,以測試日志文件系統(tǒng)恢復過程。所有的文件系統(tǒng)都成功地經(jīng)過了文件掃描檢測階段,在數(shù)秒以后系統(tǒng)都經(jīng)過了掃描然后正常啟動了系統(tǒng)。

下一步就采用了bonnie++性能測試程序(www.coker.com.au/bonnie++)進行測試,這個程序?qū)σ粋€文件進行數(shù)據(jù)庫類型的訪問,進行了創(chuàng)建、讀和刪除小文件,這些操作對于Squid、INN或者Maildir格式的郵件服務(wù)器程序(qmail)是最常見的操作。性能測試命令為:

bonnie++ -d/work1 -s10 -r4 -u0

其對加載在/work1目錄下的文件系統(tǒng)進行了10Mb(-s10)的測試。因此在執(zhí)行測試之前必須創(chuàng)建適當類型的文件系統(tǒng)并加載到目錄/work1下。其他的參數(shù)指定內(nèi)存大小(-r4)的M數(shù),和以root身份運行測試程序,測試結(jié)果如下:

每種測試都有兩組數(shù)據(jù):文件系統(tǒng)速度(K/sec)和CPU占用率(%CPU)。速度越高,文件系統(tǒng)越好。而對于CPU率來說,數(shù)字越小性能越好??梢钥吹絉eiserfs文件系統(tǒng)在文件操作方面(Sequential Create和Random Create部分的) 的性能最好,超出其他文件系統(tǒng)10倍之多。在其他方面(Sequential Output和Sequential Input)則和其他文件系統(tǒng)性能不相上下。對于其他文件系統(tǒng)則沒有特別明顯的區(qū)別。XFS性能接近ext2文件系統(tǒng),ext3文件系統(tǒng)則比ext2要稍微慢上一些(因為記錄日志需要一些額外的時間)。

最后使用從www.namesys.com得到的性能測試程序mongo,并對其進行了修改以對三種日志文件系統(tǒng)進行測試。這里在mongo.pl程序中添加了添加了加載xfs和ext3文件系統(tǒng)的命令,并對其進行格式化處理,然后就開始性能測試分析。 該腳本格式劃分區(qū)/dev/xxxx,加載其并在每個階段運行指定數(shù)目的進程:創(chuàng)建、拷貝、符號連接處理、讀、顯示文件狀態(tài)信息、重命名和刪除文件。同時,該程序在創(chuàng)建和拷貝階段以后會計算分段數(shù)(fragmentation)。[!--empirenews.page--]

Fragm = number_of_fragments / number_of_files

可以在結(jié)果文件中得到同樣的測試比較結(jié)果:

log - 原始結(jié)果

log.tbl - 比較程序的輸出結(jié)果

log_table - 表格式的結(jié)果

下面的命令進行測試:

mongo.pl ext3 /dev/hda3 /work1 logext3 1

如果要測試其他文件系統(tǒng),就需要把上面命令的參數(shù)中的ext3修改為reiserfs或xfs.其他參數(shù)分別為要加載的分區(qū),加載路徑,保存測試結(jié)果的文件名及啟動的進程數(shù)。

下面的表格是測試結(jié)果。數(shù)據(jù)單位為秒。值越低性能越好。第一個表格測試使用的數(shù)據(jù)塊大小為100字節(jié),第二個表格為1000字節(jié),最后一個為10000字節(jié)

從上面的表格可以看到ext3在狀態(tài)刪除和重命名方面要性能更好一些,而ReiserFS文件系統(tǒng)在文件創(chuàng)建和拷貝性能表現(xiàn)更出色。同時也可以看到reiserFS正如其技術(shù)文檔提到的其在小文件處理方面性能相當出色。

結(jié)論

目前Linux至少有兩個健壯可靠的日志文件系統(tǒng)可供選擇(XFS和reiserFS),其都得到了廣泛的應用。例如Mandrake8.1就默認支持reiserFS文件系統(tǒng)。

從性能測試的結(jié)果可以看到,reiserFS是最好的選擇。

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

CPU親和度通過限制進程或線程可以運行的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)在高負載場景下的穩(wěn)定性與響應速度。本文通過實戰(zhàn)案例解析這兩個...

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

北京2025年7月30日 /美通社/ -- 近日,北京積算科技有限公司(以下簡稱"積算科技")宣布其算力服務(wù)平臺上線赤兔推理引擎。積算科技PowerFul-AI應用開發(fā)平臺與赤兔合作,打造高性價比的模...

關(guān)鍵字: 模型 RF POWER PSE

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

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

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

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

Linux內(nèi)核中的信號量(Semaphore)是一種用于資源管理的同步原語,它允許多個進程或線程對共享資源進行訪問控制。信號量的主要作用是限制對共享資源的并發(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)進程睡眠與喚醒的核心機制,它允許進程在資源不可用時主動放棄CPU,進入可中斷睡眠狀態(tài),待資源就緒后再被喚醒。本文通過C語言模型解析等待隊列的實現(xiàn)原理,結(jié)合...

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

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

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