为什么在SSD驱动器上不推荐使用交换分区,它们是否有害?

我经常看到有人说不应该在SSD驱动器上放置交换分区,因为这可能会损坏设备。这是真的吗?你能解释一下原因吗?
因为我本来以为将交换分区放在SSD上是最好的选择,因为它比HDD快得多,所以将RAM内容交换到SSD上不会像使用HDD那样慢...

为什么没有人建议在/etc/fstab选项中添加noatime以减少写入?为什么大家都关注交换空间? - mchid
7个回答

固态硬盘(SSD)中的闪存RAM单元寿命有限。每次写入(但不包括读取)循环(或更准确地说,每次擦除)都会磨损一个内存单元,到某个时候它将停止工作。

一个单元可以经受多少次擦除循环是高度可变的,现代SSD中的闪存比几年前的SSD中的闪存要耐用得多。此外,SSD智能固件将确保所有单元之间均匀分布的擦除。在大多数驱动器中,未使用的区域还可用于备份损坏的单元并延迟老化。

为了有一个可以用来比较SSD耐久性的值,我们可以使用像JEDEC发布的标准这样的寿命测量。一个广泛可用的耐久性值是TBWTeraBytes Written,或者另外称为总字节写入量),即在驱动器故障之前可写入的字节数量。现代SSD的消费级产品可以达到20 TB,而企业级SSD可以达到20,000 TB以上。

话虽如此,SSD的寿命和用于交换的使用取决于多个因素...

具有大量RAM的系统

在具有大量RAM和少量内存消耗应用程序的系统上,我们几乎不会进行交换。这只是一种安全措施,以防止应用程序耗尽所有RAM导致数据丢失。在这种情况下,由于交换而导致SSD磨损不会成为问题。然而,在传统硬盘上拥有这个几乎未使用的交换分区不会导致任何性能下降,因此我们可以将交换分区(或文件)安全地放在价格更便宜的硬盘上,并将SSD上的空间用于更有用的事情。

RAM较少的系统

在RAM稀缺且无法升级的系统上情况就不同了。在这种情况下,特别是当我们运行内存密集型应用程序时,交换可能会更频繁发生。在这些系统中,将交换分区或文件放在SSD上可能会显著提高性能,但会稍微缩短SSD的寿命。然而,这种减少的寿命可能仍然不足以引起担忧。很可能,在SSD死亡之前,由于存储容量可能以今天价格的一小部分提供多次替换。

休眠系统

从SSD中唤醒休眠确实非常快。如果我们的系统在休眠过程中没有问题,我们可以考虑使用SSD来进行休眠。这样做会比仅从SSD启动更加磨损SSD,但我们可能觉得这是值得的。
但是,从SSD启动可能不会比从SSD中唤醒休眠花费更多时间,而且对SSD的磨损要少得多。就个人而言,我根本不会让我的系统休眠 - 我会将其挂起到RAM或者快速从SSD启动。

SSD是我们唯一的驱动器

在这种情况下,我们实际上没有选择。我们不想在没有交换空间的情况下运行,所以我们必须将其放在SSD上。然而,如果我们不打算在任何时候休眠系统,我们可能希望有一个较小的交换文件或分区。

关于速度的注意事项

SSD最擅长快速访问和读取许多小文件,并且在从顺序读取的小型或中型文件传输数据方面优于传统硬盘。快速的传统硬盘在写入(以及在较小程度上读取)大型音频或视频流或其他长时间未碎片化的文件方面可能仍然比SSD表现更好。旧的SSD在时间过去或者使用相当满时,性能可能会下降。

2所以我们可以得出结论,我们应该尽量使用SSD来存储那些理想情况下只写入一次(或极少次数)并且需要频繁读取的数据。比如系统文件、程序文件或者主文件夹中的数据目录(音乐、视频等)。现代平均SSD单元应该能承受多少次写入/擦除循环?1000次?10000次?是的,我了解控制器会尝试在所有单元之间均匀分配使用,以延长寿命。 - Byte Commander
@ByteCommander 请参考编辑部分,有关您的评论还有一些要点。 - Takkat
我认为关于速度的注释是误导性的 - 固态硬盘(SSD)的性能将超过传统硬盘 - 最快的(SAS,15000转/分钟)硬盘的顺序访问速度约为250MB/秒,而SSD几乎是这个数字的两倍(而普通硬盘相比只有大约110MB/秒)- SSD在顺序读取方面将超过传统硬盘,问题在于成本。 - davidgo
@davidgo 事实上,一般来说,固态硬盘的性能要比传统硬盘好得多,尤其是如果固态硬盘是全新的。然而,有报道称不仅老化的固态硬盘会出现显著的性能下降,连续读取时间较长(如视频流媒体)也会导致性能下降。可以参考这篇SU论坛帖子西捷公司的详细解释。因此,我们不能指望初始的优秀数值永远持续下去。 - Takkat
1Seagate的帖子很有趣,不过这是大约在2010年写的 - 在那之后到2015年,SSD已经取得了长足的进步 - 特别是在背景垃圾收集和磨损均衡方面 - 这些都极大地改变了情况 - 可以参考自2013年起的http://techreport.com/review/27909/the-ssd-endurance-experiment-theyre-all-dead/3。此外,回到2010年时,SSD控制器卡的问题也更多。 - davidgo
@Takkat 智能的SSD控制器是否会负责在所有单元之间均匀分布抹除操作,即使它们属于不同的分区?例如,在使用过程中,它是否会将交换分区的单元替换为来自另一个分区的单元?LVM是否对此有影响? - humkins
@gumkins:是的,他们确实有,但如果你不经常进行交换(我在我的系统上不经常交换),我们可能更愿意使用价格更便宜的传统硬盘空间。 - Takkat
@Takkat 我的笔记本电脑只有一个固态硬盘,所以我没有这个选项。你说的“they do”是指“照顾...”还是“LVM的影响...”? - humkins
@gumkins:现在的SSD固件很智能,它会平均分配写入循环。不过,你仍然需要注意不要把驱动器填满太多。 - Takkat
我不建议使用硬盘驱动器(HHD)作为交换空间。固态硬盘(SSD)速度更快,而将交换空间放在硬盘上会破坏其性能。就个人经验而言,我的硬盘从未超过几年就出现机械故障。幸运的是,我的固态硬盘即使在每天使用了6年后也没有出现故障。 - mchid

早期的固态硬盘(SSD)因写入次数较少而容易出现故障,相比之下,传统硬盘(HDD)更耐用。如果频繁使用交换空间,固态硬盘可能会更早发生故障。这可能是你听说在固态硬盘上使用交换空间可能不好的原因。
然而,现代的固态硬盘已经解决了这个问题,它们的故障率不会比传统硬盘高。将交换空间放在固态硬盘上可以获得比放在传统硬盘上更好的性能,因为固态硬盘具有更快的速度。
此外,如果你的系统拥有足够的内存(如果系统足够高端才配备固态硬盘,很可能内存是充足的),交换空间可能很少被使用到。

4我很想相信这个,但我想要等待更多的反应,并且也会欣赏任何作为证据的参考资料。当有有效的证据或者明确的多数支持某一观点时,我会接受一个答案。 - Byte Commander
1虽然对于SSD的使用寿命而言,这并没有统计学上的有效性。2015年SSD寿命测试的最终结果显示,即使是第一个失败的SSD的寿命也很长。我曾经有硬盘在一年内发生故障,但这并不常见。我的4GB内存系统几乎从不使用交换空间。 - oldfred
1我的问题是:如果我有一个SSD和足够的内存,我应该像在旧的HDD时代那样将我的应用程序限制在内存中,还是可以让它在SSD上自由运行。似乎仍然值得,但也许不是那么必要。 - jerclarke
1现代固态硬盘“没有这个问题”绝对是不真实的说法。这是NVME技术固有的特点,即存储单元可以承受更少的写入次数(非SLC驱动器从600到2000次)。一个活跃的交换分区可以在几个小时内消耗掉这些次数。即使有写入平衡技术,固态硬盘的寿命也可能在不到一天的活跃交换中耗尽。 - Curt

即使您有足够的RAM,您可能仍然希望防止任何文件复制或搜索将应用程序从RAM中交换出去。这可能发生在文件服务器(NAS、SAMBA、FTP)上,这些服务器可能涉及大型文件操作。
为了实现这一点,最好在/etc/sysctl.conf中进行设置。
vm.swappiness=1
vm.vfs_cache_pressure=50

第一个设置防止磁盘缓存(例如执行cp)将现有应用程序从RAM中交换出去。通常的默认设置是60。请注意,使用0虽然更加激进,但有时会导致内存不足的错误。
第二个设置防止文件搜索(例如执行find)将现有应用程序从RAM中交换出去。通常的默认设置是100。
尽管作者在参考文献中没有明确提到SSD,但这种方法也减少了SSD的磨损,因为减少了交换操作,并且他还提供了如何测试的示例。
参考文献:https://rudd-o.com/linux-and-free-software/tales-from-responsivenessland-why-linux-feels-slow-and-how-to-fix-that

vm.vfs_cache_pressure=50,我的free越来越少。运行echo 3 | sudo tee /proc/sys/vm/drop_caches并没有改变太多,直到我记起我设置了这个。 - puz_zle

HDD技术使用磁性过程进行数据操作和存储。这个过程是非侵入性的,意味着你几乎可以无限地在硬盘驱动器上操作数据。直到机械部件开始出现故障为止。相比之下,SSD技术不会面临机械故障的风险。但一个问题是它如何存储数据。为了数据存储,SSD使用控制的电能突发。这种电流作用下的半导体元件会随着时间的推移而逐渐磨损。
通过软件和硬件更新,这个过程已经得到改进。早期用户发现操作系统没有正确地编程以适应SSD的数据存储方式。这对SSD造成了大量的读写循环。此外,大多数较旧的BIOS不能正确识别SSD,也会引起问题。
UEFI的引入和操作系统的更新纠正了早期SSD用户遇到的大部分问题。此外,与任何生产过程一样,SSD本身在管理和维护NAND闪存驱动器的退化方面变得更加出色。
然而,仍然有一个问题,那就是你的SSD在无法再存储数据之前有一定数量的读写循环次数限制。尽管如此,这个问题和你的HDD故障的风险一样微小。
如果你想进一步了解这个话题,这里有一个非常深入的播客链接

阅读行文之间,一个较旧的BIOS、非UEFI系统,则可能与较新的基于UEFI的系统相比,与SSD的交互效率不如理想。 - Thufir

平衡生活与性能。

你购买SSD是为了它的性能优势,而不仅仅是为了延长电池寿命,对吗?所以要充分利用你的SSD,让系统更快。

如果你有经济能力增加更多的内存来减少交换I/O,那么这显然会增加SSD的使用寿命,因为另一个性能损耗就是文件系统上交换空间的I/O周期。

再次强调,像系统配置的许多方面一样,往往没有适用于所有情况的单一规则。用户需求不同,因此系统要求和配置也必须不同,简而言之,这取决于你如何配置你的系统。

如果你有足够的空间来容纳一个SSD和一个非SSD驱动器,那么将很少更改的文件写入非SSD驱动器,并将经常访问的文件保留在SSD驱动器上。
这将确保...

[1] - *trim功能将有资源执行必要的步骤,均匀使用整个驱动器。 [好处 = 寿命]

[2] - 使用高速SSD设备访问经常访问的文件系统,可以降低I/O延迟。 [好处 = 性能]

配置临时文件系统以根据您特定的系统需求利用空间,如果您有足够的RAM,则考虑将交换空间设置得不那么激进,这将确保...
[1] - SSD I/O 减少,但系统仍然能满足用户的需求。[好处 = 寿命]
您真的需要所有这些日志吗?考虑一下系统正在记录什么以及记录在哪里。
[1] - 由于减少了日志文件访问,SSD I/O 也减少了。[好处 = 寿命和性能]
系统配置还有很多其他方面可以使非 SSD 系统运行更快,默认系统构建有一个艰巨的指标要达到,纯性能、数据安全与保护或两者兼顾的平衡。
如果您将相同的心态应用于您所写的内容和使用的设备,您可以大大提高性能,并同时延长 SSD 的寿命。
*swap - 记住,这不仅在资源不足时使用,对于许多 Linux 发行版来说,默认情况下可配置 swappiness 将低优先级的长时间运行进程放入交换空间中。
*Trim* - 值得验证您是否已启用它,这是一篇关于Trim是什么以及它如何工作的好文章:http://searchstorage.techtarget.com/definition/TRIM

一些段落开头的加粗字母有什么意义,如果有的话? - Torque

2021年1月。我使用一款小型的专用企业级SSD作为交换驱动器。这些企业级驱动器现在可以以低至80美元购买240GB,采用3D NAND技术,并具有负载平衡和其他有价值的改进功能。
通过仅将驱动器用于交换,您几乎可以确保它不会影响到昂贵的大容量数据驱动器,即使它发生故障,您仍然可以获得SSD的性能。对于非常重度使用,估计寿命约为2年半。

接受的答案解释了理论;我想我可以补充一些来自我的两个系统的真实数据。

台式机系统

  • 拥有一个400GB的Intel 750 SSD
  • 拥有32GB的RAM;不经常需要交换空间。
  • 然而,它经常休眠(比如,每天一次),需要大量的交换写入。
  • 已经使用了4年多。
  • 在ext4上运行Debian,并有一个交换分区。
  • 曾经包含Windows 10安装,但现在没有了。
  • 没有配置来节省SSD(没有swappiness调整等)。

根据SMART,它已经写入了28TiB的寿命数据(19GiB/天)。ext4文件系统已经写入了18TiB的寿命数据(12GiB/天)。其余部分归功于交换和Windows安装。

根据英特尔SSD工具箱显示,该固态硬盘的健康状况非常良好,还剩下大约95%的寿命。

Intel SSD Toolbox summary

Netbook

  • 一台使用了3年的Acer Aspire ES1-132。
  • 拥有大约60GB的MMC SSD。
  • 拥有4GiB的内存,所以可能会有更多的交换压力;尽管系统使用情况通常较轻。
  • 很少休眠。
  • 在ext4上运行Debian 10,并有一个单独的交换分区。
  • 没有配置来节省SSD(没有调整swappiness等)。

我似乎无法获得总设备写入量,但ext4文件系统已经写入了将近1TiB(每天1GiB)。根据mmc-utils

# mmc extcsd read /dev/mmcblk0 | egrep -i 'life|eol'
eMMC Life Time Estimation A [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A]: 0x01
eMMC Life Time Estimation B [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B]: 0x01
eMMC Pre EOL information [EXT_CSD_PRE_EOL_INFO]: 0x01

这意味着已使用了0-10%的SSD备用块, 并且驱动器处于“正常预期寿命前状态”。根据我的理解,该驱动器剩余寿命超过90%。
结论
两个完全不同的系统,在SSD上使用交换空间多年,两个系统都运行良好。根据诊断结果,两个SSD的剩余寿命超过90%。
公平地说,这两个系统可能对交换空间的使用较少。内存压力更大的系统会有更多的交换写入,因此也会导致SSD的磨损更多。但是对于正常桌面使用并偶尔轻度使用交换空间的情况,我认为在SSD上放置交换空间没有问题。

一样。我现在用的固态硬盘已经使用了6年,一直没有出过问题。相反地,我从来没有见过日常使用的笔记本硬盘能坚持超过几年。 - mchid