福州瑞芯微電子股份有限公司 劉 翊
一種快速拷貝數據到FAT分區的方法
福州瑞芯微電子股份有限公司 劉 翊
本方案先將拷貝數據制作成最小FAT32分區鏡像文件(最小指剛好存放下拷貝數據,沒有冗余空間)。接著在寫入鏡像文件前獲取實際分區容量,根據獲取到的分區容量調整鏡像文件中的FAT32數據,然后按FAT32分區的組織順序(FAT32分區由保留區、FAT1區、FAT2區和數據區組成)依次將鏡像文件中的保留區、FAT1區、FAT2區和數據區內容寫入到分區。此方法的寫入過程是直接調用磁盤驅動的扇區讀寫接口,去掉了文件系統層的開銷。提前制作好FAT32鏡像可以省去拷貝前格式化分區的時間,而分區容量不同帶來的修改開銷很少。如果寫入的設備有自己的驅動程序并提供扇區的讀寫接口,那么也可以不通過標準磁盤讀寫接口進行寫入,解決一臺PC最多同時存在26個盤符的限制。
快速拷貝;Fat32;預燒錄
目前,拷貝數據到FAT32分區的方法主要包括如下步驟:首先將設備與電腦相連接,并掛載為磁盤;而后通過windows提供的格式化功能將磁盤格式化為FAT32分區格式;進而再將數據拷貝至FAT32分區中。然而,這種方法卻存在著諸多弊端:首先,數據拷貝至分區要調用FAT32文件系統接口,這會增加部分系統資源和時間開銷;其次,將磁盤格式化為FAT32分區格式時間開銷大,分區容量越大,所花費的時間越長,影響寫入效率;再次,由于上述方法需要依賴于磁盤,而Windows本身最多支持26個盤符,也就是說,最多只允許26臺設備同時進行寫入操作。
綜上所述,如何能夠快速地將數據寫入至FAT32分區中,且使得燒錄過程不受待磁盤數量的限制,進一步提升寫入數據的效率,滿足工業化生產的需求,是一個亟需解決的問題。
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區數據修改完成后,就可以對其進行燒錄。
將拷貝數據的操作替換為寫入扇區,不僅節約文件系統層的開銷,且無需在拷貝前對分區進行格式化,大大縮短拷貝過程所花費的時間,提高了效率。此外,由于所述方法并不依賴于Windows系統磁盤接口來袖,因而只要設備驅動程序有讀寫扇區的接口,即可使拷貝操作不受26個磁盤限制,從而大大提高并發度,滿足了規模化生產的需要。
[1]張帆,史彩成.Windows驅動開發技術詳解[M].電子工業出版社,2008.
[2]Microsoft.Fat32 File system specification[S].2000,12.