硬盘满了是肯定会影响读写速度的。但是否C盘满了就会影响,8102年的今天,要分具体情况:
机械硬盘:任何分区满了之后,如果再经常进行删除-写入或者修改文件内容这类可能导致产生文件碎片的操作后,读写性能都会严重下降。固态硬盘:基本上不会影响读性能;是否会影响写入性能,则要看具体情况。
一、机械硬盘:
技术背景:
机械硬盘的寻道时间很慢。即使是最新的型号,例如希捷的14TB酷鱼Pro,最大传输速度258.7MB/s,随机寻道延迟14.5ms:
希捷酷鱼Pro 14TB测试[1]磁盘长时间使用后,会产生文件碎片。
对于文件系统来说,会把一个物理硬盘分成多个分区,而每个分区又分为若干个簇来存储数据。通常来说,一个簇对应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的擦除动作,甚至要先把数个脏块上的数据整理写入到其它的Bloc