6.3 文件系統(tǒng)與數(shù)據(jù)資料

2023-05-11 15:36 更新

用戶在硬件存儲設(shè)備中執(zhí)行的文件建立、寫入、讀取、修改、轉(zhuǎn)存與控制等操作都是依靠文件系統(tǒng)來完成的。文件系統(tǒng)的作用是合理規(guī)劃硬盤,以保證用戶正常的使用需求。Linux系統(tǒng)支持?jǐn)?shù)十種的文件系統(tǒng),而最常見的文件系統(tǒng)如下所示。

Ext3:是一款日志文件系統(tǒng),能夠在系統(tǒng)異常宕機(jī)時(shí)避免文件系統(tǒng)資料丟失,并能自動修復(fù)數(shù)據(jù)的不一致與錯(cuò)誤。然而,當(dāng)硬盤容量較大時(shí),所需的修復(fù)時(shí)間也會很長,而且也不能百分之百地保證資料不會丟失。它會把整個(gè)磁盤的每個(gè)寫入動作的細(xì)節(jié)都預(yù)先記錄下來,以便在發(fā)生異常宕機(jī)后能回溯追蹤到被中斷的部分,然后嘗試進(jìn)行修復(fù)。

Ext4:Ext3的改進(jìn)版本,作為RHEL 6系統(tǒng)中的默認(rèn)文件管理系統(tǒng),它支持的存儲容量高達(dá)1EB(1EB=1,073,741,824GB),且能夠有無限多的子目錄。另外,Ext4文件系統(tǒng)能夠批量分配block塊,從而極大地提高了讀寫效率。

XFS:是一種高性能的日志文件系統(tǒng),而且是RHEL 7中默認(rèn)的文件管理系統(tǒng),它的優(yōu)勢在發(fā)生意外宕機(jī)后尤其明顯,即可以快速地恢復(fù)可能被破壞的文件,而且強(qiáng)大的日志功能只用花費(fèi)極低的計(jì)算和存儲性能。并且它最大可支持的存儲容量為18EB,這幾乎滿足了所有需求。

RHEL 7系統(tǒng)中一個(gè)比較大的變化就是使用了XFS作為文件系統(tǒng),這不同于RHEL 6使用的Ext4。從紅帽公司官方發(fā)布的說明來看,這確實(shí)是一個(gè)不小的進(jìn)步,但是劉遄老師在實(shí)測中發(fā)現(xiàn)并不完全屬實(shí)。因?yàn)閱渭兙蜏y試一款文件系統(tǒng)的“讀取”性能來說,到底要讀取多少個(gè)文件,每個(gè)文件的大小是多少,讀取文件時(shí)的CPU、內(nèi)存等系統(tǒng)資源的占用率如何,以及不同的硬件配置是否會有不同的影響,因此在充分考慮到這些不確定因素后,實(shí)在不敢直接照抄紅帽官方的介紹。我個(gè)人認(rèn)為XFS雖然在性能方面比Ext4有所提升,但絕不是壓倒性的,因此XFS文件系統(tǒng)最卓越的亮點(diǎn)應(yīng)該當(dāng)屬可支持高達(dá)18EB的存儲容量吧。

就像拿到了一張未裁切的完整紙張那樣,我們首先要進(jìn)行裁切以方便使用,然后在裁切后的紙張上畫格以便能書寫工整。在拿到了一塊新的硬盤存儲設(shè)備后,也需要先分區(qū),然后再格式化文件系統(tǒng),最后才能掛載并正常使用。硬盤的分區(qū)操作取決于您的需求和硬盤大小;您也可以選擇不進(jìn)行分區(qū),但是必須對硬盤進(jìn)行格式化處理。接下來劉遄老師再向大家簡單地科普一下硬盤在格式化后發(fā)生的事情。再次強(qiáng)調(diào),不用刻意去記住,只要能看懂就行了。

日常在硬盤需要保存的數(shù)據(jù)實(shí)在太多了,因此Linux系統(tǒng)中有一個(gè)名為super block的“硬盤地圖”。Linux并不是把文件內(nèi)容直接寫入到這個(gè)“硬盤地圖”里面,而是在里面記錄著整個(gè)文件系統(tǒng)的信息。因?yàn)槿绻阉械奈募?nèi)容都寫入到這里面,它的體積將變得非常大,而且文件內(nèi)容的查詢與寫入速度也會變得很慢。Linux只是把每個(gè)文件的權(quán)限與屬性記錄在inode中,而且每個(gè)文件占用一個(gè)獨(dú)立的inode表格,該表格的大小默認(rèn)為128字節(jié),里面記錄著如下信息:

該文件的訪問權(quán)限(read、write、execute);

該文件的所有者與所屬組(owner、group);

該文件的大?。╯ize);

該文件的創(chuàng)建或內(nèi)容修改時(shí)間(ctime);

該文件的最后一次訪問時(shí)間(atime);

該文件的修改時(shí)間(mtime);

文件的特殊權(quán)限(SUID、SGID、SBIT);

該文件的真實(shí)數(shù)據(jù)地址(point)。

而文件的實(shí)際內(nèi)容則保存在block塊中(大小可以是1KB、2KB或4KB),一個(gè)inode的默認(rèn)大小僅為128B(Ext3),記錄一個(gè)block則消耗4B。當(dāng)文件的inode被寫滿后,Linux系統(tǒng)會自動分配出一個(gè)block塊,專門用于像inode那樣記錄其他block塊的信息,這樣把各個(gè)block塊的內(nèi)容串到一起,就能夠讓用戶讀到完整的文件內(nèi)容了。對于存儲文件內(nèi)容的block塊,有下面兩種常見情況(以4KB的block大小為例進(jìn)行說明)。

情況1:文件很?。?KB),但依然會占用一個(gè)block,因此會潛在地浪費(fèi)3KB。

情況2:文件很大(5KB),那么會占用兩個(gè)block(5KB-4KB后剩下的1KB也要占用一個(gè)block)。

計(jì)算機(jī)系統(tǒng)在發(fā)展過程中產(chǎn)生了眾多的文件系統(tǒng),為了使用戶在讀取或?qū)懭胛募r(shí)不用關(guān)心底層的硬盤結(jié)構(gòu),Linux內(nèi)核中的軟件層為用戶程序提供了一個(gè)VFS(Virtual File System,虛擬文件系統(tǒng))接口,這樣用戶實(shí)際上在操作文件時(shí)就是統(tǒng)一對這個(gè)虛擬文件系統(tǒng)進(jìn)行操作了。圖6-5所示為VFS的架構(gòu)示意圖。從中可見,實(shí)際文件系統(tǒng)在VFS下隱藏了自己的特性和細(xì)節(jié),這樣用戶在日常使用時(shí)會覺得“文件系統(tǒng)都是一樣的”,也就可以隨意使用各種命令在任何文件系統(tǒng)中進(jìn)行各種操作了(比如使用cp命令來復(fù)制文件)。

圖6-5 VFS的架構(gòu)示意圖

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號