T客邦那篇太冗長了,我把重點說明一下。
傳統 512 byte 為一個 sector 的硬碟, sector 排列如下, 每個 O 是一個 sector(512 byte):
O O O O O O O O O O . . .
先進格式則以 4K (8 個 512 byte) 為一個寫入讀出的單位, (下面每個 O 是 512 byte) :
[OOOOOOOO] [OOOOOOOO] ...
但先進格式硬碟定址卻跟傳統硬碟一樣, 把每 512 byte 看做一個 sector.
所以有可能造成沒 4K 對齊的現象.
當我們跟硬碟發出要取出 sector 3..10 共 4K 的資料時, 硬碟要先把第一個 4K 讀出取出後面 sector 3..7 的資料, 再把第二個 4K 取出前面 sector 8..10 併成一個 4K 再傳給我們. Disk read 效率還好, 影響不大, 但寫入時就很慘.
當我們要把 4K 的資料寫入 sector 3..10 時, 本來傳統作法就寫入就好, 但現在硬碟控制器卻要先把第一二個 4K 讀出到 buffer, 把我們要寫入的資料塞入 buffer 裡 sector 3..10 的位置, 然後等碟片轉到磁頭下時再把這兩個 4K 寫入碟片. 非常花時間.
既然現在 OS 都至少以 4K 為一單位 (block) 讀寫, 所以把 block 跟硬碟的 4K 對齊就能直接寫入而不需要 讀出 - 修改 - 寫入 這樣的動作.
至於為什麼測試至少以 4K 為單位,我想是因為現在硬碟都很大,OS 至少以 4K 為讀寫單位。不過如果 partition 太小就不一定了,比如小於 512MB 時,檔案系統就可能以 1K 為單位,除非特別指定。