一种优化的光盘文件系统

2015-11-25 02:59:40管元筠万晓冬
计算机与现代化 2015年12期
关键词:镜像文件描述符扇区

管元筠,李 阳,万晓冬

(南京航空航天大学自动化学院,江苏 南京 211106)

0 引言

UDF 是统一光盘格式(Universal Disc Format,UDF)的缩写,是光学存储技术协会(Optical Storage Technology Association,OSTA)于1996 制定的通用光盘文件系统,采用包刻录方式(Packet Writing,PW)[1]。UDF 文件系统的设计目的是在光学存储媒体上使用,但随着UDF 的广泛应用,支持UDF 格式文件的操作系统越来越多,目前,默认支持UDF 的操作系统有Windows、Linux 等。迄今为止,UDF 已推出如下版本[2-13]:

1)UDF1.02,普遍用于DVD-VIDEO。

2)UDF1.50,增强了对CD-R、DVD-R 媒体可擦写支持。

3)UDF2.00,增加了对流文件的支持。

4)UDF2.01,解决了之前各版本中模棱两可的标准。

5)UDF2.50,增加了元数据分区。

6)UDF2.60,加入了兼容烧录器的伪烧录方法。

本文主要描述UDF 文件系统的卷结构、分区结构、目录和文件结构,介绍UDF 文件系统的特点。在实现UDF 文件系统的基础上,对该文件系统进行优化。优化的方法是,在现有UDF 文件系统结构的基础上,增加光盘基本信息描述区和刻录信息描述区,修改文件和目录的逻辑表达和光盘扫描过程,从而使得光盘扫描速度加快,并且在一定程度上提高了光盘刻录的可靠性。

1 UDF 简介

1.1 UDF 卷结构

UDF 卷结构有着标准化的规定,“卷”是UDF 中的一个概念,它的作用是用来储存各种有关光盘和文件系统的信息。通过依次扫描UDF 卷结构,从而识别和确认该文件系统。卷结构是通过读取卷识别序列(Volume Recognition Sequence,VRS)和卷描述符序列(Volume Descriptor Sequence,VDS)进行文件系统识别的。

卷识别序列从初地址偏移32k 字节的地址开始[14],由以下3 部分组成:

1)开始扩展区域描述符(Beginning Extended Area Descriptor)。

2)卷结构描述符序列(Volume Structure Descriptor Sequence)。

3)结束扩展区域描述符(Terminating Extended Area Descriptor)。

扫描光盘第一步也是最关键的一步是查找锚卷描述符指针(Anchor Volume Descriptor Pointer,AVDP)。该指针中包含了主卷描述符序列(Main Volume Descriptor Sequence,MVDS)和保留卷描述符次序列(Reverse Volume Descriptor Sequence,RVDS)的地址和长度。下一步是读取主体卷描述符序列。主体卷描述符序列包含以下内容:

1)卷主描述符(Primary Volume Descriptor)。

2)实现用途卷描述符(Implementation Use Volume Descriptor)。

3)分区描述符(Partition Descriptor)。

4)卷逻辑描述符(Logical Volume Descriptor)。

5)未分配空间描述符(Unallocated Space Descriptor)。

卷主描述符用来记录该卷的某些属性并用特定的符号序列标识该卷。实现用途卷描述符用来标识一种基于UDF 文件系统的实现,目的是协助进行卷识别。分区描述符描述一个特定分区的长度和地址。卷逻辑描述符描述一个卷内分区和分区映射表等信息。未分配空间描述符用来标识尚未使用的可以分配给分区的空间。

1.2 UDF 分区结构

UDF 有如下几类分区:

1)第一类分区(Type1 Partition)。第一类分区的分区号记录在卷逻辑描述符中,分区的可用空间使用分区映射表来管理,分区中的每一块对应于分区映射表中的一个比特位,如果是1,表示该块已被使用,如果为0,表示该块未被使用。

2)虚拟分区(Virtual Partition)。虚拟分区的结构和第一类分区相同,只不过虚拟分区的访问类型是一次性写入,目的是让一次性写入介质在文件系统的视角下具有可覆盖写入的特性,增强了兼容性。

3)备用分区(Sparing Partition)。备用分区是用来为文件系统中某些经常使用的重要数据做备份的。一次性写入介质没有必要使用备用分区,因为数据已经写入,不可改变,出现错误也无法纠正。对于可覆盖写入介质,文件系统中某些重要的数据经常需要多次擦写,极有可能造成介质损坏,这时备份分区就可以令介质在外部看来是完好无缺的。

4)元数据分区(Metadata Partition)。元数据分区是专门用于存放一些文件的入口和定位卷信息,可以加快文件系统的扫描操作。

5)伪覆盖分区(Pseudo Partition)。用于一次性写入介质,向该分区写入信息时,先读取上次刻录进光盘伪覆盖分区的信息,然后进行地址变换,最后写入光盘内,这样就使得一次性写入介质在外部看来具有可覆盖写入的特性。

1.3 UDF 目录和文件结构

UDF 规定表示目录和文件的主要数据是信息控制块(Information Control Block)。ICB 要独占一个逻辑存储块的空间。它包含了如下内容:文件入口、扩展文件入口、指向下一个ICB 的指针等。文件(扩展)入口是关于文件或目录的一些属性集合。文件系统就是利用文件(扩展)入口找到文件或目录的数据。

目录和文件在数据结构层面的表达是相同的,目录也需要用一个文件入口来记录,只不过在ICB 中文件类型是目录。其文件数据是该目录下子目录和子文件的ICB 地址,其中第一个信息控制块地址指向该目录的上层目录。

当采用UDF 文件系统时,读取文件数据过程如下:

1)从锚卷描述符指针找到卷描述符序列,其中的卷逻辑描述符包含了文件集描述符(File Set Descriptor)在光盘的逻辑扇区地址。锚卷描述符指针应该在3 个扇区256、N、N-256 中的至少2 个地址中找到(N 为卷空间最大扇区号)[15]。

2)从文件集描述符找到光盘根目录信息控制块(Root Directory ICB),目录的文件内容是文件标识符描述符(File Identifier Descriptor,FID)。

3)通过FID 可以找到根目录下的子目录和子文件的ICB。通过遍历文件标识符描述符和信息控制块,可以获得光盘目录树结构。遍历目录树结构,查找到特定文件的数据。

2 UDF 优化

尽管UDF 对文件系统的各个方面都做了详尽的规定,但是在实际应用中,UDF 暴露出一些缺陷:

1)扫描UDF 光盘时需要按顺序读取卷描述符序列,然后再分析光盘的使用状况,当使用50 GB/100 GB 蓝光光盘时,扫描速度明显变慢。

2)UDF 不记录光盘的刻录历史,无法对光盘的刻录情况作出分析。

2.1 UDF 扫描速度的优化

针对目前UDF 面对大容量数据扫描速度不佳的情况,在分析了现有的UDF 光盘扫描策略后,提出了为UDF 增加光盘基本信息分区(Disc Basic Information Partition)的方法。提出这种方法的思想是:简化光盘的扫描过程,从而减少光驱的寻道操作,最终降低光盘扫描速度。光盘基本信息分区包含了如光盘类型、光盘容量、光盘标签等信息。在添加了光盘基本信息分区后,原先UDF 光盘扫描步骤也要做出相应的修改,即不需要通过锚卷描述符指针读取主卷描述符序列来获取光盘的基本信息,而是直接读取光盘基本信息分区。通过这样的方式,减少了光驱读取光盘的次数,既减少了扫描所用的时间,也延长了光驱的使用寿命。

光盘基本信息分区占用光盘一个逻辑扇区的空间,其结构体实现如下:

其中各字段的含义按顺序分别是:

1)光盘类型;

2)光盘大小,光盘总扇区数;

3)光盘状态;

4)填充字段1;

5)光盘唯一编号;

6)光盘唯一编号RAID5 校验值;

7)填充字段2;

8)光盘数据唯一编号;

9)光盘数据唯一编号RAID5 校验值;

10)光盘标签名称;

11)光盘密码信息;

12)填充字段3;

13)填充字段4。

ui8Reserved1,ui8Reserved2,ui8Reserved3,ui8Reserved4 作为填充字段存在,其内容恒为0,目的是让光盘基本信息描述区占用整个光盘逻辑扇区的空间同时留作以后扩展用。

光盘类型字段是作为存储介质的光盘的具体类型,现在市面上有一次性写入、可擦写、蓝光光盘等。光盘大小是描述光盘中的“扇区”数。光盘状态可以说明光盘是否损坏,是否还有空闲空间,是否设定为终结刻录等。光盘唯一编号和光盘数据唯一编号是为了增强UDF 在现实应用中的归档处理功能添加的,另外对这2 个字段生成RAID5 校验值是为了光盘数据的可靠性添加的。

2.2 UDF 刻录优化

由于UDF 没有给出记录光盘刻录信息的规定,所以UDF 光盘每次读取看起来都是仅仅刻录了一次。在实际应用中,常常需要光盘刻录历史信息作为测试、归档、备份的基本参数,但UDF 缺少这一方面的规定,所以给实际工作造成了一定的困难。针对这一情况,为UDF 增加了光盘刻录信息描述分区(Disc Imprint Information Partition)。光盘在每次刻录完毕后都要追加刻录光盘刻录信息描述分区,通过读取最近一次刻录的光盘刻录信息描述分区,就可以读取光盘的完整刻录历史。

光盘刻录信息描述分区占用光盘一个逻辑扇区的空间。其结构体实现如下:

其中各字段的含义按顺序分别是:

1)信息标签;

2)上次刻录起始扇区号;

3)上次刻录扇区数;

4)本次刻录起始扇区号;

5)本次刻录扇区数;

6)下次刻录起始扇区号;

7)下次刻录扇区数;

8)本次刻录目录区起始扇区号;

9)此次刻录状态;

10)光盘状态;

11)当前刻录次数;

12)光盘文件系统类型。

ui8Reserved1,ui8Reserved2,ui8Reserved3,ui8Reserved4,ui8Reserved5 等字段是填充字段,可以保存刻录的时间、刻录机型号等信息。

UDF 标准规定,每次刻录光盘的第一个扇区要包含定位卷信息,然后从第2 号扇区到第15 号扇区都必须是空扇区。优化UDF 规定将光盘刻录信息区写到镜像文件的第6 号扇区内,这是制作光盘镜像文件之前必须写入的,记录了刚刚扫描到的光盘状态和本次刻录的容量等信息。在镜像文件的结尾,还需要再次刻录光盘刻录信息区,记录本次镜像文件制作的信息。

将镜像文件真实刻录到光盘后,经过对比原镜像文件和刻录光盘的内容,就可以判定本次刻录是否成功,在光盘的最后追加刻录一次光盘刻录信息区,在下次扫描光盘时就可以直接定位到光盘的最后,查询光盘的刻录情况和使用情况。

3 优化UDF 文件系统核心接口

3.1 读取光盘文件

读取光盘文件的接口原型如下:

函数有一个参数,是光盘中UDF 格式文件所在路径。函数的返回值是整型(int)。当该函数执行成功(即正常读出时)时返回0,读出数据失败时返回-1。在函数内,可以根据光盘文件系统的不同,调用其他的函数接口。此函数是为了软件接口的兼容性而设计,真正完成文件目录读取操作的是以下函数:

函数有3 个参数,其中“i64FileIcbSectorNo”是文件目录信息块在光盘中的扇区偏移数,pDiscRootFile-AttrEx 用来指向光盘根目录的指针,通过这个指针可以遍历光盘上的文件目录树,lpszDiscFilePath 是光盘中UDF 格式文件所在路径。对于原官方标准版本的UDF,该函数接口同样可以使用。

3.2 生成刻录文件

用于生成刻录进光盘的镜像文件的函数接口如下:

函数有4 个参数:类指针pDiscFileTreeInfo,用来保存要产生的光盘镜像的整个文件目录树信息;字符串变量lpszIsoFilePath,用来保存要被写入光盘镜像的源文件路径;字符串变量lpszDiscLabel,用来保存区分光盘的标签名字;结构体变量指针pNew256AnchorVolDescPointer,用来保存UDF 格式中规定的定位描述符的信息。函数的返回值是整型,成功产生镜像文件返回0,不成功返回负值。

4 测试分析

优化UDF 文件系统性能测试工作集中在以下方面:

1)光盘扫描和光盘读写的黑盒测试。

2)文件系统内部实现流程的白盒测试。

3)与原UDF 文件系统和其他光盘文件系统的测试对比。

黑盒测试用来验证优化UDF 文件系统在光盘扫描、光盘读写数据等方面的准确性。白盒测试用来验证优化UDF 文件系统在内部流程的合理性和容错性。最后,将优化UDF 文件系统和原UDF 文件系统、CDFS 文件系统进行对比测试,验证优化UDF 文件系统在时间性能、容错性能等方面都有良好的表现。

4.1 测试平台

选择X86-64 作为硬件平台对优化UDF 文件系统进行综合测试。软件环境为Windows 7 操作系统平台上的VS2010。

4.2 黑盒测试

优化UDF 文件系统的黑盒测试主要包括:1)对文件系统功能实现的测试。

2)对各种文件操作正确性的测试。

3)对文件系统在光盘刻录容错性的测试。

具体流程是:对只读光盘和可读写光盘采用优化UDF 文件系统刻录后调用各种操作接口,对比写入数据和读出数据的正确性。

在黑盒测试中,选用只读光盘、可读写光盘、蓝光光盘作为测试光盘介质,分别对文件写入、文件删除、显示文件目录树、终结光盘、读取光盘基本信息区、读取光盘刻录信息区等操作进行测试,表1 为黑盒测试数据总结。

表1 黑盒测试数据总结

经过黑盒测试,表明优化UDF 文件系统基本操作时可以保证准确性,通过读取光盘基本信息区和刻录信息区,成功获得光盘基本参数和光盘的刻录历史,当光盘刻录出现异常时,可以在光盘刻录信息区得以体现,保证了文件系统的可靠性。

4.3 白盒测试

优化UDF 文件系统的白盒测试主要包括:

1)对文件系统内部代码BUG 的测试。

2)对文件系统代码覆盖率的测试。

具体流程是:在VS2010 调试环境对文件系统接口进行单步调试,追踪代码的运行轨迹,保证所有代码分支都可以执行,确保代码中不存在死循环或不合理分支的出现,最后计算文件系统代码覆盖率。

在白盒测试中,选用只读光盘、可读写光盘、蓝光光盘作为测试光盘介质,分别对文件写入、文件删除、显示文件目录树、终结光盘、读取光盘基本信息区、读取光盘刻录信息区等接口函数内部代码进行测试,表2 为白盒测试总结。

表2 白盒测试总结

在白盒测试中,优化UDF 文件系统没有出现死循环,并且对于各种操作,代码运行流程经过BUG 修改,其合理性和准确性已得到保障。在表中覆盖率没有达到100%的原因是,这部分没有覆盖到的代码属于为将来扩展文件系统预设的接口,并没有代码实现,所以没有相关测试用例。

4.4 对比测试

现在各个操作系统平台广泛使用的光盘文件系统有UDF 和CDFS,CDFS 文件系统的平台兼容性更好,但是该文件系统不支持大于4 GB 的文件。

1)对比测试主要是对比优化UDF、原UDF、CDFS文件系统扫描时间性能。

对比各文件系统扫描时间性能的流程是:选择100 GB 蓝光光盘作为测试光盘介质,分别采用不同文件系统格式将测试数据分不同批次刻录进光盘,然后测量出光盘扫描时间。为了屏蔽单一测试数据容量对光盘扫描的偶然性影响,以10 GB 为单位,测试包含10 GB 到100 GB 数据量的光盘扫描速度。

文件系统随机读取文件测试的测试结果如图1所示。

图1 不同文件系统光盘扫描时间对比

从图1 可以看出,优化UDF 文件系统在光盘扫描中所表现出来的时间性能要好过原UDF 文件系统和CDFS 文件系统。由于优化UDF 文件系统简化了光盘的扫描步骤,可以直接定位光盘基本信息分区获取光盘基本参数,并且在光盘刻录信息描述分区直接给出了光盘的刻录参数和光盘根目录位置,所以光驱实际寻道次数大大减少,扫描速度得以提高。而且,随着光盘追加刻录次数的增多和光盘内数据量的膨胀,优化UDF 文件系统对于光盘扫描的速度优势会更加突出。

5 结束语

光盘文件系统在提供良好性能的同时,也要尽可能地做到方便用户使用。优化UDF 文件系统立足于具体需求和项目指标,针对时间性能和容错性能方面做出了有针对性的改进,通过增加逻辑分区的方式完善了光盘的信息集成。经实际测试该文件系统运行良好,性能稳定,可靠性强。但是优化UDF 文件系统仍有些冗余信息可以精简,下一步的工作是在该文件系统的基础上,开发光盘存储阵列操作软件。

[1]王乃生.UDF 文件系统的写入可靠性及其在Blu-ray 光盘上的应用[D].西安:西安电子科技大学,2011.

[2]OSTA.Secure UDF® Specification Revision 1.00[S/OL].http://www.osta.org/specs/pdf/SecureUDF _1 _00.pdf,2014-11-15.

[3]OSTA.Universal Disk Format® Specification Revision 1.02[S/OL].http://www.osta.org/specs/pdf/udf102.pdf,2014-11-17.

[4]OSTA.Universal Disk FormatTMSpecification 102150differences[S/OL].http://www.osta.org/specs/pdf/102150diffs.pdf,2014-11-18.

[5]OSTA.Universal Disk FormatTM Specification Revision 1.50[S/OL].http://www.osta.org/specs/pdf/udf150.pdf,2014-12-03.

[6]OSTA.Universal Disk FormatTM Specification 150200differences[S/OL].http://www.osta.org/specs/pdf/150200diffs.pdf,2014-11-21.

[7]OSTA.Universal Disk Format® Specification Revision 2.00[S/OL].http://www.osta.org/specs/pdf/udf200.pdf,2014-11-26.

[8]OSTA.Universal Disk FormatTM® Specification 200201-differences[S/OL].http://www.osta.org/specs/pdf/200201diffs.pdf,2014-11-28.

[9]OSTA.Universal Disk Format® Specification Revision 2.01[S/OL].http://www.osta.org/specs/pdf/udf201.pdf,2014-12-06.

[10]Universal Disk Format® Specification 201250differences[S/OL].http://www.osta.org/specs/pdf/201250diffs.pdf,2014-12-09.

[11]OSTA.Universal Disk Format® Specification Revision 2.50[S/OL].http://www.osta.org/specs/pdf/udf250.pdf,2014-12-11.

[12]OSTA.Universal Disk Format® Specification Revision 2.60 DRAFT12z[S/OL].http://www.osta.org/specs/pdf/udf260_lastDraftWithChanges.pdf,2014-12-14.

[13]OSTA.Universal Disk Format® Specification Revision 2.60[S/OL].http://www.osta.org/specs/pdf/udf260.pdf,2014-12-17.

[14]白兆华.基于UDF 文件系统的蓝光媒体操作软件的研究和实现[D].西安:西安电子科技大学,2009.

[15]武宁远.基于蓝光技术的UDF 文件系统的开发与研究[D].西安:西安电子科技大学,2009.

猜你喜欢
镜像文件描述符扇区
分阶段调整增加扇区通行能力策略
南北桥(2022年2期)2022-05-31 04:28:07
基于结构信息的异源遥感图像局部特征描述符研究
测绘学报(2022年12期)2022-02-13 09:13:01
没光驱不要紧 装个免费虚拟的
Linux单线程并发服务器探索
U盘故障排除经验谈
利用CNN的无人机遥感影像特征描述符学习
用RamOS降低公用机的维护工作量
基于贝叶斯估计的短时空域扇区交通流量预测
重建分区表与FAT32_DBR研究与实现
Win7升级Win10教程
电脑迷(2015年9期)2015-05-30 22:08:35