硬碟滿了是肯定會影響讀寫速度的。但是否C盤滿了就會影響,8102年的今天,要分具體情況:
一、機械硬碟:
技術背景:
對於檔案系統來說,會把一個物理硬碟分成多個分割槽,而每個分割槽又分為若干個簇來儲存資料。通常來說,一個簇對應1個或者多個物理扇區。舉個栗子,假設C盤只有10個簇,編號從0~9。我們先寫入一個檔案A,佔用了0~3號共計4個簇;然後寫入檔案B,佔用4~6共3個簇;接下來刪除檔案A,釋放了0~3號簇。
如果這個時候寫入一個需要佔用6個簇的檔案C,這個時候C會佔用0~3和7~8共6個簇,這6個簇是不連續的。因此不管是寫入檔案C的時候,還是將來讀取檔案C的時候,硬碟需要尋道2次。
如果C盤有足夠的空間,例如有0~99共100個簇,檔案C可能會佔用7~12這連續的6個簇而無需產生碎片。讀寫所需尋道次數1次。
有碎片和沒有碎片的區別有多大?按照上面這個酷魚Pro 14TB的效能來說,讀取一個10MB的檔案,如果沒有碎片,需要10/250*1000+14.5=54.5ms;如果這個檔案分成4塊碎片,需要10/250*1000+14.5*4=98ms(都按照最快的250MB/s的傳輸速率來算)。幾乎需要多一倍的時間。
當然,檔案系統通常沒有這麼簡單,常見的FAT/FAT32分割槽有FAT表,NTFS分割槽有$MFT檔案,在沒有快取的情況下可能需要多次尋道才能定位到指定檔案的簇號,還要翻譯成硬碟對應的物理扇區號。其中相當一部分的尋道操作可以透過讀寫記憶體上的快取資料進行。
二、固態硬碟
對於固態硬碟,未使用過的空間(包括支援TRIM的固態靜置足夠長時間後),直接寫入的時間大概是數百us。但整塊硬碟滿了後,刪除部分檔案再次寫入,需要先經過一個2ms=2000us的擦除動作,甚至要先把數個髒塊上的資料整理寫入到其它的Block裡面才能騰出若干個可以擦除的Block,之後才能寫入,自然也是很影響效能的。
還有就是現在流行的TLC固態硬碟,通常用部分容量模擬SLC來加速寫入。如果硬碟滿了沒有足夠的可用空間用來模擬,稍微寫入大一點的資料就會SLC快取消耗完畢,打回TLC原型,也是會影響寫入效能的。
不過固態硬碟只看整個物理硬碟是否滿了,除非硬碟的分割槽方案就是整個物理硬碟只有一個分割槽(安裝作業系統時建立的一個或者多個小容量分割槽忽略不計)並且沒有留出可用空間,否則單個分割槽滿了是不會有影響的。如果分割槽的時候留出一個足夠大的未使用空間,或者還有其它分割槽並且這些分割槽都有充裕的可用空間,那麼即使C盤滿了也不會太影響效能。此外,部分企業級硬碟預留了OP空間,換句話說使用者永遠都不會碰到真正的硬碟滿了的情況。
PS:對於固態硬碟,因為讀取延遲很低,並且資料往往分佈在多塊快閃記憶體晶片上。如果只是讀取操作的話,即使寫滿了,效能也是幾乎不會受影響的。
[1]:希捷酷魚Pro機械硬碟評測:5000元14TB 土豪新寵
硬碟滿了是肯定會影響讀寫速度的。但是否C盤滿了就會影響,8102年的今天,要分具體情況:
一、機械硬碟:
技術背景:
機械硬碟的尋道時間很慢。即使是最新的型號,例如希捷的14TB酷魚Pro,最大傳輸速度258.7MB/s,隨機尋道延遲14.5ms:磁碟長時間使用後,會產生檔案碎片。對於檔案系統來說,會把一個物理硬碟分成多個分割槽,而每個分割槽又分為若干個簇來儲存資料。通常來說,一個簇對應1個或者多個物理扇區。舉個栗子,假設C盤只有10個簇,編號從0~9。我們先寫入一個檔案A,佔用了0~3號共計4個簇;然後寫入檔案B,佔用4~6共3個簇;接下來刪除檔案A,釋放了0~3號簇。
如果這個時候寫入一個需要佔用6個簇的檔案C,這個時候C會佔用0~3和7~8共6個簇,這6個簇是不連續的。因此不管是寫入檔案C的時候,還是將來讀取檔案C的時候,硬碟需要尋道2次。
如果C盤有足夠的空間,例如有0~99共100個簇,檔案C可能會佔用7~12這連續的6個簇而無需產生碎片。讀寫所需尋道次數1次。
有碎片和沒有碎片的區別有多大?按照上面這個酷魚Pro 14TB的效能來說,讀取一個10MB的檔案,如果沒有碎片,需要10/250*1000+14.5=54.5ms;如果這個檔案分成4塊碎片,需要10/250*1000+14.5*4=98ms(都按照最快的250MB/s的傳輸速率來算)。幾乎需要多一倍的時間。
當然,檔案系統通常沒有這麼簡單,常見的FAT/FAT32分割槽有FAT表,NTFS分割槽有$MFT檔案,在沒有快取的情況下可能需要多次尋道才能定位到指定檔案的簇號,還要翻譯成硬碟對應的物理扇區號。其中相當一部分的尋道操作可以透過讀寫記憶體上的快取資料進行。
二、固態硬碟
對於固態硬碟,未使用過的空間(包括支援TRIM的固態靜置足夠長時間後),直接寫入的時間大概是數百us。但整塊硬碟滿了後,刪除部分檔案再次寫入,需要先經過一個2ms=2000us的擦除動作,甚至要先把數個髒塊上的資料整理寫入到其它的Block裡面才能騰出若干個可以擦除的Block,之後才能寫入,自然也是很影響效能的。
還有就是現在流行的TLC固態硬碟,通常用部分容量模擬SLC來加速寫入。如果硬碟滿了沒有足夠的可用空間用來模擬,稍微寫入大一點的資料就會SLC快取消耗完畢,打回TLC原型,也是會影響寫入效能的。
不過固態硬碟只看整個物理硬碟是否滿了,除非硬碟的分割槽方案就是整個物理硬碟只有一個分割槽(安裝作業系統時建立的一個或者多個小容量分割槽忽略不計)並且沒有留出可用空間,否則單個分割槽滿了是不會有影響的。如果分割槽的時候留出一個足夠大的未使用空間,或者還有其它分割槽並且這些分割槽都有充裕的可用空間,那麼即使C盤滿了也不會太影響效能。此外,部分企業級硬碟預留了OP空間,換句話說使用者永遠都不會碰到真正的硬碟滿了的情況。
PS:對於固態硬碟,因為讀取延遲很低,並且資料往往分佈在多塊快閃記憶體晶片上。如果只是讀取操作的話,即使寫滿了,效能也是幾乎不會受影響的。
[1]:希捷酷魚Pro機械硬碟評測:5000元14TB 土豪新寵