所有存储设备都比许多人意识到的要复杂得多。nand 设备(包括 ssd、usb 拇指驱动器等)都容易出现故障,这与存储的 one job? 背道而驰:把我要求你为我保留的正确位还给我。
术语的几个定义,首先是:
ssd:代表固态驱动器(或磁盘),不需要任何移动部件。ssd 更像是一种外形而非内存技术,但这些术语经常(错误地)互换使用。
闪存:是一种不需要电源的存储器。也就是说,您不会在电源关闭时丢失数据。dram、sram 等是易失性存储器(它们在电源关闭时会丢失数据),因此这些类型的存储器不被视为闪存。
nand:是闪存设备中常用的实际非易失性存储器类型,恰好被构建到 ssd 外形中。它还用于计算机的 bios 芯片 compactflash(用于数码相机、usb 记忆棒、视频游戏机的存储卡等。
阅读更多:ssd(固态硬盘)和hhd的区别,哪个更好?
现在,我们都知道 flash 技术非常快。事实上,它们是如此之快,我们为什么要使用其他东西呢?
问题在于 nand 技术并不完美。事实上,就像其他任何事情一样,存在权衡取舍,当回答这样一个问题时,了解这些权衡是什么会对事情可能出错的地方产生巨大影响。
一方面,重要的是要知道 nand 技术实际上非常脆弱。事实上,它比用于旋转磁盘的介质更脆弱。要记住的事情包括数据的擦除、使用和保留。
让我们依次看一下。
您可能听说过单层电池 (slc)、多层电池 (mlc)、三层电池 (tlc) 或四层电池 (qlc) 技术。这些与您可以将多少位填充到一个单元格(分别为 1、2、3 和 4)有关。早期闪存设备(例如 violin memory)中使用的 nand 技术是 slc。事实上,它们中的许多仍然存在,尽管由于成本原因,它们如今已远不那么受欢迎。
冒着过度简化的风险,每单元的位数越多,设备就越便宜,但设备也越慢、越脆弱、越容易出现故障。这就是为什么用于数据中心和消费类电子产品的许多不同类型的 ssd 都是 mlc 类型或修改后的 tlc 类型。稍后将详细介绍这些修改。
“好吧,如果我想擦除我写到一个页面上的东西,但块中还有我不想擦除的其他页面怎么办?” 是的,我们到了棘手的部分。您必须将数据移动到新位置。这种在磁盘上移动数据以“清理”区域的过程称为垃圾收集。
它一直在发生。
更糟糕的是,这必须在整个设备上统一完成。为了保持磨损和撕裂的某种可预测性,整个设备需要在闪存设备的所有块/页面上以相同的速率写入和擦除。
即使您的程序/应用程序不需要移动数据,nand 设备也需要这样做。事实上,您的数据并不是简单地“坐着”等待使用;nand 材料必须持续更新,因此无论您是否愿意,数据每 90 天、60 天或 30 天或更短时间就会移动一次!
风险与回报
每次移动数据时,无论是通过网络还是在同一存储设备上,您都面临丢失数据的风险。这意味着必须进行检查和重新检查,以确保数据在移动过程中没有损坏。
每个闪存设备都有所谓的闪存转换层(ftl)。这是确保您不会丢失数据的真正重要的拼图。如果这被冲洗干净,那你就完蛋了。它是设备的一部分,它知道一切都在哪里,一切都被移动到哪里,以及哪些部分准备好被覆盖。
显然,该设备会尽其所能保护 ftl。根据设备的不同,这意味着可能非常健壮(冗余内存缓冲区),也可能非常弱(如 u 盘,它应该是一次性的)。
不同的设备也有不同程度的缓存和缓冲区。这些是用于高速存储的临时存放位置。(对于真正的极客来说,缓存和缓冲区之间的主要区别在于缓存是有索引的,可以为 read 请求提供服务,而 buffer 没有索引,不能为 read 请求提供服务)。
可能发生并可能损坏系统的大问题之一是,当您尝试写入设备时是否出现电源中断/波动。例如,突然断电会导致易失性写入缓冲区中的主机数据丢失,并可能导致 ssd 上的数据损坏。
所以,你需要准备和管理它。好吧,无论如何,该设备确实如此。
写入设备有多个阶段,设备将向主机(例如执行写入的应用程序或操作系统)确认它在进程中的位置。
即使在基于 pcie 的系统上,主机和存储设备也充当独立的实体(因为它们是不同的、物理上独立的实体)。当您有一个需要将数据写入设备的应用程序时,它需要将数据从易失性内存(例如,ram)移动到 ssd 上的缓冲区(称为写缓冲区)。当 ssd 收到数据时,它需要向主机确认数据已收到。此时,由主机决定在获得此确认之前不要从易失性内存中释放数据)。
这种来回是恒定的。“你有吗?” “还没有。” “现在怎么样?” “是的,我知道了。”
设备之间的差异
现在,在这个阶段,当 ssd 有数据时,它会告诉主机它已获得信息。这是不同类别的 ssd/usb 记忆棒等处理事情的不同之处。
企业 ssd(存在于数据中心的 ssd 类型)保护主缓冲区中的这些数据。请记住,这个缓冲区是易变的,这意味着此时如果突然断电,它就消失了。
让我换一种稍微不同的方式说。宿主认为ssd有,ssd有说有。主机从其主内存中转储数据并认为它是安全的。然后停电了。
ssd 上的写入缓冲区(易失性)突然变空了。但是它还没有写入flash。随之而来的是欢闹。
正如我所说,企业级 ssd 具有此缓冲区的保护机制,但其他类型的闪存设备(包括您从本地电子商店购买的消费级 ssd、usb 记忆棒等)则没有。
事实上,“消费类”固态硬盘在数据处于最后休眠阶段之前根本无法保护您的数据。数据在从主机传输期间不受保护,即使在它被确认回主机之后,或者当它从写缓冲区迁移回 nand 页时也是如此。(看看所有这些东西是如何组合在一起的?在这里你认为关于页面和块的讨论是多余的。)
另一方面,企业级 ssd 会在传输过程中的每个阶段保护数据(主机的初始传输除外——任何设备都无法保护尚未收到的数据)。
额外保护
有一种称为数据路径保护的东西,旨在保护数据在数据传输过程中免受位错误的影响。假设您对我所写的内容没有感到不知所措,美光发布了一个很棒的 pdf(直接链接),介绍了消费者和企业 ssd 之间的差异。
此外,还有一种叫做异步断电保护的东西,其目标是在断电事件期间保护静态数据。可以想象,消费级和企业级 ssd 之间存在差异。
正如您可能已经猜到的那样,这种额外的保护解释了企业级和消费级 ssd 之间的成本差异。设计为一次性的闪存设备(例如相机 sd 卡、usb 记忆棒等)没有很多(如果有)这些额外保护。保护得越多,成本就越高。
当然,这些是设备的数据保护机制。我们预计设备最终会屈服于故障(不是如果,而是何时),因此除了良好的备份和恢复机制外,我们还使用raid 系统、纠删码和其他系统的数据保护方法。
这可能超出您的预期,但希望它足够易用且平易近人,足以获得您正在寻找的答案(然后是一些)。
如果您有兴趣了解有关存储、存储网络或数据中心技术的更多信息,我为您组织了一个内容丰富的内容库——从绝对初学者到核心管理员。反馈总是非常感谢。