<tbody id="egica"><noscript id="egica"></noscript></tbody>
  •  您好,歡迎訪問飛客數據恢復合肥分公司網站,我們為您提供最專業的數據恢復服務  

    綜合欄目

    合肥飛客資訊
    蘋果數據恢復
    硬盤開盤數據恢復
    業內存儲資訊
     

    蘋果數據恢復

     
    蘋果HFS+文件系統解析
    添加時間: 2013-3-25 來源: 作者: 點擊數:14467
    HFS+文件系統結構原理分析
     
    1. 引言
    HFS+文件系統是HFS 文件系統的更新版本,它改進了HFS 文件系統的結構和對數據管
    理中存在的不足。HFS+文件系統的主要特點體現在以下幾個方面:
    (1)采用32bit 記錄分配塊數量
    HFS 和HFS+文件系統對磁盤卷采用分塊進行分配,將一個卷分成等大的分配塊。HFS
    文件系統采用16bit 來記錄分配塊的數量,最多只能描述216個分配塊。而對于HFS+文件系
    統,采用32bit 來記錄分配塊的數量,最多能描述232 個分配塊。對于Mac 系統上的非空數
    據,都必須占用整數個分配塊,也就是說,即使一個數據只有一個字節,也要占用一個分配
    塊。而HFS+文件系統增大了每個卷分配塊的數量,可以使分配塊的單位空間更小,從而達
    到減少存儲空間浪費的目的。
    (2)目錄樹節點大小增加到4KB
    HFS 文件系統的目錄樹節點大小為512 字節,由于HFS+文件系統目錄樹索引節點需要
    存儲附加指針和節點描述符兩個關鍵值,HFS+文件系統的目錄樹節點大小增加到4KB。
    (3)單一文件大小得到提升
    HFS 文件系統的單一文件大小上限為231bit,而HFS+文件系統的單一文件大小最大可
    達到263bit。
    (4)支持長文件名
    HFS 文件系統對文件名最長支持到31 個字符,而HFS+文件系統對文件名采用Unicode
    編碼,最長達到255 個字符。
    蘋果hfs+文件系統結構圖
    2. 基本概念
    不同文件系統的體系結構和對數據的管理方式也都采用了不同的方式,每種文件系統都
    有自己特有的一些結構和文件,每種結構和文件都有特定的意義和概念。
    2.1 卷頭
    卷頭內存儲著各種與卷相關的信息,如卷建立的時間、卷大小等,每個HFS+都有必須
    由一個卷頭,卷頭通常位于2 號扇區。卷頭有一個備份存儲在卷的倒數第二個扇區。
    2.2 域溢出文件
    HFS+通過跟蹤“叉”的“域”來確定哪些分配塊屬于這個“叉”!坝颉笔菫椤安妗狈
    1
    配的一系列連續的分配塊,用分配塊號和分配塊的數量來描述。對于一個用戶文件,每個叉
    的前8 個域的信息保存在卷的總目錄文件中,如果多于8 個,超出的其他域的信息保存在域
    溢出文件中。
    2.3 目錄文件
    目錄文件用來描述卷內的文件和目錄的層次結構,存儲著卷內所有文件和目錄的重要信
    息,采用B-tree 結構可以快速的在目錄中尋找文件。
    2.4 屬性文件
    屬性文件的結果和目錄文件一樣,采用B-tree 結構,它的作用是用來保存文件或目錄的
    信息。
    2.5 壞塊文件
    磁盤上的缺陷或受損位置由壞塊文件來記錄,以免文件系統對磁盤缺陷位置進行分配。
    3. 文件系統總體布局
    HFS+卷由七種類型的區域組成,分別為用戶文件、分配文件、目錄文件、域溢出文件、
    屬性文件、啟動文件和未使用空間。HFS+卷開始和結尾分別保留1024bytes 512bytes,卷
    頭一般位于第二扇區,并在倒數第二扇區有卷頭的備份。
    4. 卷頭數據結構
    每個HFS+卷都有一個卷頭,它開始于1024 字節處,記錄著其他關鍵結構位置和大小
    的信息,在卷的倒數第二個扇區,有一個卷頭的備份,用來在文件系統出現問題時進行修復。
    卷頭的數據結構如下表:
    表1 卷頭數據結構
    Tab.1 Volume the first data structure
    字節偏移(16 進制)字節數簡要說明
    0000~0001 2 簽名
    0002~0003 2 版本
    0004~0007 4 屬性
    0008~000B 4 最后裝載版本
    000C~000F 4 日志信息塊
    0010~0013 4 建立時間
    0014~0017 4 修改時間
    0018~001B 4 備份時間
    001C~001F 4 最后檢查時間
    0020~0023 4 文件數
    0024~0027 4 文件夾數
    0028~002B 4 分配塊大小字節數
    002C~002F 4 總塊數
    0030~0033 4 空閑塊數
    0034~0037 4 下一分配塊號
     
    2
    5. 節點
    在HFS+文件系統中,共有四種節點,分別是頭節點、圖節點、索引節點和葉節點。所
    有的節點都具有相同的基本結構,主要包括三個部分,分別是位于節點開始處的節點描述符、
    檔案列表和位于節點尾部的檔案起始偏移量列表。
    5.1 頭節點
    B-tree 文件的第一個節點就是頭節點,它包含整個B-tree 文件的基本信息。頭節點由頭
    節點描述符和檔案列表組成,其中檔案列表包括B-tree 頭檔案、保留檔案和B-tree 位圖檔案。
    5.1.1節點描述符的數據結構
    表2 節點描述符的數據結構
    Tab.2 Node data structure descriptor
    5.1.2頭檔案的數據結構
    表3 頭檔案的數據結構
    Tab.3 The first file data structure
    0038~003B 4 資源叉塊組大小
    003C~003F 4 數據叉塊組大小
    0040~0043 4 下一目錄ID
    0044~0047 4 寫入計數
    0048~004F 4 文檔編碼位圖
    0050~006F 32 Finder 信息
    0070~00BF 80 分配文件信息
    00C0~010F 80 域溢出文件信息
    0110~015F 80 目錄文件信息
    0160~01AF 80 屬性文件信息
    01B0~01FF 80 啟動文件信息
    字節偏移(16 進制)字節數簡要說明
    0x00~0x03 4 第一個圖節點的節點號
    0x04~0x07 4 前一個節點的節點號
    0x08~0x08 1 節點類型
    0x09~0x09 1 節點在B-tree 結構中的高度
    0x0A~0x0B 2 頭節點中含有的檔案數
    0x0C~0x0D 2 保留
    字節偏移(16 進制)字節數簡要說明
    0x00~0x01 2 本節點在B-tree 中的深度
    0x02~0x05 4 根節點的節點號
    0x06~0x09 4 所有葉節點總的檔案數
    0x0A~0x0D 4 第一個葉節點節點號
    0x0E~0x11 4 最后一個葉節點節點號
    0x12~0x13 2 節點的大小字節數
    0x14~0x15 2 索引或葉節點中一個key 的最大長度
     
    3
    5.2 索引節點
    索引節點的檔案項使用key 結構,key 結構包含一個key 長度(KeyLength),之后是key
    本身,之后是檔案的數據內容。
    5.2.1 key長度
    key 長度指的是緊跟在后面的key 的長度,不包含用以記錄其長度的這個數據本身所占
    的空間。key 長度值的大小只有兩種,即1 個字節或者兩個字節。
    5.2.2 key
    key 的作用是說明本檔案項的一些基本屬性,如文件名等,對于B-tree 中節點的連接和
    父子目錄及文件間的連接起重要作用。
    5.2.3數據
    數據總是起始于偶數字節并占用偶數倍字節數,數據的格式取決于節點的類型。
    5.3 圖節點和葉節點
    (1)圖節點實在頭節點的位圖檔案無法完全記錄B-tree 中的所有節點的時候來存儲分配
    數據。當使用圖節點來描述數據時,頭節點描述符中的0x00~0x03 字節處的fLink 位置指出
    第一個圖節點的節點號。圖節點由節點描述符和一個位圖檔案組成。
    (2)葉節點位于B-tree 結構的最末端,由數據檔案組成,這些數據檔案同樣使用key 結
    構。從節點描述符0x08 字節處的值可以判斷一個節點是否為葉節點,葉節點此處的值為
    “FF”。
    6. 目錄文件
    6.1 檔案項的key部分
    (1)數據結構
    表4 檔案項key 數據結構
    Tab.4 File of key data structure
    (2)詳細解釋
    00~03:4 個字節,文件或文件夾的父目錄ID。
    04+:0~510 個字節,描述該文件或文件夾在其父目錄中的名字,使用Unicode 編碼。
    0x16~0x19 4 B-tree 中節點總數
    0x1A~0x1D 4 B-tree 中未使用節點總數
    0x1E~0x1F 2 保留
    0x20~0x23 4 不使用
    0x24~0x24 1 B-tree 類型
    0x25~0x25 1 保留
    0x26~0x29 4 B-tree 屬性標識
    0x2A~0x69 64 保留
    字節偏移(16 進制)字節數簡要說明
    00~03 4 父目錄ID
    04~05 2 文件夾名或文件名長度
    06+ 0~510 文件夾名或文件名
     
    4
    6.2 檔案項的數據部分
    6.2.1文件檔案項
    (1)數據結構
    表5 文件檔案項數據結構
    Tab.5 Data file structure
    (2)HFSPlusCatalogFile 結構
    struct HFSPlusCatalogFolder {
    SInt16 recordType;
    UInt16 flags;
    UInt32 reservedl;
    HFSCatalogNodeID fileID;
    UInt32 createDate;
    UInt32 contentModDate;
    UInt32 attributeModDate;
    UInt32 accessDate;
    UInt32 backupDate;
    HFSPluspermissions permissions;
    FInfo userInfo;
    FXInfo finderInfo;
    UInt32 textEncoding;
    UInt32 reserved;
    HFSPlusForkDate dateFork;
    HFSPlusForkDate resourceFork;
    };
    6.2.2文件夾檔案項
    (1)數據結構
    字節偏移(16 進制)字節數簡要說明
    00~01 2 檔案類型,文件檔案總為0x0002
    02~03 2 文件夾位標志
    04~07 4 保留
    08~0B 4 文件自身的CNID
    0C~0F 4 文件建立的時間和日期
    10~13 4 文件最后修改的時間和日期
    14~17 4 屬性時間
    18~1B 4 最后訪問的時間和日期
    1C~1F 4 文件備份的時間和日期
    20~2F 16 文件夾許可
    30~3F 16 用戶信息
    40~4F 16 Finder 信息
    50~53 4 文件命名編碼
    54~57 4 保留
    58~A7 80 數據叉存放位置及大小
    A8~F7 80 資源叉存放位置及大小
     
    5
    表6 文件夾檔案項數據結構
    Tab.6 Data file folder structure
    (2)HFSPlusCatalogFolde r 結構
    struct HFSPlusCatalogFolder {
    SInt16 recordType;
    UInt16 flags;
    UInt32 valence;
    UInt32 folderID;
    UInt32 createDate;
    UInt32 contentModDate;
    UInt32 attributeModDate;
    UInt32 accessDate;
    UInt32 backupDate;
    HFSPlusPremissions permissions;
    DInfo userInfo;
    DXInfo finderInfo;
    UInt32 textEncoding;
    UInt32 reserved;
    };
    6.2.3鏈接檔案項
    (1)數據結構
    表7 鏈接檔案項數據結構
    Tab.7 Links to the file data structure
    字節偏移(16 進制)字節數簡要說明
    00~01 2 檔案類型,文件夾檔案總為0x0001
    02~03 2 文件夾位標志
    04~07 4 文件或文件夾數量
    08~0B 4 文件夾自身的CNID
    0C~0F 4 文件夾建立的時間和日期
    10~13 4 文件夾最后修改的時間和日期
    14~17 4 屬性修改時間
    18~1B 4 最后訪問時間和日期
    1C~1F 4 文件夾備份時間和日期
    20~2F 16 文件夾許可
    30~3F 16 用戶信息
    40~4F 16 Finder 信息
    50~53 4 文檔命名編碼
    54~57 4 保留
    字節偏移(16 進制)字節數簡要說明
    00~01 2
    檔案類型
    0x0003 文件夾鏈接
    0x0004 文件鏈接
    02~03 2 保留
     
    6
    (2)HFSPlusCatalogThread 結構
    struct HFSPlusCatalogThread {
    SInt16 recordType;
    SInt16 reserved;
    HFSCatalogNodeID parentID;
    HFSUniStr255 nodeName;
    };
    7. 壞塊文件
    壞塊文件是用來記錄那些有缺陷的不能正常存數數據的塊。壞塊文件用一個特殊的
    CNID 作為域溢出文件中域檔案的key,當一個塊被標記為壞塊,擁有這個CNID 的域和壞
    塊被添加到域溢出文件,壞塊則被分配文件標記為已使用,是文件系統不會再次使用它。壞塊文件不屬于用戶文件,它在目錄中沒有文件記錄,也不屬于特殊文件。
    8. 屬性文件
    屬性文件屬于特殊文件,同樣具有B-tree 結構,由一個長度可變的key 和三個數據記錄
    類型組成。有兩種屬性類型,分別為叉數據屬性和域屬性。
    叉數據屬性由4 個字節的recordType來表示屬性數據檔案類型,由一個HFSPlusForkData
    類型的theFork 記錄屬性數據存儲的大小和位置,同時保留了一個4 個字節的reserved。
    域屬性由4 個字節的recordType 來表示屬性數據類型,由一個HFSPlusExtentRecord 類
    型的extents 來描述屬性數據的前8 個域,同時保留一個4 個字節的reserved。
    9. 總結
    通過本文對HFS+文件系統的分析,可以看書HFS+文件系統對于HFS 文件系統在結構
    和管理方便的不足采取了有效的改進,使文件系統的性能得到了提升。HFS+文件系統已經
    取代了HFS 文件系統成為蘋果操作系統的主流文件系統,但從現在專家和用戶的評價來看,HFS+文件系統任然存在一個不足。本文通過對HFS+文件系統結構和數據管理的分析,為用戶初步的了解此文件系統提供了依據,同時也為用戶了解和發現文件系統的優點和不足提供了參考。

    上一條: 蘋果分區HFS文件系統介紹
    下一條: 淺談固態存儲的技術
     
    安徽三戶網絡 | 銀川數據恢復 | 山西數據恢復 | 中國硬盤配件網 | 哈爾濱數據恢復 | 數據庫恢復
     
    網站首頁 公司簡介 數據恢復 成功案例 產品與技術 軟件及設備 數據恢復外包 數據安全 數據恢復培訓 聯系我們
    版權所有: 飛客數據恢復中心 Copyright @ 2009-2012 All rights reserved 皖ICP備15013845號-2
    公司地址:安徽省合肥市蜀山區黃山路254號賽博數碼廣場A座1508室 | 郵編:230031 1024*768顯示最佳
    公司電話:0551-62858915 13395696602
    飛客數據恢復中心