那块几年前装上的便宜SATA固态硬盘,可能并没有你感觉的那么慢。如果你一直把它塞到接近满盘,问题或许跟它的年头关系不大,而跟你留了多少可用空间有关。
固态硬盘在后台有自己管理数据的一套方式,把盘用到接近极限,会让这套工作变得相当吃力。搞清楚删除、替换、写入数据之后到底发生了什么,就能明白为什么一点点没用上的存储空间,可能比你预想的更重要。
为什么固态硬盘需要空闲空间
固态硬盘把数据存在断电后仍能保留内容的非易失性存储器里。这种存储器叫NAND闪存,它以称为页的小单元存放数据,页又被归组为更大的单元,称为块。
当你替换一个文件时,固态硬盘没法直接就地覆盖原有数据。控制器会把新数据写到另一个页,并把旧页标记为无效。在这个块能被重新使用之前,控制器必须把其中仍然有效的数据搬到别处,然后擦除整个块。
这个过程叫垃圾回收。控制器会追踪哪些页存的是当前数据、哪些可以丢弃,然后重新整理剩下的数据,好让整个块被擦除并复用。它还会把写入分散到整块NAND上,以管理磨损。
有充足可用空间的盘,做这些操作时余地更大。接近满盘的盘,可用的空块更少,持续写入就会变得更吃力。这一点在廉价固态硬盘上尤其明显——这类产品往往还会动用闪存架构的另一部分,让写入速度看起来比底层NAND实际能撑住的高得多。
廉价固态硬盘为什么在大文件写入时会掉速
有些消费级固态硬盘会拿一部分NAND当SLC缓存用,这是一块临时的高速区域,先把进来的数据存下,再由控制器把它搬进硬盘的常规存储区。SLC是单层单元的意思,即每个闪存单元存一个比特的数据。
大多数廉价固态硬盘用的是TLC或QLC NAND,每个单元存更多比特。TLC每个单元存三个比特,QLC存四个。存更多比特能提高容量,但写入和管理这些单元通常比把它们当SLC用要慢。
控制器可以临时让一部分TLC或QLC单元以SLC模式工作,给固态硬盘腾出一块接收写入的高速区域。这对短时间的文件拷贝特别管用,因为数据可以先被高速接收,之后再被重新整理成常规存储格式。
问题出现在大文件传输把这块缓存填满的时候。固态硬盘随后不得不把更多数据直接写进它原生的TLC或QLC存储,而那里的持续写入速度可能低得多。
接近满盘的盘,留给控制器管理数据、维持这块缓存的余地更小,于是切换到较慢的持续写入状态会更早发生。
热门跟贴