在介紹exfat文件系統之前,首先介紹一下MBR,MBR作爲傳統的DOS系統的引導扇區,其中可能存儲有bootloader的code,但是如果用於linux這樣的系統,這部分是不許要的,因此,一般是0.
0-0x88 |
主引導程序 |
引導程序 |
0x89– 0x1bd |
出錯信息數據區 |
數據區 |
0x1be– 0x1cd |
分區1(16字節) |
分區1 |
0x1ce– 0x1dd |
分區2(16字節) |
分區2 |
0x1de– 0x1ed |
分區3(16字節) |
分區3 |
0x1ee– 0x1fd |
分區4(16字節) |
分區4 |
0x1fe |
0x55 |
結束標誌 |
0x1ff |
0xaa |
結束標誌 |
Table1
由table1,可以看到從0x1be開始,是分區表的信息,最後兩個字節是結束標誌,對於Linux系統來說,真正要用到的是分區表這部分的信息。
字節偏移 |
內容 |
0 |
引導標誌,0x80(活動分區),0x00(非活動分區) |
1,2,3 |
分區起始的磁頭號,扇區號,柱面號 磁頭號:1 扇區號:第2字節的低6bit. 柱面號:第2字節高2bit+第3字節 |
4 |
分區類型: 00H :未指定 06H:FAT16 0BH:FAT32 05H:擴展分區 07H:NTFS 0FH:(LBA)擴展分區 83H:linux分區 |
5,6,7 |
分區的結束磁頭號,扇區號,柱面號 磁頭號: 第5字節 扇區號:第6字節的低6bit 柱面號:第6字節的高2bit+第7字節 |
8,9,10,11 |
本分區之前已經使用的扇區數,即分區的開始地址 |
12,13,14,15 |
分區的總的扇區數。 |
對於固態硬盤來說,扇區,磁頭等物理上是不存在的,所以我們主要關注分區的開始地址和分區的長度。
下面是一個SD卡,大小是16G,通過fdisk分成兩個分區
圖1
從圖1知,分區1的起始地址是10000,長度是10000000– 10000 + 1 = 9990001
分區2的起始地址是10000001,長度是31116287– 10000001 + 1 = 21116287.
下圖是我通過一個小應用解析的MBR的數據內容,主要開分區表的信息。
圖2
圖3
圖4
綜合圖2,圖3,圖4可獲取如下信息:
分區1的起始地址是2710H,即十進制的10000,長度是986f71H,即十進制9990001
分區2的起始地址是989681H,即十進制10000001,長度是0142357fh,即十進制21116287.
這些數據和以上我們計算的完全吻合。
對於SD卡,MMC,SSD等,由於物理地址是線性的,因此沒有磁頭,柱面等概念,因此這些數據一般來說,沒有意義。
Exfat文件系統。
Exfat文件系統是微軟發佈的一個類FAT的文件系統規範,支持大於4G的文件。