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