1 HFS文件系統(tǒng)概念
分層文件系統(tǒng)(Hierarchical File System,HFS)是一種由蘋果電腦開發(fā),并使用在Mac OS上的文件系統(tǒng)。最初被設(shè)計(jì)用于軟盤和硬盤,同時(shí)也可以在在只讀媒體如CD-ROM上見到。
2 HFS文件系統(tǒng)開發(fā)過程
HFS首次出現(xiàn)在1985年9月17日,作為Macintosh電腦上新的文件系統(tǒng)。它取代只用于早期Mac型號所使用的平面文件系統(tǒng)Macintosh File System(MFS)。因?yàn)镸acintosh電腦所產(chǎn)生的數(shù)據(jù),比其它通常的文件系統(tǒng),如DOS使用的FAT或原始Unix文件系統(tǒng)所允許存儲(chǔ)的數(shù)據(jù)更多。蘋果電腦開發(fā)了一種新式更適用的文件系統(tǒng),而不是采用現(xiàn)有的規(guī)格。例如,HFS允許文件名最多有31個(gè)字符的長度,支持metadata和雙分支(每個(gè)文件的數(shù)據(jù)和資源支分開存儲(chǔ))文件。
盡管HFS象其它大多數(shù)文件系統(tǒng)一樣被視為專有的格式,因?yàn)橹挥兴鼮榇蠖鄶?shù)最新的操作系統(tǒng)提供了很好的通用解決方法以存取HFS格式磁盤。
在1998年,蘋果電腦發(fā)布了HFS Plus,其改善了HFS對磁盤空間的地址定位效率低下,并加入了其它的改進(jìn)。當(dāng)前版本的Mac OS仍舊支持HFS,但從Mac OS X開始HFS卷不能作為啟動(dòng)用。
3 構(gòu)成方式
分層文件系統(tǒng)把一個(gè)卷分為許多512字節(jié)的“邏輯塊”。這些邏輯塊被編組為“分配塊”,這些分配塊可以根據(jù)卷的尺寸包含一個(gè)或多個(gè)邏輯塊。HFS對地址分配塊使用16位數(shù)值,分配塊的最高限制數(shù)量是65536。
組成一個(gè)HFS卷需要下面的五個(gè)結(jié)構(gòu):
1.卷的邏輯塊0和1是啟動(dòng)塊,它包含了系統(tǒng)啟動(dòng)信息。例如,啟動(dòng)時(shí)載入的系統(tǒng)名稱和殼(通常是Finder)文件。
2.邏輯塊2包含主目錄塊(Master Directory Block,簡稱MDB)。
3.邏輯塊3是卷位圖(Volume Bitmap)的啟動(dòng)塊,它追蹤分配塊使用狀態(tài)。
4.總目錄文件(Catalog File)是一個(gè)包含所有文件的記錄和儲(chǔ)存在卷中目錄的B*-tree。
5.擴(kuò)展溢出文件(Extent Overflow File)是當(dāng)最初總目錄文件中三個(gè)擴(kuò)展占用后,另外一個(gè)包含額外擴(kuò)展記錄的分配塊對應(yīng)信息的B*-tree。
4 HFS和HFS+文件系統(tǒng)異同比較
HFS+文件系統(tǒng)是HFS 文件系統(tǒng)的更新版本,它改進(jìn)了HFS 文件系統(tǒng)的結(jié)構(gòu)和對數(shù)據(jù)管
理中存在的不足。HFS+文件系統(tǒng)的主要特點(diǎn)體現(xiàn)在以下幾個(gè)方面:
(1)采用32bit 記錄分配塊數(shù)量
HFS 和HFS+文件系統(tǒng)對磁盤卷采用分塊進(jìn)行分配,將一個(gè)卷分成等大的分配塊。HFS
文件系統(tǒng)采用16bit 來記錄分配塊的數(shù)量,最多只能描述216個(gè)分配塊。而對于HFS+文件系
統(tǒng),采用32bit 來記錄分配塊的數(shù)量,最多能描述232 個(gè)分配塊。對于Mac 系統(tǒng)上的非空數(shù)
據(jù),都必須占用整數(shù)個(gè)分配塊,也就是說,即使一個(gè)數(shù)據(jù)只有一個(gè)字節(jié),也要占用一個(gè)分配
塊。而HFS+文件系統(tǒng)增大了每個(gè)卷分配塊的數(shù)量,可以使分配塊的單位空間更小,從而達(dá)
到減少存儲(chǔ)空間浪費(fèi)的目的。
(2)目錄樹節(jié)點(diǎn)大小增加到4KB
HFS 文件系統(tǒng)的目錄樹節(jié)點(diǎn)大小為512 字節(jié),由于HFS+文件系統(tǒng)目錄樹索引節(jié)點(diǎn)需要
存儲(chǔ)附加指針和節(jié)點(diǎn)描述符兩個(gè)關(guān)鍵值,HFS+文件系統(tǒng)的目錄樹節(jié)點(diǎn)大小增加到4KB。
(3)單一文件大小得到提升
HFS 文件系統(tǒng)的單一文件大小上限為231bit,而HFS+文件系統(tǒng)的單一文件大小最大可
達(dá)到263bit。
(4)支持長文件名
HFS 文件系統(tǒng)對文件名最長支持到31 個(gè)字符,而HFS+文件系統(tǒng)對文件名采用Unicode
編碼,最長達(dá)到255 個(gè)字符。
5 HFS文件系統(tǒng)恢復(fù)案例詳解
在HFS+文件系統(tǒng)里,卷頭位于卷的2號扇區(qū),并在卷尾倒數(shù)第二個(gè)扇區(qū)有個(gè)備份,下圖是一個(gè)完整的卷頭的圖:
各字節(jié)含義:
0x00~0x01:2個(gè)字節(jié),簽名標(biāo)志0x482B(H+);
0x02~0x03:2個(gè)字節(jié),版本;
0x04~0x07:4個(gè)字節(jié),屬性;
0x08~0x0B:4個(gè)字節(jié),最后裝載版本;
0x0C~0x0F:4個(gè)字節(jié),日志信息塊;
0x10~0x13:4個(gè)字節(jié),建立時(shí)間;
0x14~0x17:4個(gè)字節(jié),修改時(shí)間;
0x18~0x1B:4個(gè)字節(jié),備份時(shí)間;
0x00~0x23:4個(gè)字節(jié),文件數(shù);
0x24~0x27:4個(gè)字節(jié),文件夾數(shù);
0x28~0x2B:4個(gè)字節(jié),分配塊大小字節(jié)數(shù),默認(rèn)為4096;
0x2C~0x2F:4個(gè)字節(jié),總塊數(shù);
0x30~0x33:4個(gè)字節(jié),空閑塊數(shù);
0x34~0x37:4個(gè)字節(jié),下一個(gè)分配塊號;
0x38~0x3B:4個(gè)字節(jié),資源交叉組大小;
0x3C~0x3F:4個(gè)字節(jié),數(shù)據(jù)交叉組大小;
0x40~0x43:4個(gè)字節(jié),下一目錄ID;
0x44~0x47:4個(gè)字節(jié),寫入計(jì)數(shù);
下圖是winhex模板分析的結(jié)果
借助于對HFS+卷頭的理解,我們可以很容易的用R-studio來恢復(fù)蘋果系統(tǒng)的數(shù)據(jù).如果要分析蘋果系統(tǒng)的raid,我們還要弄懂i結(jié)點(diǎn)的知識.