4k的意思是2011年後的硬碟物理扇區大小為4k,磁碟碟片上磁頭讀寫資料的最小單位是4k。磁頭無法向扇區內寫入512b大小的資料,一次最少寫入4k。下圖是我2014年買的希捷行動硬碟,用diskgenius測出的資訊,注意上邊寫的扇區大小512b指的是邏輯扇區,硬碟實際的物理扇區是4k。
但是2011年以前的舊式磁碟一個物理扇區是512b,老系統跟磁碟之間的資料交換也是以512b為單位,所以老系統就無法直接用4k物理扇區的磁碟。
為了相容性,4k物理扇區的磁碟配備了512b轉換韌體(512-byte conversion firmware),目的是使4k扇區的磁碟“從外邊看起來”像老式的512b扇區磁碟一樣。一個4k物理扇區的資料可以在磁碟快取中,被轉換韌體拆分成8個512b的資料塊。轉換韌體像一箇中介一樣,從下層的硬碟的4k物理扇區讀取資料,然後拆分修改為512b格式資料,傳送給上層的檔案系統。從上層的檔案系統拿到512b格式的資料,將8個512b資料,拼接、轉為4k格式,寫入到4k磁碟扇區裡。
但問題就來了,由於歷史慣例,老式512b磁碟的前63個扇區是儲存著mbr及硬碟分割槽表等重要資訊,新的4k扇區磁碟為了相容性也空出磁碟最前面的63個512b大小的空間,即63*512b=31.5k,31.5k/4k=7.875=7+7/8。即4k硬碟的前7個物理扇區被佔滿,第8個物理扇區的前7/8區域也被佔用。此時向磁碟寫入檔案資料就是從第8個物理扇區的後1/8開始,即第8個512b資料塊開始寫入。計算機檔案系統讀寫的單位是簇(cluster),很多磁碟檔案系統(如NTFS、ext3、HFS+等 )的簇容量也為4k。當寫入一個4k大小的簇時,需要把一個4k扇區的資料全部讀入快取,512b轉換韌體將要寫入的資料和4k扇區前邊已經存在的資料整合到一起,然後再將整合修改後的資料全部寫入硬碟的4k扇區n裡。最後還要把一個4k簇剩餘的資料寫入到4k扇區n+1裡。這樣一個4k簇的資料就被跨物理扇區儲存。本來一步就能完成的寫入操作,硬生生的變成了三步,先讀取到快取,然後在快取裡修改,最後寫入到磁碟扇區。而且本來一個4k物理扇區就能儲存1個簇的資料,現在需要動用2個物理扇區各存一部分。造成了效能下降。
4k對齊要做的工作就是,讓檔案系統從物理扇區的開頭而不是中間寫入資料。一個物理扇區大小為4k,所以對齊到512b邏輯扇區的8個整數倍,8n*512b=n*4k,就對齊到了n個4k物理扇區(n為正整數)。這樣就不用進行拆分、拼接、修改這樣耗時耗力的操作了。
4k的意思是2011年後的硬碟物理扇區大小為4k,磁碟碟片上磁頭讀寫資料的最小單位是4k。磁頭無法向扇區內寫入512b大小的資料,一次最少寫入4k。下圖是我2014年買的希捷行動硬碟,用diskgenius測出的資訊,注意上邊寫的扇區大小512b指的是邏輯扇區,硬碟實際的物理扇區是4k。
但是2011年以前的舊式磁碟一個物理扇區是512b,老系統跟磁碟之間的資料交換也是以512b為單位,所以老系統就無法直接用4k物理扇區的磁碟。
為了相容性,4k物理扇區的磁碟配備了512b轉換韌體(512-byte conversion firmware),目的是使4k扇區的磁碟“從外邊看起來”像老式的512b扇區磁碟一樣。一個4k物理扇區的資料可以在磁碟快取中,被轉換韌體拆分成8個512b的資料塊。轉換韌體像一箇中介一樣,從下層的硬碟的4k物理扇區讀取資料,然後拆分修改為512b格式資料,傳送給上層的檔案系統。從上層的檔案系統拿到512b格式的資料,將8個512b資料,拼接、轉為4k格式,寫入到4k磁碟扇區裡。
但問題就來了,由於歷史慣例,老式512b磁碟的前63個扇區是儲存著mbr及硬碟分割槽表等重要資訊,新的4k扇區磁碟為了相容性也空出磁碟最前面的63個512b大小的空間,即63*512b=31.5k,31.5k/4k=7.875=7+7/8。即4k硬碟的前7個物理扇區被佔滿,第8個物理扇區的前7/8區域也被佔用。此時向磁碟寫入檔案資料就是從第8個物理扇區的後1/8開始,即第8個512b資料塊開始寫入。計算機檔案系統讀寫的單位是簇(cluster),很多磁碟檔案系統(如NTFS、ext3、HFS+等 )的簇容量也為4k。當寫入一個4k大小的簇時,需要把一個4k扇區的資料全部讀入快取,512b轉換韌體將要寫入的資料和4k扇區前邊已經存在的資料整合到一起,然後再將整合修改後的資料全部寫入硬碟的4k扇區n裡。最後還要把一個4k簇剩餘的資料寫入到4k扇區n+1裡。這樣一個4k簇的資料就被跨物理扇區儲存。本來一步就能完成的寫入操作,硬生生的變成了三步,先讀取到快取,然後在快取裡修改,最後寫入到磁碟扇區。而且本來一個4k物理扇區就能儲存1個簇的資料,現在需要動用2個物理扇區各存一部分。造成了效能下降。
4k對齊要做的工作就是,讓檔案系統從物理扇區的開頭而不是中間寫入資料。一個物理扇區大小為4k,所以對齊到512b邏輯扇區的8個整數倍,8n*512b=n*4k,就對齊到了n個4k物理扇區(n為正整數)。這樣就不用進行拆分、拼接、修改這樣耗時耗力的操作了。