先把sd卡格式化,然后新建幾個文件放在里面,用於分析,sd卡中文件的存儲方式。
使用工具winhex,打開磁盤sd卡。
先分析一下sd卡的第一個扇區,其中的內容為DBR(DOS BOOT RECORD c操作系統引導記錄區)
DBR中BPB部分才是這一區域的核心部分,對於FAT32的實現意義很大。
每個紅線部分是一個字段,要知道是什么意思,對照表看看就可以啦:
上面的長度是只占的字節數,現在就對照分析一下,
每個扇區字節數是00 02,屬於小端存數,讀得時候為0x02 00,也就是512字節。
沒簇的扇區數是0x08,就是包含8個扇區,大小為4kB。
保留扇區數目為26 00,就是0x0026,保留38個扇區,你會看到fat表放在第38個扇區,前面的空間就只包含了DBR,沒有跟文件有關的東西,都是與sd卡本身有關的信息。
fat表數,為02,就是2個,這是fat32文件系統的特色,2個中有一個是備份的。
磁道扇區數為3f 00 就是0x003f,63,一個磁道所含的扇區數為63
磁頭數ff 00 就是0x00ff,255
sd卡所含的總扇區數為 00 a0 3a 00 就是0x003aa000 共有3842048個扇區
fat表扇區數為a1 0e 00 00,就是0x0ea1,3745個扇區
跟目錄簇號為02 00 00 00,就是2號,其實就是實際存儲位置是fat表后面的第一個簇,8個扇區。用於存儲根目錄。
下面還有一個信息不是很重要。
下面分析fat表:
fat表示從第38個扇區開始,然后占空間3745個扇區。為什么占這么大呢,首先fat表中每4個字節描述一個簇,一個簇中有8個扇區,sd卡可用扇區數是3834520。
(3834520/8)*4/512=3744.6484375,約為3745個扇區。可用扇區數是可以查啊。winhex中的詳述技術報告:
接下來看看fat表中的內容吧:
fat表是用來表示一個文件占了多大空間的,都是以簇為單位。哪怕你的文件只有一個字節,也是占一個簇,4kB的空間。或許你會覺得很浪費,不過想想,分得越細,越難查找,所以需要折中。我在sd卡中新建一個文件夾是SEUIC,SEUIC中新建VIM.txt(大小是10.02kB,占空間12KB,就是3個簇),根目錄下還有一個文件TEST.txt(大小17個字節,占4KB)。那么fat表怎么表示的呢?
前8個字節表示這里是fat表的開始。后面的紅線表示,每出現FF FF FF 0F都表示一個文件的結束,每四個字節為一個簇項,用以標記次簇的下一個簇號。依次解釋下,首先sd卡中存儲的是跟目錄區,占一個簇,簇號是2。后面是一個文件夾目錄文件(SEUIC),占一個簇,簇號3。后面是文件VIM.txt,占3個簇,這里就好玩了,第一個簇號是4,你看到的05,就是標記的下一個簇號,表示這兩個簇共同記錄了同一個文件,所以把他們鏈接起來。直至第6簇結束,表示文件共占3個簇。最后又是一個只占一個簇的文件(TEST.txt)。其實這里是看不出文件名的。這里只會記錄文件在sd卡中的存儲。然后在目錄區中描述一個文件的時候,只要記錄首簇號就可以了,很方便是不是。當你在一個文件中添加內容的時候,隨便寫在哪個簇,並不需要連續的,然后把簇號添加進上一個簇項里面,就完成任務了。
下面介紹目錄區:
先計算目錄區所在扇區,由fat表所在第一個扇區38,加上2個fat表所占扇區數就是3745*2(別忘了又一個備份的fat表)。結果是7528,winhex在詳細技術報告中也說明這個扇區是第一個數據扇區。
要看懂每個字段的意思,還是要查表的:
一個目錄項占32個字節,就是2行嘍。可以看出SEUIC的屬性是子目錄,起始簇號是3,這里把目錄當做文件管理,但是這樣的文件大小是0;
對於SEUIC子目錄下的文件這里是看不到的哦。TEST.txt文件屬性是歸檔,就是文件,起始簇號是7,字節數為17.
那么再去找VIM.txt,首先定位SEUIC所在扇區,他的簇號是3,就是目錄區所在扇區加8為7536。所以要找一個文件,是一層一層剝開來得。
好吧,現在去7536扇區看看:
可以看出,VIM.txt屬性是歸檔,首簇號是4,大小為0x28da,10458字節。你可以右擊文件屬性看一下,肯定是對應的啊。
那么要看VIM中的內容直接去第4簇。我們去看一下TEST.txt文件吧,這個文件比較小,在第7簇,就是7538+4*8=7568.
內容就是this is a test!!!好吧就這么多了。
在linux文件系統中,所要建立的文件索引節點所需的數據就是來自上面的32字節的數據,他記錄了文件的名字,屬性,大小,地址等信息。
還有就是,文件是一層一層向下找得,那么系統啟動掛載sd卡的時候只需要把跟目錄區拷貝到內存中就可以了。那么查找的時候,打開一個子目錄,就可以找到這個目錄下的文件信息了。所以把目錄當做文件看待是很有好處的。因為文件本身在哪兒並不重要。