
2.3 iOS文件系统
2.3.1 HFS+ 文件系统
1996年,苹果公司开发了一种新的文件系统,可以用于储存更多的数据。由于硬盘的容量不断飞速增长,文件系统必须增强才能满足日益扩大的数据存储需求。因此,苹果研发了HFS文件系统,中文可称为分层文件系统,或称为混合文件系统(Hierarchical File System)。HFS文件系统结构复杂,很难简单理解。从物理层面看,HFS系统的磁盘每个"块"为512个字节,这与Windows系统中的扇区非常相似。HFS文件系统中有两种类型的块:逻辑块和分配块。逻辑块从卷的开始至末尾顺序编号,这些块是不变的,而且大小一样,均为512个字节。分配块由众多的逻辑块组成,HFS系统通过分配块来更加有效地管理数据。为减少HFS卷中的碎片,一些分配块可以被组合绑定在一起使用,类似于簇。这个组织方式可参考图2-3。
[TR]
[TD][I]498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=455 alt="" src="http://pic.aIhUaU.com/201602/15/125841582.jpg" width=193 border=0>[/TD][/TR]
[TR]
[TD]图2-3 HFS+文件系统结构[/TD][/TR]
对于日期和时间,苹果系统采用绝对时间,也称为当地时间。同时也采用UNIX时间格式。iOS系统同时支持这两种时间模式。由于绝对时间没有考虑到时区的差异,我们必须了解设备和系统的地理位置,才能知道数据产生的准确的日期和时间。
HFS文件系统内的数据使用总目录文件系统或平衡树来组织文件。在这种组织结构中,平衡树使用一个总目录文件和多个扩展溢出文件。平衡树由节点构成。这些节点以线性的方式组合在一起,可以达到快速访问数据的目的。当添加和删除数据的时候,域会被不断地调整以保持存储效率。每一个在HFS文件系统中被创建的文件都会有一个唯一的编号--总目录ID。HFS卷头会追踪总目录ID的编号,并为新增的文件顺序编号。这些编号可以被重新使用,但始终会被HFS卷头记录。一般来说,只有在服务器系统下,当大量文件被创建时才会出现重新使用总目录ID的情况。这个编号可以把节点记录于一个文件中。
启动块:第一个1024字节预留给了启动块。
卷头,也称为主目录块:下一个1024字节用于卷头,包含了关于HFS卷结构的信息。HFS卷的最后1024字节为卷头的备份。HFS+卷头的签名是"H+.",HFSX卷头签名为"HX."。
卷位图:追踪各个块被文件系统使用的状态。
扩展溢出文件:追踪被一个文件使用的所有块,它包含一个文件和相关块所使用的域的列表。
总目录文件:HFS+文件系统使用目录文件方式保存卷中所有文件和文件夹的信息,下列为分层文件系统中的节点。
头节点
索引节点
叶节点
图节点
卷头记录着头节点的位置,也同时记录目录ID编号。这个编号由总目录文件分配。总目录文件中记录着前一个被分配的编号,从而可以得到下一个可分配编号。总目录文件将根据前一个分配编号递增一个数字,将其分配给新文件,并将编号保存于头节点之中。
属性文件:该文件预留给将来使用的数据匣(Data Forks)。
启动文件:该文件用于启动没有内置ROM支持的系统。
启动文件之后是卷内保存的以及被文件系统所记录的所有数据。
卷头备份:备份的卷头文件,用于磁盘修复。
最后的512个字节预留。