簡介:
UFS是UNIX文件系統(tǒng)的簡稱,它來源于4.3Tahoe發(fā)行版中提供的BSD Fat Fast File System(FFS)系統(tǒng),屬于FFS的演化版本。UFS幾乎是大部分UNIX類操作系統(tǒng)默認(rèn)的基于磁盤的文件系統(tǒng),包括Solaris、Free BSD、Open BSD、Net BSD、HP-UX等,甚至Apple的OS X也能支持UFS文件系統(tǒng)。
在最初的FFS文件系統(tǒng)的設(shè)計(jì)中,為了使文件系統(tǒng)在遭到毀滅性打擊,如硬盤發(fā)生整個(gè)磁道、整個(gè)盤面或者整個(gè)柱面損壞時(shí)能夠得以恢復(fù),在文件系統(tǒng)初始化時(shí),會(huì)將文件系統(tǒng)的重要數(shù)據(jù)結(jié)構(gòu)復(fù)制到整個(gè)磁盤的多個(gè)位置,以便在發(fā)生硬件損壞時(shí)能夠讀取,而UFS文件系統(tǒng)也繼承了這些優(yōu)良的特性。
另外,為了提高運(yùn)行效率,UFS文件系統(tǒng)與磁盤的結(jié)構(gòu)也有著完美的結(jié)合,UFS將整個(gè)磁盤的所有邏輯柱面平均分配為若干個(gè)組,每組稱為一個(gè)“柱面”。在UFS內(nèi)部就用柱面組隊(duì)文件系統(tǒng)進(jìn)行分段組織和管理,每個(gè)柱面組中都有文件系統(tǒng)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的備份,所有文件在各個(gè)柱面組中相對獨(dú)立地存儲(chǔ)而又有機(jī)地結(jié)合在一起。這就使磁盤中的磁頭在訪問文件系統(tǒng)中的數(shù)據(jù)時(shí)有效地減小了擺動(dòng),提高了訪問效率。
UFS文件系統(tǒng)結(jié)構(gòu)總覽:
UFS文件系統(tǒng)在創(chuàng)建時(shí),磁盤的盤片被分成若干個(gè)柱面組,每個(gè)柱面組由一個(gè)或多個(gè)聯(lián)系的磁盤柱面組成,在文件系統(tǒng)的前部會(huì)有一個(gè)叫做“柱面組概要”的結(jié)構(gòu)對整個(gè)文件系統(tǒng)中的每個(gè)柱面組信息進(jìn)行統(tǒng)計(jì),并且在每個(gè)柱面組中還有一個(gè)“柱面組描述符”用來管理當(dāng)前柱面組。
每個(gè)柱面組又進(jìn)一步被分成若干個(gè)可尋址的塊,以控制和組織柱面組中文件的結(jié)構(gòu),所以“塊”是UFS文件系統(tǒng)中文件分配和存儲(chǔ)的基本單位,類似于FAT文件系統(tǒng)和NTFS文件系統(tǒng)中“簇”的概念。
在UFS文件系統(tǒng)中,“塊”有多種類型,每種類型的塊都具有特定的功能。UFS文件系統(tǒng)主要具有四種類型的塊:引導(dǎo)塊、超級(jí)塊、i-節(jié)點(diǎn)、數(shù)據(jù)塊。
引導(dǎo)塊:在引導(dǎo)系統(tǒng)時(shí)使用的信息
超級(jí)塊:記錄文件系統(tǒng)的詳細(xì)信息
i-節(jié)點(diǎn):記錄文件的各種信息
數(shù)據(jù)塊:存儲(chǔ)每個(gè)文件的實(shí)際內(nèi)容
UFS文件系統(tǒng)中的“塊”又被分成更小的單位,叫做“段”。在創(chuàng)建UFS文件系統(tǒng)時(shí),可定義段的大小,默認(rèn)的段大小一般為1KB。每個(gè)塊都可以分成若干個(gè)段,段大小的上限就是塊的大小,下限實(shí)際上為磁盤扇區(qū)大小,通常為512字節(jié)。
當(dāng)文件寫入文件系統(tǒng)時(shí),首先為文件分配完整的塊,然后為不滿一個(gè)塊的剩余部分分配某個(gè)塊的一個(gè)或者多個(gè)段。對于比較小的文件,首先分配段進(jìn)行存儲(chǔ)。能夠?yàn)槲募峙鋲K中的段而不是僅分配完整的塊,就減少了塊中未使用的空間,從而提高了磁盤的利用率。
在創(chuàng)建文件系統(tǒng)時(shí),選擇段的大小需要考慮時(shí)間和空間的平衡,小的段大小可節(jié)省空間,但是需要更多的時(shí)間進(jìn)行分配,通常,當(dāng)大多數(shù)文件都很大時(shí),要提高存儲(chǔ)效率,應(yīng)為文件系統(tǒng)使用較大的段大小,當(dāng)大多數(shù)文件都比較小時(shí),應(yīng)為文件系統(tǒng)使用較小的段大小。
綜上所述,UFS文件系統(tǒng)由若干個(gè)“柱面組”構(gòu)成,每個(gè)柱面組包含一定數(shù)量的“塊”,每個(gè)塊又由若干個(gè)“段”組成。“段”是UFS文件系統(tǒng)的最小存儲(chǔ)單元。每個(gè)柱面組、塊、段在文件系統(tǒng)中都有自身的編號(hào),它們的起始編號(hào)都是0.
另外,“超級(jí)塊”是UFS文件系統(tǒng)中非常重要的一個(gè)結(jié)構(gòu),其重要性類似于FAT文件系統(tǒng)和NTFS文件系統(tǒng)中的DBR,所以UFS在每個(gè)柱面組中都對超級(jí)塊做了備份,但備份的位置卻各不相同,在每個(gè)柱面組中都會(huì)發(fā)生一定的偏轉(zhuǎn),這是因?yàn)樵谠瓉淼挠脖P中每個(gè)磁道具有相同的扇區(qū)數(shù),這個(gè)就導(dǎo)致每個(gè)柱面組的第一個(gè)扇區(qū)都位于同一個(gè)盤面上。為了減小因無力故障而產(chǎn)生的數(shù)據(jù)損壞,將超級(jí)塊的備份在每個(gè)柱面組中錯(cuò)位存放就可以使它們不再存儲(chǔ)于同一個(gè)盤面,從而降低了風(fēng)險(xiǎn)。而現(xiàn)在的新式硬盤每個(gè)柱面的扇區(qū)數(shù)并不相等,所以也就不存在這樣的隱患,實(shí)際上UFS2已經(jīng)不再考慮數(shù)據(jù)錯(cuò)位存放的問題。
UFS文件系統(tǒng)的引導(dǎo)塊:
引導(dǎo)塊是UFS文件系統(tǒng)中的第一個(gè)塊,也就是0號(hào)塊。它的結(jié)構(gòu)因操作系統(tǒng)的不同而稍有區(qū)別,但一般都是由磁盤標(biāo)簽和引導(dǎo)程序組成。
只有當(dāng)UFS文件系統(tǒng)中包含操作系統(tǒng)內(nèi)核時(shí),引導(dǎo)塊中才會(huì)有引導(dǎo)程序。如果UFS文件系統(tǒng)中不保護(hù)操作系統(tǒng)內(nèi)核,引導(dǎo)塊中則沒有引導(dǎo)程序,只有磁盤標(biāo)簽。
UFS文件系統(tǒng)的超級(jí)塊:
UFS文件系統(tǒng)超級(jí)塊的重要性類似于FAT文件系統(tǒng)和NTFS文件系統(tǒng)中的DBR,但比DBR的結(jié)構(gòu)復(fù)雜很多,超級(jí)塊中記錄著許多參數(shù)[1] ,主要包括:
文件系統(tǒng)的大小和狀態(tài)
文件系統(tǒng)名稱和卷名稱
文件系統(tǒng)塊的大小及段大小
上次更新的日期和時(shí)間
柱面組的大小
柱面組中的數(shù)據(jù)塊數(shù)
柱面組概要的地址
文件系統(tǒng)狀態(tài)
最后一個(gè)掛載點(diǎn)的路徑名
由于超級(jí)塊包含文件系統(tǒng)的關(guān)鍵數(shù)據(jù),因此在創(chuàng)建文件系統(tǒng)時(shí)建立了多個(gè)超級(jí)塊,在每個(gè)柱面組內(nèi)都有一個(gè)超級(jí)塊的備份。
UFS文件系統(tǒng)的i-節(jié)點(diǎn)
UFS文件系統(tǒng)的i-節(jié)點(diǎn)用來存儲(chǔ)與文件相關(guān)的除文件名以外的所有信息,包括指向文件的硬鏈接數(shù)、文件大小、文件的時(shí)間信息、文件屬主的用戶ID、文件所屬的組ID、文件內(nèi)容存放地址的塊指針等重要信息,這些重要信息也被稱為元數(shù)據(jù)[1] 。
UFS文件系統(tǒng)的每個(gè)柱面組中都有一個(gè)自己的i-節(jié)點(diǎn)表。i-節(jié)點(diǎn)表由很多i-節(jié)點(diǎn)組成,每個(gè)文件或者目錄使用一個(gè)i-節(jié)點(diǎn)。UFS1的i-節(jié)點(diǎn)在文件系統(tǒng)創(chuàng)建時(shí)即被初始化,而UFS2的i-節(jié)點(diǎn)則在需要時(shí)才被初始化,所以當(dāng)文件系統(tǒng)中的數(shù)據(jù)塊不夠使用時(shí),UFS2能夠使用i-節(jié)點(diǎn)表中的空閑空間存放數(shù)據(jù)。
在每個(gè)柱面組的組描述符中都有一個(gè)i-節(jié)點(diǎn)位圖,用來管理i-節(jié)點(diǎn)表中的i-節(jié)點(diǎn)使用和分配情況。如果要確定一個(gè)i-節(jié)點(diǎn)屬于哪個(gè)柱面組,可以用當(dāng)前i-節(jié)點(diǎn)號(hào)對每個(gè)柱面組的i-節(jié)點(diǎn)數(shù)做取整運(yùn)算得到,而每個(gè)柱面組的i-節(jié)點(diǎn)數(shù)在超級(jí)塊和柱面組描述符中都有記錄。
UFS 日志記錄:
UFS 日志記錄會(huì)將組成一個(gè)完整 UFS 操作的多個(gè)元數(shù)據(jù)更改打包成一個(gè)事務(wù)。事務(wù)集記錄在盤上日志中,然后會(huì)應(yīng)用于實(shí)際文件系統(tǒng)的元數(shù)據(jù)。
重新引導(dǎo)時(shí),系統(tǒng)會(huì)廢棄未完成的事務(wù),但是會(huì)對已完成的操作應(yīng)用事務(wù)。文件系統(tǒng)將保持一致,因?yàn)閮H應(yīng)用了已完成的事務(wù)。即使在系統(tǒng)崩潰時(shí),也仍會(huì)保持此一致性。系統(tǒng)崩潰可能會(huì)中斷系統(tǒng)調(diào)用,并導(dǎo)致 UFS 文件系統(tǒng)出現(xiàn)不一致。
UFS 日志記錄功能有兩個(gè)好處:
如果文件系統(tǒng)已經(jīng)通過事務(wù)日志達(dá)到一致,則在系統(tǒng)崩潰或異常關(guān)機(jī)后可能不必運(yùn)行 fsck 命令。從 Solaris 9 12/02 發(fā)行版開始,UFS 日志記錄的性能已經(jīng)提高甚至超過了無日志記錄功能的文件系統(tǒng)的性能級(jí)別。這一改進(jìn)之所以能夠?qū)崿F(xiàn)是由于啟用日志記錄功能的文件系統(tǒng)可以將對相同數(shù)據(jù)的多重更新轉(zhuǎn)換為單一更新。因此,減少了磁盤操作所需的開銷。
UFS 事務(wù)日志具有以下特征:
從文件系統(tǒng)上的空閑塊分配而來
對于每 1 GB 的文件系統(tǒng),其大小約為 1 MB,最大為 64 MB
填滿時(shí)會(huì)不斷刷新
取消掛載文件系統(tǒng)或使用任何 lockfs 命令之后也會(huì)刷新。
所有 UFS 文件系統(tǒng)均缺省啟用 UFS 日志記錄。
如果需要禁用 UFS 日志記錄,請?jiān)?/etc/vfstab 文件中或手動(dòng)掛載文件系統(tǒng)時(shí),向文件系統(tǒng)的項(xiàng)添加 nologging 選項(xiàng)。
如果需要啟用 UFS 日志記錄,請?jiān)?/etc/vfstab 文件中或手動(dòng)掛載文件系統(tǒng)時(shí),在 mount 命令中指定-o logging選項(xiàng)??梢栽诎ǜ?(/) 文件系統(tǒng)的任何 UFS 文件系統(tǒng)上啟用日志記錄。另外,fsdb 命令還包含支持 UFS 日志記錄的新調(diào)試命令。
在一些操作系統(tǒng)中,啟用了日志記錄的文件系統(tǒng)稱為日記記錄文件系統(tǒng)。
內(nèi)容來自百科網(wǎng)