HFS+檔案系統的發展
早期的Apple電腦使用MFS檔案系統,它是一種平面檔案系統。到了1985年9月17日,Apple發布了HFS檔案系統,它取代了MFS成為Apple電腦上新的檔案系統。
1998年1月19日,Apple在其最新發布的Mac OS 8.1系統中推出HFS plus 檔案系統,也寫作“HFS+”,同時HFS+檔案系統也被稱為Mac OS Extended (Mac OS擴展系統)。HFS+檔案系統改善了HFS對磁碟空間地址定位效率低下的問題,並加入了很多新的改進。
2002年11月11日,Apple推出了Mac OS X v10.2.2版本,該版本在HFS+檔案系統中增加了可選日誌功能,以提高數據的可靠性。但日誌型的HFS+主要套用於Mac OS X的伺服器中,客戶端則需要通過命令行的方式訪問日誌型的HFS+檔案系統。
2003年10月24日,在Apple發布的Mac OS X v10.3版本中,HFS+檔案系統全面地支持日誌功能,所有的HFS+宗卷將被默認為日誌型HFS+檔案系統,並且這種具有日誌功能的HFS+宗卷被定義為“HFSJ”
HFS+檔案系統的特點
相對於HFS,HFS+檔案系統主要有以下特點。
支持更多的塊
Mac系統把硬碟內的空間分為一個個的邏輯塊,每個邏輯塊大小為512位元組,所以邏輯塊其實就是扇區。檔案系統中檔案的分配單元並不是扇區,而是分配塊,每個分配塊的大小為2扇區,所以分配塊也就相當於FAT檔案系統及NTFS檔案系統中的簇。
HFS用16位記錄塊的數量,這樣在一個宗卷中最多可以管理2個塊。而HFS+用32為記錄塊的數量,所以一個宗卷中最多可以管理2個塊。
對於相同大小的宗卷,塊數增加了就意味著可以減小塊的大小,這樣就可以減小存儲空間的浪費,同時也能夠增加檔案系統中存儲檔案的個數。
支持更大的檔案
在HFS檔案系統中,檔案的大小用32位描述,而在HFS+檔案系統中用64為描述,所以能夠支持更大的檔案。
支持更長的檔案名稱
HFS檔案系統的檔案名稱只能達到31個字元的長度,而HFS+檔案系統則支持255個字元長度的Unicode碼檔案名稱。
支持更大的節點
HFS檔案系統的節點大小為512位元組,而HFS+檔案系統則支持4096位元組的節點。
HFS+檔案系統的元檔案
HFS+檔案系統中有5種特殊的檔案,用來保存檔案系統結構的數據性數據和屬性,我們稱這5個檔案為“元檔案”,它們分別是分配檔案、盤區溢出檔案、編錄檔案、屬性檔案、啟動檔案。
HFS+檔案系統的元檔案只有數據分支,沒有資源分支,它們的起始地址和大小都在檔案系統的卷頭中描述。
分配檔案(Allocation File)
分配檔案的作用是描述檔案系統中的塊是空閒的還是已被占用,它相當於NTFS檔案系統中的點陣圖檔案。
盤區溢出檔案(Extents )
HFS+檔案系統的“盤區”是為“分支”分配的一系列連續的塊,並用“起始塊號”和“塊數”描述“盤區”的所在地址。對於一個用戶檔案,每個分支前8個盤區信息保存在宗卷的編錄檔案中,如果檔案的分支大於8個盤區,超出的盤區信息存放在“盤區溢出檔案”中,檔案系統只要通過跟蹤“分支”的“盤區”就能確定塊的具體歸屬了。
另外,盤區溢出檔案也可以為元檔案保存除盤區溢出檔案自身以外的其他附加盤區信息,不過有一個元檔案例外,這個例外就是啟動元檔案。如果啟動檔案需要的盤區數量大於在卷頭中所描述的8個,也因此而需要用盤區溢出檔案來保存的話,系統對它的訪問就會變得很困難,也就無法達到快速啟動的目的。所以,在實際中啟動檔案將單獨保存,這樣就不需要在盤區溢出檔案中保存它的額外盤區信息了。
編錄檔案(Catalog File)
編錄檔案用來描述檔案系統內的檔案和目錄的層次結構,該檔案記憶體存儲著檔案系統中所有檔案和目錄的重要信息。
編錄檔案用B—樹的形式組織目錄結構,B—樹能夠快速而有效地在一個層次很多的大目錄中尋找目標檔案。
屬性檔案(Attributes File)
屬性檔案的作用是保存檔案及目錄的附加信息,它的組織結構與編錄檔案一樣,都採用B—樹結構。
啟動檔案(Startup File)
啟動檔案是一個為了從HFS+宗卷上啟動非Mac OS系統而設定的元檔案。
另外,在HFS+檔案系統中還有一個特殊的檔案,用來管理檔案系統中有缺陷的塊地址,該檔案被稱為“壞塊檔案”。
HFS+檔案系統結構
HFS+宗卷的前兩個扇區是保留不用的,一般為空扇區,沒有任何數據,但這兩個保留不用的扇區所在的塊在分配檔案內會被標記為“已使用” 。
宗卷的第三個扇區也就是2號扇區稱為“卷頭”。
檔案系統中的5個元檔案並沒有被存放在一起,而是在宗卷中分布存儲,它們的地址在卷頭中有具體的描述。
在宗卷的倒數第二個扇區處,是卷頭的一個備份,最後一個扇區則保留不用。
如果宗卷所包含的扇區數不是塊大小的整數倍,那么宗卷的最後一個塊的後面就會有不夠一個塊大小的幾個扇區,這幾個扇區不再檔案系統的塊計數之內,這時備份卷頭的位置就會在最後一個塊之外,在這種情況下,最後一個塊也會被保留而不被占用。