![背景信息:](https://linux22.com/image/1422280/%E8%83%8C%E6%99%AF%E4%BF%A1%E6%81%AF%EF%BC%9A.png)
一个名叫 NickN 的聪明人保持着冗长的论坛帖子关于构建一台功能强大的计算机的看法(针对玩微软的 Flight Simulator X,这是一款要求很高的软件)。
他在某处总结了有关 SSD 驱动器的要点,并得出以下结论:
不要对 SSD 进行分区
不幸的是,他没有详细说明这一点,但我不知道他为什么这么说。对 SSD 进行分区有什么缺点?(此处的分区意味着 >= 2 个分区)
答案1
我再说一遍,SSD 不能在文件系统级别工作!
文件系统看待事物的方式和 SSD 看待事物的方式之间没有 1:1 的对应关系。
您可以随意对 SSD 进行分区(假设每个分区都正确对齐,现代操作系统会为您处理所有这些);它不会造成任何损害,不会对访问时间或其他任何事情产生不利影响,也不必担心对 SSD 进行大量写入。他们有这些功能,因此您每天可以写入 50 GB 的数据,并且可以使用 10 年。
响应罗宾汉的答案,
磨损均衡不会有那么多的可用空间,因为写入操作将分散在较小的空间中,因此您“可能”但不一定会比整个驱动器是单个分区时更快地磨损驱动器的该部分,除非您将在其他分区上执行等效磨损(例如双启动)。
这完全是错误的。不可能磨损分区,因为您只读取/写入该分区。这与 SSD 的工作原理完全不同。
SSD 的工作访问级别比文件系统的低得多;SSD 使用块和页面进行工作。
在这种情况下,实际发生的情况是,即使您在特定分区中写入大量数据,文件系统也会受到分区的限制,但 SSD 不会。SSD 的写入次数越多,SSD 交换出的块/页面就越多,以进行磨损均衡。它根本不在乎文件系统如何看待事物!这意味着,有时数据可能驻留在 SSD 上的特定页面中,但另一次,情况可能会有所不同。SSD 将跟踪数据被转移到何处,而文件系统不知道数据实际上位于 SSD 的哪个位置。
为了使这更容易:假设您在分区 1 上写入一个文件。操作系统会告诉文件系统有关存储需求,然后文件系统会分配“扇区”,然后告诉 SSD 它需要X空间量。文件系统将文件视为逻辑块地址(LBA) 为 123(例如)。SSD 会记录 LBA 123 正在使用块/页面 #500(例如)。因此,每次操作系统需要此特定文件时,SSD 都会有一个指向其正在使用的确切页面的指针。现在,如果我们继续写入 SSD,磨损均衡就会启动,并显示块/页面 #500,我们可以在块/页面 #2300 处更好地优化您。现在,当操作系统请求同一个文件时,文件系统再次请求 LBA 123,这一次,SSD 将返回块/页面 #2300,而不是 #500。
与硬盘一样,Nand-Flash SSD 是顺序访问的,因此您从其他分区写入/读取的任何数据都将比在单个分区中写入时“可能”的位置更远,因为人们通常会在分区中留出可用空间。这将增加存储在其他分区上的数据的访问时间。
不,这又错了!罗宾汉是从文件系统的角度考虑问题,而不是像 SSD 那样思考具体是如何工作的。同样,文件系统无法知道 SSD 如何存储数据。这里没有“更远”;这只是从文件系统的角度来看,而不是 SSD 存储信息的实际方式。SSD 可以将数据分散在不同的 NAND 芯片中,而用户不会注意到访问时间有任何增加。哎呀,由于 NAND 的并行特性,它甚至可能比以前更快,但我们这里谈论的是纳秒;一眨眼你就错过了。
总空间越少,写入碎片文件的可能性就越大,虽然对性能的影响很小,但请记住,对 Nand-Flash SSD 进行碎片整理通常被认为是一个坏主意,因为它会磨损驱动器。当然,根据您使用的文件系统,有些会导致极低的碎片量,因为它们被设计为尽可能整体写入文件,而不是将其全部转储到各处以加快写入速度。
不,抱歉;这又错了。文件系统对文件的视图和 SSD 对相同文件的视图根本不相似。在最坏的情况下,文件系统可能会将文件视为碎片,但 SSD 对相同数据的视图几乎总是经过优化。
因此,碎片整理程序会查看这些 LBA 并说,这个文件肯定是碎片化的!但是,由于它对 SSD 的内部情况一无所知,所以它 100% 是错误的。这就是碎片整理程序无法在 SSD 上工作的原因,是的,正如前面提到的,碎片整理程序也会导致不必要的写入。
文章系列SSD 编码如果您想更深入地了解 SSD 的工作原理,这是一个很好的概述。
如果想了解 FTL (Flash Translation Layer) 的实际工作原理,我建议你阅读固件和闪存转换层在固态硬盘设计中的关键作用 (PDF)来自闪存峰会地点。
他们还有很多其他论文可供选择,例如:
- 建立闪存转换层模型以延长系统寿命 (PDF)
- 利用基于主机的 Flash 转换层实现应用程序加速 (PDF)
另一篇有关其工作原理的论文:闪存概述 (PDF)。请参阅“写入数据”部分(第 26-27 页)。
如果你更喜欢视频,请参阅一种高效的页面级 FTL,用于优化闪存中的地址转换及相关幻灯片。
答案2
这里的答案非常长,但答案很简单,直接来自 SSD 的常识。人们只需要阅读维基百科术语固态硬盘理解答案,即:
“不要对 SSD 进行分区”的建议是无稽之谈。
在(现在已经遥远的)过去,操作系统对 SSD 的支持并不好,尤其是在分区时没有注意根据擦除块的大小来对齐分区。
当操作系统逻辑磁盘扇区被拆分到物理 SSD 块之间时,这种缺乏对齐的情况可能会导致 SSD 刷新两个物理扇区,而操作系统仅打算更新一个扇区,从而减慢磁盘访问速度并增加磨损均衡。
目前,SSD 变得越来越大,操作系统对擦除块和对齐了如指掌,因此问题不再存在。也许这个建议曾经是为了避免分区对齐错误,但如今这些错误几乎不可能出现。
事实上,今天对 SSD 进行分区的理由与对传统磁盘进行分区的理由完全相同:
为了更好地组织和分离数据。
例如,将操作系统安装在单独的较小的分区上,在对操作系统进行大规模更新时,可以方便地备份操作系统映像作为预防措施。
答案3
对 SSD 进行分区没有任何缺点,而且你实际上可以通过留下一些未分区的空间来延长其使用寿命。
设备的所有块均采用磨损均衡技术(参考 HP 白皮书,链接如下)
在静态磨损均衡中,设备中所有可用闪存中的所有块都参与磨损均衡操作。这可确保所有块的磨损量相同。静态磨损均衡最常用于台式机和笔记本电脑 SSD。
由此,我们可以得出结论,分区对于磨损均衡并不重要。这是有道理的,因为从 HDD 和控制器的角度来看,分区实际上并不存在。只有块和数据。甚至分区表也写在相同的块上(对于 MBR 来说,是驱动器的第一个块)。然后操作系统读取表,并决定将数据写入哪些块,哪些不写入。操作系统使用 LBA 查看块,为每个块赋予一个唯一的编号。但是,控制器会将逻辑块映射到实际的物理块,同时考虑磨损均衡方案。
同样的白皮书也给出了延长设备寿命的良好建议:
接下来,对驱动器进行超额配置。您可以通过仅对设备总容量的一部分进行分区来延长使用寿命。例如,如果您有一个 256 GB 的驱动器 — 仅将其分区为 240 GB。这将大大延长驱动器的使用寿命。20% 的超额配置级别(仅分区 200 GB)将进一步延长使用寿命。一个好的经验法则是,每次您将驱动器的超额配置加倍,驱动器的耐用性就会增加 1 倍。
这也暗示即使未分区的空间也用于磨损均衡,从而进一步证明了上面的观点。
来源:技术白皮书 - SSD Endurance(http://h20195.www2.hp.com/v2/getpdf.aspx/4AA5-7601ENW.pdf)
答案4
我认为一些背景信息可能有助于澄清这个问题,但正如你所见,我有点强迫症,所以你可能想跳到最后,然后在需要的时候再回头看。虽然我确实知道一点,但我不是固态硬盘方面的专家,所以如果有人发现错误编辑它。 :)。
背景信息:
什么是SSD?:
SSD 或固态硬盘是一种没有移动部件的存储设备。术语 SSD 通常专门指基于 Nand-Flash 的固态硬盘,旨在作为硬盘的替代品,但实际上它们只是 SSD 的一种形式,甚至不是最流行的形式。最流行的 SSD 类型是基于 Nand-Flash 的可移动介质,如 USB 棒(闪存驱动器)和存储卡,尽管它们很少被称为 SSD。SSD 也可以基于 RAM,但大多数 RAM 驱动器是软件生成的,而不是物理硬件。
为什么存在旨在作为硬盘替代品的 Nand-flash SSD?:
为了运行操作系统及其软件,需要快速存储介质。这时 RAM 就派上用场了,但从历史上看,RAM 价格昂贵,而 CPU 无法处理大量数据。当您运行操作系统或编程时,当前所需的数据部分会被复制到 RAM,因为您的存储设备速度不够快。由于您必须等待数据从慢速存储设备复制到 RAM,因此会产生瓶颈。虽然并非所有 NAND 闪存 SSD 都能获得比传统硬盘更好的性能,但那些性能更好的 SSD 有助于通过提供更快的访问时间、读取速度和写入速度来减少瓶颈。
什么是Nand-flash?:
闪存是一种使用电而非磁来存储数据的存储介质。Nand-flash 是使用 NAND 网关的闪存。与随机访问的 Nor-flash 不同,Nand-flash 是顺序访问的。
Nand-flash SSD 如何存储数据?:
Nand-flash 存储由块组成,这些块被分成单元,单元包含页面。与使用磁性存储数据的硬盘不同,闪存介质使用电力,因此数据不能被覆盖;必须擦除数据才能重新使用空间。设备无法擦除单个页面;擦除必须在块级别进行。由于无法将数据写入已使用的块(即使其中并非所有页面都已使用),因此必须先擦除整个块,然后才能将数据写入现在空白的块的页面。问题是您将丢失这些页面中已有的任何数据,包括您不想丢弃的数据!为防止这种情况发生,必须在执行块擦除之前将要保留的现有数据复制到其他地方。此复制过程不是由计算机的操作系统执行的,而是由称为垃圾收集的功能在设备级别执行的。
硬盘驱动器使用磁性盘来存储数据。与黑胶唱片非常相似,磁性盘上有轨道,这些轨道被分成称为扇区的部分。一个扇区可以容纳一定量的数据(通常为 512 字节,但有些较新的扇区为 4KB)。当您应用文件系统时,扇区会分组为簇(基于您指定的大小,称为分配大小或簇大小),然后文件会跨簇写入。也可以划分扇区以使簇小于扇区大小。在将文件跨一个簇(或多个簇)写入后,簇中未使用的空间将不可用,下一个文件将从新簇开始。为了避免大量不可用空间,人们通常使用较小的簇大小,但这会降低写入大文件时的性能。Nand-flash SSD 没有磁性盘,它们使用通过内存块的电流。块由包含页面的单元组成。页面具有 X 容量(通常为 4 KB),因此页面数量将决定块的容量(通常为 512 KB)。在 SSD 上,页面相当于硬盘上的扇区,因为它们都代表存储的最小划分。
什么是磨损均衡?
Nand-flash 存储块的写入和擦除次数有限(称为其生命周期)。为了防止驱动器容量减少(死块),尽可能均匀地磨损块是有意义的。有限的生命周期也是许多人建议如果您使用基于 Nand-flash 的 SSD,则不要在操作系统中使用页面文件或交换分区的主要原因(尽管从设备到 RAM 的快速数据传输速度也是该建议的主要因素)。
什么是过度配置?
过度配置定义了实际可用空间与实际可用空间之间的差异。基于 Nand-flash 的存储设备声称比实际要小,因此可以保证有空块可供垃圾处理使用。还有第二种过度配置,称为动态过度配置,它只是指显示的可用空间内的已知可用空间。动态过度配置有两种类型:操作系统级别和驱动器控制器级别。在操作系统级别,Trim 可用于释放可以立即写入的块。在控制器级别,可以使用未分配的驱动器空间(未分区,无文件系统)。拥有更多可用块有助于使驱动器保持最佳性能,因为它可以立即写入。它还增加了块按顺序排列的可能性,从而减少了访问时间,因为 Nand-flash SSD 使用顺序访问来读取和写入数据。
什么是写入放大?
由于 Nand-flash 介质要求先擦除块,然后才能写入,因此块中未被擦除的任何数据都必须通过垃圾处理复制到新块中。这些额外的写入称为写入放大。
什么是 Trim?:
操作系统在构建时就考虑到了传统硬盘。请记住,传统硬盘可以直接覆盖数据。当您删除文件时,操作系统会将其标记为已删除(可以覆盖),但数据仍然存在,直到发生写入操作。在基于 Nand-flash 的 SSD 上,这是一个问题,因为必须先擦除数据。擦除发生在块级别,因此可能存在未删除的其他数据。垃圾处理会将任何未删除的数据复制到空块中,然后可以擦除相关块。这一切都需要时间,并会导致不必要的写入(写入放大)!为了解决这个问题,开发了一个名为 Trim 的功能。Trim 使操作系统能够告诉 SSD 在您不请求写入操作的时间段内擦除包含操作系统已标记为已删除的数据的页面的块。垃圾收集会发挥作用,从而释放出块,这样写入就有望发生在不需要先擦除的块上,从而使过程更快,并有助于将写入放大降至最低。这不是基于文件完成的;Trim 使用逻辑块寻址。LBA 指定要擦除哪些扇区(页面),擦除发生在块级别。
“对 SSD 进行分区的缺点?”这个问题的答案是:
基于 Ram 的 SSD:
绝对没有任何缺点,因为它们是随机访问的!
基于Nand-flash的SSD:
我想到的唯一缺点是:
磨损均衡不会有那么多的可用空间,因为写入操作将分散在较小的空间内,所以您“可能”但不一定会比整个驱动器是单个分区时更快地磨损驱动器的该部分,除非您将在其他分区上执行等效磨损(例如:双启动)。
与硬盘一样,Nand-Flash SSD 是顺序访问的,因此您从其他分区写入/读取的任何数据都将比在单个分区中写入时“可能”的位置更远,因为人们通常会在分区中留出可用空间。这将增加存储在其他分区上的数据的访问时间。
总空间越少,写入碎片文件的可能性就越大,虽然对性能的影响很小,但请记住,对 Nand-Flash SSD 进行碎片整理通常被认为是一个坏主意,因为它会磨损驱动器。当然,根据您使用的文件系统,有些会导致极低的碎片量,因为它们被设计为尽可能整体写入文件,而不是将其全部转储到各处以加快写入速度。
我认为拥有多个分区是可以的,但如果某些分区有大量写入活动,而其他分区写入活动很少,则磨损均衡可能是一个问题。如果您不划分不打算使用的空间,而是将其留给动态过度配置,您可能会获得性能提升,因为释放块和写入顺序数据会更容易。然而,不能保证需要过度配置空间,这让我们回到关于磨损均衡的第 1 点。
此主题中的其他一些人提出了关于分区将如何影响 Trim 对动态过度配置的贡献的讨论。据我所知,TRIM 用于指出具有标记为删除的数据的扇区(页面),因此垃圾处理可以自由擦除这些块。此可用空间仅在该分区内充当动态过度配置,因为这些扇区是该分区的文件系统正在使用的群集的一部分;其他分区有自己的文件系统。但是,我可能完全错了,因为过度配置的整个概念对我来说有点不清楚,因为数据将被写入甚至没有文件系统或出现在驱动器容量中的地方。这让我想知道在对文件系统中的块进行最终优化写入操作之前,过度配置空间是否是临时使用的?当然,Trim 对文件系统内动态过度配置的贡献不会是暂时的,因为它们可以直接写入,因为它们已经在可用空间中。至少这是我的理论。也许我对文件系统的理解是错误的?我无法找到任何详细介绍此内容的资源。