不知道有沒有許多同志和我一樣,用STM32單片機玩FLASH上文件系統的時候,發現當中有個簇的概念,比如說你用FATFS自帶的查詢剩余內存空間的時候得到的就是空閑的簇數量。
那么問題來了,到底啥是簇呢 今天就徹底掃除疑惑。
一、扇區基本介紹
1、扇區(磁盤上划分的區域)
磁盤上的每個磁道被等分為若干個弧段,這些弧段便是磁盤的扇區。硬盤的讀寫以扇區為基本單位。
磁盤的每一面被分為很多條磁道,即表面上的一些同心圓,越接近中心,圓就越小。而每一個磁道又按512個字節為單位划分為等分,叫做扇區,在一些硬盤的參數列表上你可以看到描述每個磁道的扇區數的參數,它通常用一個范圍標識,例如373~746,這表示,最外圈的磁道有746個扇區,而最里面的磁道有373個扇區,因此可以算出來,磁道的容量分別是從186.5KB到373KB(190976B--381952B)
磁盤驅動器在向磁盤讀取和寫入數據時,要以扇區為單位。在磁盤上,DOS操作系統是以“簇”為單位為文件分配磁盤空間的。硬盤的簇通常為多個扇區,與磁盤的種類、DOS 版本及硬盤分區的大小有關。每個簇只能由一個文件占用,即使這個文件中有幾個字節,決不允許兩個以上的文件共用一個簇,否則會造成數據的混亂。這種以簇為最小分配單位的機制,使硬盤對數據的管理變得相對容易,但也造成了磁盤空間的浪費,尤其是小文件數目較多的情況下,一個上千兆的大硬盤,其浪費的磁盤空間可達上百兆字節。
為了對扇區進行查找和管理,需要對扇區進行編號,扇區的編號從0磁道開始,起始扇區為1扇區,其后為2扇區、3扇區……,0磁道的扇區編號結束后,1磁道的起始扇區累計編號,直到最后一個磁道的最后一個扇區(n扇區)。例如,某個硬盤有1024個磁道,每個磁道划分為63個扇區,則0磁道的扇區號為1~63,1磁道的起始扇區號為64最后一個磁道的最后一個扇區號為64512。硬盤在進行扇區編號時與軟盤有一些區別,在軟盤的一個磁道中,扇區號一次編排,即1、2、3……n扇區。由於硬盤的轉速較高,磁頭在完成某個扇區數據的讀寫后,必須將數據傳輸到微機,這需要一個時間,但是這時硬盤在繼續高速旋轉,當數據傳輸完成后,磁頭讀寫第二個扇區時,磁盤已經旋轉到了另外一個扇區。因此在早期硬盤中,扇區號是按照某個間隔系數跳躍編排的。
2、壞扇區
在硬盤中無法被正常訪問或不能被正確讀寫的扇區都稱為Badsector。一個扇區能存儲512Bytes的數據,如果在某個扇區中有任何一個字節不能被正確讀寫,則這個扇區為Badsector。除了存儲512Bytes外,每個扇區還有數十個Bytes信息,包括標識(ID)、校驗值和其它信息。這些信息任何一個字節出錯都會導致該扇區變“Bad”。例如,在低級格式化的過程中每個扇區都分配有一個編號,寫在ID中。如果ID部分出錯就會導致這個扇區無法被訪問到,則這個扇區屬於Badsector。有一些Badsector能夠通過低級格式化重寫這些信息來糾正。
原文地址:https://blog.csdn.net/linux12121/article/details/82454200