最近看到吧里说什么固态容量换算的事,有人说是厂商按1MB=1,000KB生产固态硬盘,而系统是按照1MB=1024KB换算的,但事实并非如此,实际上都是OP(Over Provisioning)空间导致的(确信),都怪OP(bushi)。
简单来说OP空间就是厂商用于存放固件、映射表等内容的空间,可以用于磨损均衡,替换坏块等功能,简单来说就是厂商做的冗余。小米14上魔改的存储改的就是这部分。(个人不建议这么做)
由于写入操作最小单位是页(page,一般4KB),而擦除的最小单位一般是块(block,一般为512KB)。而主流的NAND固态无法做到覆盖写入,所以如果空盘里保存一个比4KB小的文件需要向固态写入4KB或一个page,比文件本身的大小要大;而如果一个block内填了一半page,需要对这些page进行修改,主控需要先读取这个block的已有内容,修改后再写到另一半,原数据page标记无效;这样的话就会导致无效数据占用空间,所以主控在剩余block不足时一定会进行垃圾回收:将此block内的有效数据转写至另一block,原block内容被擦除,以待下次写入,这样实际写入了一个block,也比更改的半个block要大,上面两种现象就是所谓的写放大(Write Amplification)。只有另一个OP(Optane)例外,因为Optane的存储介质是相变存储器,能够做到覆盖写入。
从上面的描述就可以知道NAND固态写入不是直接覆盖写,而是先写新数据并将旧数据标记为无效,所以要能够把固态写满必须要预留一部分空间作为新数据的写入空间,没有OP空间连修改数据都做不到,而这个过程也必然伴随着写放大。更详细的跟其他杂七杂八的东西还是去看视频罢。

简单来说OP空间就是厂商用于存放固件、映射表等内容的空间,可以用于磨损均衡,替换坏块等功能,简单来说就是厂商做的冗余。小米14上魔改的存储改的就是这部分。(个人不建议这么做)
由于写入操作最小单位是页(page,一般4KB),而擦除的最小单位一般是块(block,一般为512KB)。而主流的NAND固态无法做到覆盖写入,所以如果空盘里保存一个比4KB小的文件需要向固态写入4KB或一个page,比文件本身的大小要大;而如果一个block内填了一半page,需要对这些page进行修改,主控需要先读取这个block的已有内容,修改后再写到另一半,原数据page标记无效;这样的话就会导致无效数据占用空间,所以主控在剩余block不足时一定会进行垃圾回收:将此block内的有效数据转写至另一block,原block内容被擦除,以待下次写入,这样实际写入了一个block,也比更改的半个block要大,上面两种现象就是所谓的写放大(Write Amplification)。只有另一个OP(Optane)例外,因为Optane的存储介质是相变存储器,能够做到覆盖写入。
从上面的描述就可以知道NAND固态写入不是直接覆盖写,而是先写新数据并将旧数据标记为无效,所以要能够把固态写满必须要预留一部分空间作为新数据的写入空间,没有OP空间连修改数据都做不到,而这个过程也必然伴随着写放大。更详细的跟其他杂七杂八的东西还是去看视频罢。
