一种快速拷贝数据到FAT分区的方法

2017-04-15 23:21福州瑞芯微电子股份有限公司
电子世界 2017年11期
关键词:镜像文件拷贝磁盘

福州瑞芯微电子股份有限公司 刘 翊

一种快速拷贝数据到FAT分区的方法

福州瑞芯微电子股份有限公司 刘 翊

本方案先将拷贝数据制作成最小FAT32分区镜像文件(最小指刚好存放下拷贝数据,没有冗余空间)。接着在写入镜像文件前获取实际分区容量,根据获取到的分区容量调整镜像文件中的FAT32数据,然后按FAT32分区的组织顺序(FAT32分区由保留区、FAT1区、FAT2区和数据区组成)依次将镜像文件中的保留区、FAT1区、FAT2区和数据区内容写入到分区。此方法的写入过程是直接调用磁盘驱动的扇区读写接口,去掉了文件系统层的开销。提前制作好FAT32镜像可以省去拷贝前格式化分区的时间,而分区容量不同带来的修改开销很少。如果写入的设备有自己的驱动程序并提供扇区的读写接口,那么也可以不通过标准磁盘读写接口进行写入,解决一台PC最多同时存在26个盘符的限制。

快速拷贝;Fat32;预烧录

1 引言

目前,拷贝数据到FAT32分区的方法主要包括如下步骤:首先将设备与电脑相连接,并挂载为磁盘;而后通过windows提供的格式化功能将磁盘格式化为FAT32分区格式;进而再将数据拷贝至FAT32分区中。然而,这种方法却存在着诸多弊端:首先,数据拷贝至分区要调用FAT32文件系统接口,这会增加部分系统资源和时间开销;其次,将磁盘格式化为FAT32分区格式时间开销大,分区容量越大,所花费的时间越长,影响写入效率;再次,由于上述方法需要依赖于磁盘,而Windows本身最多支持26个盘符,也就是说,最多只允许26台设备同时进行写入操作。

综上所述,如何能够快速地将数据写入至FAT32分区中,且使得烧录过程不受待磁盘数量的限制,进一步提升写入数据的效率,满足工业化生产的需求,是一个亟需解决的问题。

2 方案总体设计与实现

2.1 具体实施步骤

1)通过创建FAT32镜像工具,将要拷贝的数据制作成最小FAT32镜像文件,镜像文件包含FAT32分区信息和拷贝数据。

2)连接设备,写入数据前获取设备的分区容量,由于镜像文件不是按真实分区容量制作,所以在将镜像文件写入到分区前,需要根据真实的分区容量来修改镜像文件的FAT32分区数据。

3)提取镜像文件中的保留区数据,保留区数据位于FAT32镜像文件的前32个扇区。

4)根据真实分区容量重新计算总扇区数和FAT扇区数,然后更新保留区中DBR和备份DBR数据。

5)写入保留区数据,通过调用磁盘驱动或者设备驱动的写扇区接口,将修改后的保留区数据写入到分区的LBA0位置。

6)提取镜像文件中的FAT区数据,FAT区保存着所有文件的簇链信息,它紧接在保留区数据后面。

7)根据新的FAT扇区数,扩展FAT分区数据,扩展FAT过程是申请一个新的FAT扇区数*512字节的空间并初始化为全0,拷贝原始的FAT数据到新申请的空间。

8)写入FAT分区数据到分区LBA32位置。

9)提取镜像文件中的数据区数据,数据区是存放拷贝内容的地方,前面的保留区、FAT分区都属于FAT32文件系统信息。写入到FAT分区结束的位置。

2.2 具体实施说明

在本实施方式中,所述FAT32分区包括保留区,FAT区和数据区,则所述FAT32分区格式的镜像文件包括保留区数据,FAT区数据以及数据区数据。

FAT32分区格式中,保留区数据位于FAT32分区格式的镜像文件的前32个扇区,包括DBR和备份DBR,DBR(DOS BOOT RECORD,DOS操作系统引导记录)通常位于扇区0的位置,包括两部分内容:DOS引导程序和BPB(Bios Parameter Block ,BIOS参数块)。其中DOS引导程序用于完成DOS系统文件的定位与装载,而BPB用于存储分区的磁盘信息,引导程序或设备驱动程序根据BPB中存储的磁盘信息将磁盘逻辑地址转换成物理地址。

FAT区数据中包括主文件分配表及其备份,所述主文件分配表用于存储磁盘数据链接关系的数据结构。保留区、FAT区所存储的为FAT32分区文件系统信息,数据区用于存储待拷贝的数据。

由于镜像文件是按拷贝数据的大小生成的,因而需要按分区真实容量对镜像文件的内容进行调整,所述对镜像文件的内容进行调整包括:根据所获取的FAT32分区真实容量,重新计算调整后的FAT32分区格式镜像文件的总扇区数以及FAT区的扇区数,并修改FAT32分区格式镜像文件的保留区数据中的DBR和备份DBR的总扇区数,以及FAT区的扇区数的值。在本实施方式中,可以用如下公式完成对调整后的FAT32分区格式的镜像文件的总扇区数以及FAT区的扇区数的计算:

n_vol=n_disk/512

tmpValue = n_vol - 32;

tmpValue2 = ((256 * nSecPerCluster) + 2) >> 1;

n_fat = (tmpValue + (tmpValue2 - 1)) / tmpValue2;

其中,n_vol表示镜像文件的总扇区数,n_fat表示镜像文件的FAT区的扇区数,n_disk表示分区容量,以字节为单位,nSecPer-Cluster表示每个簇占用的扇区数,tmpValue和tmpValue2表示计算时的临时文件。在本实施方式中,FAT区包括FAT1区和FAT2区,则所述方法还包括步骤:根据计算得出的调整后的FAT32分区格式的镜像文件的的FAT区的扇区数,对FAT1区和FAT2区数据进行修改。例如原有的镜像文件的FAT1区大小为4M,而所获取的FAT分区大小为4G,则根据上述公式所计算得到的调整后的FAT1区大小为12M。也就是说,需要对原有的FAT1区大小进行扩展,增加8M数据以适应FAT32分区存储容量的需要,为减少扩展FAT1区所花费的时间,可以在原有FAT1区所在存储位置的末尾进行扩展,在本实施例中,即将需要扩展的8M数据添加于原有FAT1区所在存储位置的末尾。优选的,扩展FAT1区过程如下:首先,根据计算得出的FAT1分区的扇区数申请新的一块存储空间,所述存储空间大小为计算得出的FAT1分区的扇区数*512字节,此空间即为扩展后的FAT1分区大小;而后将所述存储空间内容初始化为0,并拷贝扩展前的FAT1区数据至所述存储空间。FAT2分区的调整与FAT1相同,FAT1区与FAT2区数据修改完成后,就可以对其进行烧录。

3 结论

将拷贝数据的操作替换为写入扇区,不仅节约文件系统层的开销,且无需在拷贝前对分区进行格式化,大大缩短拷贝过程所花费的时间,提高了效率。此外,由于所述方法并不依赖于Windows系统磁盘接口来袖,因而只要设备驱动程序有读写扇区的接口,即可使拷贝操作不受26个磁盘限制,从而大大提高并发度,满足了规模化生产的需要。

[1]张帆,史彩成.Windows驱动开发技术详解[M].电子工业出版社,2008.

[2]Microsoft.Fat32 File system specification[S].2000,12.

猜你喜欢
镜像文件拷贝磁盘
新旧电脑资料迁移高效帮手
解决Windows磁盘签名冲突
修改磁盘属性
唐氏综合征是因为“拷贝”走样了
没光驱不要紧 装个免费虚拟的
文化拷贝应该如何“拷”
开发闲置内存,为本本轻松提速
磁盘组群组及iSCSI Target设置
用RamOS降低公用机的维护工作量
创建VSAN群集