北极,请勿付费咨询 阅读原文 我的工作是做操作系统存储驱动相关的东西,包括文件系统、存储驱动、USB 都接触过,把盘写坏了的事情还是遇到过不少次的。 如果把写坏的盘做一个汇总,可以总结以下几个特点: 1. 基本上都是不出名的小厂的盘,大厂尤其是 Intel 的盘在压力测试下也没出过问题,Intel 的盘不仅耐用,并且掉电丢数据的情况也很少。 2. 新产品更容易坏,比如 NVMe 刚出来的时候,各种杂牌子的盘很多,坏的也多,但过了一段时间以后,NVMe 的稳定性比第一批盘要好。这个规则也适用于 SATA-SSD(以下简称 SSD),但是因为 SSD 已经比较成熟了,所以 SSD 的问题相对于 NVMe 来说要少一些。 3. 操作系统上层操作很难写坏一个盘,因为盘自身带缓存,解决方法是发送硬件的 flush(SYNC)命令,并且不要使用 TRIM 命令。 早年(大概 8 年前)SSD 刚开始普及的时候,杂牌子的 SSD 比较多,国外客户更是什么样的盘都有,寄过来一些故障盘,发现在持续烤机一段时间(大概一个月)以后,性能开始下降,文件系统(RTOS 上的)性能从 200MB/s 左右下降到不到 100MB/s,这个时候盘已经快要坏了,大版本 release 测试的时候发现性能有下降,会用不同的盘测一下,如果是某个特定的盘的问题,那么就会把这个盘从测试环境里取出来,不再继续使用。这些盘年代久远,印象不太深刻。 我印象深刻的是两年前我写坏过一个 NVMe 盘,盘不是我买的,但是因为我们文件系统的性能距离官方数据有一定差距,并且想研究一下 TRIM(DISCARD)的影响,我就拿过来研究了一下(顺便说一下,有几个回答里有人提到过这个品牌,这个品牌名声一般)。为了避免硬件缓存的影响,我每次测试之前,会全盘写一遍 0x55,再写一遍 0xAA,每写一段就发一个 SYNC 命令,这样能迫使硬件缓存完全失效,并且会完全消耗一次 PE 次数。写完一遍 55/AA 之后,再进行后续性能测试(以每次 256KB 的数据块写 2GB 的内容)。 这个 NVMe 盘(PCI-E)裸写的速度大概是 700-800MB/s,在我反复擦写 0x55/0xAA 大概 5 次左右的时候,盘的写速度突然掉到 200MB/s,之后一直就保持在这个速度上了。 基本上可以认为这个盘已经坏了。 评论有人说 SSD 跟 NVMe 是一种东西,不应该这么比,我回答里的 SSD 特指 SATA-SSD,二者的主控并不一样,NVMe 刚流行的那两年,因为主控问题导致 NVMe 挂掉的盘很多,第一批 NVMe 的主控技术并不好。主控对闪存的性能和寿命影响是很大的。 所以,要问固态盘快要坏了的时候是什么现象,那么首先可能遇到的是掉速问题,频繁擦写(尤其是写一轮 55/AA)可能会导致固态盘的负载均衡算法失灵;也可能会零碎的丢失一些数据,但考虑到盘本身很大,如果不是像 Chia 那样 P 盘的话,未必能发现异常的数据块。 正常使用,尤其是用大厂的盘,一般不会有什么问题,我手头的 Intel SSD 730 Series 240GB,是 2014 年买的,作为系统盘使用至今没有任何问题。但另外一块 SanDisk 的 1T SSD,用了不到 4 年,已经有好几块坏快了(但还能用)。但是大厂的东西,贵是真的贵,一分钱一分货,十分钱两分货。 写废盘的测试流程(注:绕过文件系统,直接操作驱动): 1. 申请 256KB 的固定缓存; 2. 缓存填充 0x55,从第一个扇区写到最后一个扇区; 2.1. 每写完 1G,发送一次硬件 Flush 命令(NVMe:Flush Cmd 0x00,SATA:ATA_CMD_FLUSH 0xE7/0xEA) 3. 缓存填充 0xAA,从第一个扇区写到最后一个扇区; 3.1. 每写完 1G,发送一次硬件 Flush 命令(同上) 4. 准备 1-2GB 的内存,按偏移量对 0x100 求余填充数据 5. 计时,写入数据,计算性能 6. 计时,读取数据,计算性能,校验 7. 发送 Flush 命令,并重复 4-6 步骤多次(>5)求平均数 阅读原文