福州瑞芯微電子股份有限公司 劉 翊
一種快速拷貝數(shù)據到FAT分區(qū)的方法
福州瑞芯微電子股份有限公司 劉 翊
本方案先將拷貝數(shù)據制作成最小FAT32分區(qū)鏡像文件(最小指剛好存放下拷貝數(shù)據,沒有冗余空間)。接著在寫入鏡像文件前獲取實際分區(qū)容量,根據獲取到的分區(qū)容量調整鏡像文件中的FAT32數(shù)據,然后按FAT32分區(qū)的組織順序(FAT32分區(qū)由保留區(qū)、FAT1區(qū)、FAT2區(qū)和數(shù)據區(qū)組成)依次將鏡像文件中的保留區(qū)、FAT1區(qū)、FAT2區(qū)和數(shù)據區(qū)內容寫入到分區(qū)。此方法的寫入過程是直接調用磁盤驅動的扇區(qū)讀寫接口,去掉了文件系統(tǒng)層的開銷。提前制作好FAT32鏡像可以省去拷貝前格式化分區(qū)的時間,而分區(qū)容量不同帶來的修改開銷很少。如果寫入的設備有自己的驅動程序并提供扇區(qū)的讀寫接口,那么也可以不通過標準磁盤讀寫接口進行寫入,解決一臺PC最多同時存在26個盤符的限制。
快速拷貝;Fat32;預燒錄
目前,拷貝數(shù)據到FAT32分區(qū)的方法主要包括如下步驟:首先將設備與電腦相連接,并掛載為磁盤;而后通過windows提供的格式化功能將磁盤格式化為FAT32分區(qū)格式;進而再將數(shù)據拷貝至FAT32分區(qū)中。然而,這種方法卻存在著諸多弊端:首先,數(shù)據拷貝至分區(qū)要調用FAT32文件系統(tǒng)接口,這會增加部分系統(tǒng)資源和時間開銷;其次,將磁盤格式化為FAT32分區(qū)格式時間開銷大,分區(qū)容量越大,所花費的時間越長,影響寫入效率;再次,由于上述方法需要依賴于磁盤,而Windows本身最多支持26個盤符,也就是說,最多只允許26臺設備同時進行寫入操作。
綜上所述,如何能夠快速地將數(shù)據寫入至FAT32分區(qū)中,且使得燒錄過程不受待磁盤數(shù)量的限制,進一步提升寫入數(shù)據的效率,滿足工業(yè)化生產的需求,是一個亟需解決的問題。
2.1 具體實施步驟
1)通過創(chuàng)建FAT32鏡像工具,將要拷貝的數(shù)據制作成最小FAT32鏡像文件,鏡像文件包含F(xiàn)AT32分區(qū)信息和拷貝數(shù)據。
2)連接設備,寫入數(shù)據前獲取設備的分區(qū)容量,由于鏡像文件不是按真實分區(qū)容量制作,所以在將鏡像文件寫入到分區(qū)前,需要根據真實的分區(qū)容量來修改鏡像文件的FAT32分區(qū)數(shù)據。
3)提取鏡像文件中的保留區(qū)數(shù)據,保留區(qū)數(shù)據位于FAT32鏡像文件的前32個扇區(qū)。
4)根據真實分區(qū)容量重新計算總扇區(qū)數(shù)和FAT扇區(qū)數(shù),然后更新保留區(qū)中DBR和備份DBR數(shù)據。
5)寫入保留區(qū)數(shù)據,通過調用磁盤驅動或者設備驅動的寫扇區(qū)接口,將修改后的保留區(qū)數(shù)據寫入到分區(qū)的LBA0位置。
6)提取鏡像文件中的FAT區(qū)數(shù)據,FAT區(qū)保存著所有文件的簇鏈信息,它緊接在保留區(qū)數(shù)據后面。
7)根據新的FAT扇區(qū)數(shù),擴展FAT分區(qū)數(shù)據,擴展FAT過程是申請一個新的FAT扇區(qū)數(shù)*512字節(jié)的空間并初始化為全0,拷貝原始的FAT數(shù)據到新申請的空間。
8)寫入FAT分區(qū)數(shù)據到分區(qū)LBA32位置。
9)提取鏡像文件中的數(shù)據區(qū)數(shù)據,數(shù)據區(qū)是存放拷貝內容的地方,前面的保留區(qū)、FAT分區(qū)都屬于FAT32文件系統(tǒng)信息。寫入到FAT分區(qū)結束的位置。
2.2 具體實施說明
在本實施方式中,所述FAT32分區(qū)包括保留區(qū),F(xiàn)AT區(qū)和數(shù)據區(qū),則所述FAT32分區(qū)格式的鏡像文件包括保留區(qū)數(shù)據,F(xiàn)AT區(qū)數(shù)據以及數(shù)據區(qū)數(shù)據。
FAT32分區(qū)格式中,保留區(qū)數(shù)據位于FAT32分區(qū)格式的鏡像文件的前32個扇區(qū),包括DBR和備份DBR,DBR(DOS BOOT RECORD,DOS操作系統(tǒng)引導記錄)通常位于扇區(qū)0的位置,包括兩部分內容:DOS引導程序和BPB(Bios Parameter Block ,BIOS參數(shù)塊)。其中DOS引導程序用于完成DOS系統(tǒng)文件的定位與裝載,而BPB用于存儲分區(qū)的磁盤信息,引導程序或設備驅動程序根據BPB中存儲的磁盤信息將磁盤邏輯地址轉換成物理地址。
FAT區(qū)數(shù)據中包括主文件分配表及其備份,所述主文件分配表用于存儲磁盤數(shù)據鏈接關系的數(shù)據結構。保留區(qū)、FAT區(qū)所存儲的為FAT32分區(qū)文件系統(tǒng)信息,數(shù)據區(qū)用于存儲待拷貝的數(shù)據。
由于鏡像文件是按拷貝數(shù)據的大小生成的,因而需要按分區(qū)真實容量對鏡像文件的內容進行調整,所述對鏡像文件的內容進行調整包括:根據所獲取的FAT32分區(qū)真實容量,重新計算調整后的FAT32分區(qū)格式鏡像文件的總扇區(qū)數(shù)以及FAT區(qū)的扇區(qū)數(shù),并修改FAT32分區(qū)格式鏡像文件的保留區(qū)數(shù)據中的DBR和備份DBR的總扇區(qū)數(shù),以及FAT區(qū)的扇區(qū)數(shù)的值。在本實施方式中,可以用如下公式完成對調整后的FAT32分區(qū)格式的鏡像文件的總扇區(qū)數(shù)以及FAT區(qū)的扇區(qū)數(shù)的計算:
n_vol=n_disk/512
tmpValue = n_vol - 32;
tmpValue2 = ((256 * nSecPerCluster) + 2) >> 1;
n_fat = (tmpValue + (tmpValue2 - 1)) / tmpValue2;
其中,n_vol表示鏡像文件的總扇區(qū)數(shù),n_fat表示鏡像文件的FAT區(qū)的扇區(qū)數(shù),n_disk表示分區(qū)容量,以字節(jié)為單位,nSecPer-Cluster表示每個簇占用的扇區(qū)數(shù),tmpValue和tmpValue2表示計算時的臨時文件。在本實施方式中,F(xiàn)AT區(qū)包括FAT1區(qū)和FAT2區(qū),則所述方法還包括步驟:根據計算得出的調整后的FAT32分區(qū)格式的鏡像文件的的FAT區(qū)的扇區(qū)數(shù),對FAT1區(qū)和FAT2區(qū)數(shù)據進行修改。例如原有的鏡像文件的FAT1區(qū)大小為4M,而所獲取的FAT分區(qū)大小為4G,則根據上述公式所計算得到的調整后的FAT1區(qū)大小為12M。也就是說,需要對原有的FAT1區(qū)大小進行擴展,增加8M數(shù)據以適應FAT32分區(qū)存儲容量的需要,為減少擴展FAT1區(qū)所花費的時間,可以在原有FAT1區(qū)所在存儲位置的末尾進行擴展,在本實施例中,即將需要擴展的8M數(shù)據添加于原有FAT1區(qū)所在存儲位置的末尾。優(yōu)選的,擴展FAT1區(qū)過程如下:首先,根據計算得出的FAT1分區(qū)的扇區(qū)數(shù)申請新的一塊存儲空間,所述存儲空間大小為計算得出的FAT1分區(qū)的扇區(qū)數(shù)*512字節(jié),此空間即為擴展后的FAT1分區(qū)大??;而后將所述存儲空間內容初始化為0,并拷貝擴展前的FAT1區(qū)數(shù)據至所述存儲空間。FAT2分區(qū)的調整與FAT1相同,F(xiàn)AT1區(qū)與FAT2區(qū)數(shù)據修改完成后,就可以對其進行燒錄。
將拷貝數(shù)據的操作替換為寫入扇區(qū),不僅節(jié)約文件系統(tǒng)層的開銷,且無需在拷貝前對分區(qū)進行格式化,大大縮短拷貝過程所花費的時間,提高了效率。此外,由于所述方法并不依賴于Windows系統(tǒng)磁盤接口來袖,因而只要設備驅動程序有讀寫扇區(qū)的接口,即可使拷貝操作不受26個磁盤限制,從而大大提高并發(fā)度,滿足了規(guī)模化生產的需要。
[1]張帆,史彩成.Windows驅動開發(fā)技術詳解[M].電子工業(yè)出版社,2008.
[2]Microsoft.Fat32 File system specification[S].2000,12.