无论是 UEFI、手机还是 SSD,三星显然在实施标准方面并不擅长。不幸的是,几年前,我为我的笔记本电脑购买了三星 SSD 840 PRO 系列 SSD,从那时起我就一直在使用(这是在所有关于其不符合标准的实施的信息公开之前)。这是一款非常不错的 SSD,除了异步 Trim 无法正常工作,也就是说它会删除不应该删除的数据。正因为如此,Linux 不会在其上使用 Trim,因此人们的数据不会丢失(这在他们在某些三星 SSD 型号上禁用 Trim 之前发生过)。
因为我已经经常使用这个 SSD:禁用 Trim 对 SSD 进行磨损均衡的能力有多大影响?
我找不到特别好的、可靠的信息来说明 SMART 数据的不同属性的含义。人们和文章基本上在几句话之后就猜测和自相矛盾了。
这个维基百科文章说:
每个驱动器制造商都会定义一组属性,并设置阈值,在正常运行下,属性不应超过该阈值。每个属性都有一个原始值,其含义完全由驱动器制造商决定(但通常对应于计数或物理单位,例如摄氏度或秒)、一个标准化值,范围从 1 到 253(其中 1 代表最坏情况,253 代表最好情况)和一个最差值,代表记录的最低标准化值。属性的初始默认值为 100,但不同制造商可能会有所不同。
首先:鉴于其标题是“已知 ATA SMART 属性”,这有多大相关性?它适用于通过 SATA 连接的 SSD 吗?
为什么值的范围是从 1 到 253?0、254 和 255 又是什么意思?甚至使用 100 以上的值吗?
我的 SSD 的 SMART 数据如下所示(根据gnome-disks
):
没有大于 100 的值。
我有许多外置硬盘,但只有这一个 SSD(内置),所以我无法将其 SMART 数据与其他 SSD 的 SMART 数据进行比较,我知道它们的使用量。但我认为我的 SSD 磨损级别计数的原始值为 245,这意味着 SSD 的存储单元平均被写入了 245 次。请告诉我这是否正确,读取计数是否也算在内,是指定存储空间(256 GB)的 245 倍还是指定存储空间 + 预留存储空间(用于更换故障部件)。
我的 SSD 的标准化磨损级别计数为 93 是否意味着它的使用寿命已接近三分之二({1,...,253})或相当不错({1,...,100})?
最后一个问题:如果只有异步 Trim 会导致数据丢失,为什么 Linux 要禁用这些 SSD 上的 Trim?
输出$ sudo smartctl /dev/sda -a
:http://pastebin.com/Prf7NzwN
我根据评论中的讨论创建的相关问题:https://unix.stackexchange.com/questions/333635/enabling-synchronous-trim-only
答案1
要回答核心问题,是的,但您的驱动器性能不佳。(我已将 SMART 数据重新发布到 GitHub Gist。)
您的 SMART 统计数据表明,您已向驱动器写入了 21.5 TiB(总共写入了 46248065971 个 LBA,每个 LBA 512 字节)。这相当于 86 次完整驱动器写入的主机写入(原始 NAND 为 256 GiB)。但是,您提到驱动器的底层 NAND 已被写入超过 245 次。换句话说,驱动器已写入几乎三倍您实际发送到驱动器的数据。这称为写入放大。
为了解释发生了什么,我将总结一下我写的另一个答案NAND 闪存由一系列块组成,每个块包含多个页面。数据可以写入单个页面,但必须以整个块的形式擦除,并且包含数据的页面在擦除之前无法重写。为了避免不必要地擦除块和重写数据,SSD 将写入分散到不同的块中,并将旧数据标记为无效;驱动器会尝试避免擦除块,直到每个块中的所有页面都标记为无效。如果没有足够的可用页面,这种方法就会失效,在这种情况下,驱动器被迫擦除包含有效数据的块并在其他地方重写该数据,以释放空间来存储新数据。因为这意味着相同的数据被多次写入底层 NAND,所以这种不良行为被称为写入放大。
缺少 TRIM 意味着驱动器最终会将已删除的数据视为有效数据,从而减少驱动器的可用空间量。驱动器最终会表现得好像已完全填满,即使事实并非如此。
为了回答你的问题,驱动器应继续正确磨损,尽可能地将写入分布在 NAND 上。了解三星,如果他们的算法在满的驱动器上不能正确执行此操作,我会感到非常惊讶。但是,它会不断重写已经写入的数据,从而降低性能并减少耐用性。鉴于 TRIM 不可用,最好的办法是过度配置驱动器,或为分区分配少于完整(256 GB)的容量(例如 200 GB)。但是,您需要安全擦除驱动器才能使其正常工作,这意味着必须先备份所有内容,然后恢复。考虑到驱动器的容量有限,我也不确定您是否能够在不耗尽空间的情况下有意义地减小分区大小。
至于您对 SMART 数据的解释:
- 是的在三星和许多其他 SSD 上,磨损均衡计数的原始值是驱动器上所有 NAND 的平均写入次数。这意味着驱动器的 NAND 平均经历了 245 次完整写入周期。请参阅三星 SSD“Wear_Leveling_Count”含义。
- 这是基于原始 NAND 容量,包括任何剩余空间。
- 读取不计入此数字(除非 SSD 因以下原因必须重写数据:读干扰)。
- 归一化值的确切范围因驱动器制造商而异,但在大多数驱动器上,磨损均衡计数在 0 到 100 的范围内。您的驱动器估计剩余的写入耐久性约为 93%。此驱动器上的其他大多数归一化值也在 0 到 100 的范围内。(840 PRO 上的 NAND 可承受约 3500 次写入周期,245 次写入周期占该数字的 7%。)
- 规范化的属性值 254 和 255 被视为保留值,不应出现在任何驱动器上。
答案2
如果用户将一些数据写入逻辑扇区 12345,而 SSD 控制器恰好将这些数据存储到物理块 4321,这并不意味着这些信息将始终驻留在该块中。假设用户已将一些数据写入逻辑扇区 12346,系统也已将这些数据放入物理块 4321,但后来用户又将其他内容写入逻辑扇区 12346。此时,物理块 4321 将保存扇区 12345 当前保存的内容的有用副本,以及扇区 12346 之前保存的一些数据的无用副本。如果有许多扇区已写入块 4321,但随后其逻辑内容被替换,则 SSD 控制器可能会决定将所有有用信息从块 4321 复制到其他位置,并对块 4321 执行批量擦除(这将是存储可以重复使用的唯一方法)。
如果在回收块 4321 之前,SSD 控制器被告知没有人需要扇区 12345 的当前内容,那么 SSD 控制器可以在批量擦除块时让该信息消失。但是,如果没有通知 SSD 控制器不再需要该块的内容,那么 SSD 控制器必须在批量擦除块 4321 之前在其他地方复制该块。虽然这个额外的复制操作除了花费时间和精力以及对芯片造成的轻微磨损外不会造成任何损害,但让控制器知道在回收块时不需要复制页面的内容将提高性能、降低功耗并减少磨损。三赢。