使用SSD时,是否需要更改交换性以延长SSD寿命?


35

我遇到了这篇文章,其中包含以下建议:

交换和交换

我将交换分区保留在旧硬盘上。交换SSD会更快,但也会缩短SSD的寿命。

我的系统有足够的内存,因此我也将swappiness值减小为0,以告知Ubuntu仅在绝对必要时才进行交换。我通过将vm.swappiness = 0行添加到/etc/sysctl.conf中来完成此操作。

将swappiness设置为零是否会延长SSD的使用寿命,这是真的吗?我在其他地方找不到对此的引用。

Answers:


30

将swappiness减小为0意味着操作系统仅在没有更多可用RAM时才开始使用SSD进行交换。

从理论上讲,这可以增加SSD的寿命,因为SSD的写操作更少。这取决于它是否实际上增加了SSD的寿命:

  • Linux 即使具有更高的swappiness值,也很少使用交换 (尤其是与Windows相比),因此与RAM使用情况相比,此设置可能不会改变具有大量RAM的系统上的交换行为。如果您的RAM不足,则交换可能会非常频繁地发生,默认值为60,在这种情况下,降低交换性可能会对SSD的写周期限制产生重大影响。

  • 对于简单的消费者使用而言,至少对于基于MLC的SSD ,SSD的写耐久性仍然很高。他们说,当前基于MLC的SSD可以忍受ca。在它们用完之前,有3000-5000个写周期。以3000个限制进行计算,这意味着每天大约有10 GB写入量的128 GB SSD可以在ca中愉快地工作。38000天,这意味着 100年。如果您有更大的SSD,那当然会在更长时间之后用完。因此,由于电池耗尽,您的SSD极有可能死掉。(当然,如果您在公司/服务器环境中使用SSD,则每日写入量会更高,但是在公司环境中,通常会使用基于SLC的SSD。)

  • 这个写周期限制是如此之高,以至于SSD制造商(最初是SAMSUNG)开始为消费者生产基于TLC的SSD。1000个写周期,但更便宜。这些公司表示,即使这些SSD的写周期限制也将比预期使用该产品的时间更长。(不太可能在2024年我们仍将使用128 GB的SSD)尽管如果您有基于TLC的SSD并经常写入该驱动器(例如50GB /天),那么降低swappiness值可能会产生重大影响取决于SSD的使用寿命。
  • 这是一个巨大的话题,发烧友通过不断地写信给他们测试SSD的耐用性。尽管他们的测试方法可能并不完全正确,但是他们的结果令人印象深刻且令人安心。

综上所述:从理论上讲,降低可插拔性将导致更长的SSD使用寿命,但实际上却不会。但是,如果您有一个基于TLC的SSD,并且RAM不足,并且通常向该SSD频繁写入,那么它也可以产生实际效果。

我有一个基于MLC的128 GB固态硬盘,并且大多数情况下将我的系统用于办公/浏览,并且与我的RAM使用情况相比,我有大量的RAM,因此我的SSD不会承受较大的写负载(尽管我的计算机处于24/7的状态)。但是因为我根本不需要交换,并且降低交换率非常容易,所以我自己在安装SSD时将swappiness设置为0,因为为什么不这样做呢?(实际上,即使在只有HDD的机器上,我在所有机器上都将swappiness设置为0。)

您可以使用来检查SSD在其生命周期内遭受了多少写操作smartctl,寻找与一致的行Total_LBAs_Written,这将向您显示已向SSD写入了512b个扇区。(是的,我知道SSD在物理上具有4K块,而不是512b,但是SMART仍然会说:Sector Size: 512 bytes logical/physical使用512个块,我得到的结果与tune2fs -lLifetime写输出可比。)因此,将这个数字乘以512即可得到字节写数,或简称:

sudo smartctl -a /dev/sda | grep Total_LBAs_Written | awk '{print $10*512/1024/1024/1024 " GiB"}'

将在GiBs中打印出/ dev / sda。(只需将设备名称更改为您的SSD的名称即可。)我的128 GB SSD大约经历了一次故障。800 GB的写入在一年多一点的时间中进行,这意味着3000 GB仅使用了7个写入周期。


使用文件系统,可以进行TRIM减少写放大。SWAP分区是否等效?
布莱斯2015年

这个答案似乎假设“ swappiness”的范围是0到100,其中0表示没有交换(而100表示​​没有RAM?)。但是,另一个答案是关于该swappiness值的更详细的说明,该值表示该数字的范围是0到200,并且代表针对不同类型交换的相对权重。
palswim

7

所有关于耗尽SSD的讨论都是“拼写工作”。我有相同的感觉,但开始将其用于商业用途。我有东海岸最快的甲骨文集群之一。3年前,我们为整个存储和临时文件系统建立了SSD。每天我们对SSD进行数十亿次写入操作。3年后,我们仍然还没有达到10%的倦怠水平。如果我能以商业方式做到这一点,他们将永远不会在居住环境中磨损。所以-我在Linux工作站和BAM上实现了专门用于交换空间的SSD解决方案!

因此,您的行驶里程可能会有所不同,但SSD是各方面的方法。

戴夫


用于服务器的SSD可以比为消费者使用的(更便宜)写入更多的数据。
jarno '02

1
理解了,但是我已经在运行于全企业的24x7的工作站中安装了消费者SSD,我们每两天备份一次增量,但两年来都没有发生过一次故障。请记住,物理纺丝盘的MTBF为3年,而根据我25年以上的销售/维修系统经验,这是非常准确的。SSD优于其他所有选项,无论是商用还是家用。
TekOps

3

是的。您确实需要更改可交换性以延长SSD寿命。

Swappiness使您可以控制正在使用多少交换文件。Swappiness值可以从0更改为100。swappiness值越高,内核将尝试使用交换空间的次数越多,swappiness值越低,意味着内核将使用更少或不使用交换空间(取决于我们的设置)。

默认的swappiness值从60开始,如果您有足够的RAM,则应避免使用交换空间来写入和读取SSD,但写入HDD。对于具有4 GB或更大RAM的系统,请尝试通过将swappiness设置更改为10甚至0之间来减少交换的使用,而交换文件位于HDD上。

运行交换空间非常耗费磁盘I / O,这实际上对SSD不利。SSD只能在坏之前处理很多写入操作,因此您不得不购买另一个驱动器。因此,如果有可能,请将交换空间移至辅助旋转的驱动器上……远离SSD。

固态硬盘会因写入操作而很快磨损。特别是最老一代的SSD在这方面很脆弱,但在较小程度上,新世代仍然如此。

您可以在新磁盘上创建新分区,也可以仅创建交换文件。制作新分区几乎总是会带来更好的性能。

如果您没有备用驱动器可移动,则可以更改一个设置,该设置仅在物理RAM 100%满时才启用交换,这将减少交换文件上的负载并为SSD提供帮助。只需按键盘上的Ctrl+ Alt+ T打开终端。打开时,运行以下命令:

echo 0 > /proc/sys/vm/swappiness

SSD的磨损与写入周期有关

固态硬盘会因写入操作而很快磨损。特别是最老一代的SSD在这方面很脆弱,但在较小程度上,新世代仍然如此。

使用修剪

TRIM是与SSD一起使用的优势。它在软件中运行并与SSD控制器通信,告诉它文件系统不再需要哪些“块”,并且可以安全地清除和覆盖这些“块”。这并不会真正提高性能,反而会延长SSD的使用寿命。

资料来源:Linux SSD调整如何优化SSD的方法


我想知道哪里错了?OP询问他是否需要更改可交换性以延长SSD寿命,答案是肯定的,他确实需要更改可交换性。
米奇

我了解Ubuntu的最新版本会自动将TRIM用于SSD。
Paddy Landau 2014年

最新的Ubuntu仅对某些型号的SSD使用TRIM。@PaddyLandau
布莱斯

2

将swappiness设置为零是否会延长SSD的使用寿命,这是真的吗?

这将导致Linux不太频繁地将内存块移动到交换分区。如果交换位于SSD中,则写入交换通常会使用写入周期。请记住,仅在需要时才使用交换,并且如果您有足够的RAM,则最好不用交换(除非您要休眠,但这是另一个问题)。

此操作的效果可能会有所不同,但是这样做只是为了节省SSD中的一些写周期,这是错误的。现代SSD(大约从2012年开始)具有成千上万的写入周期,当您几乎用完所有RAM时,应用程序的性能可能会降低。在程序安装过程中,您使用的写入周期要多于到期交换。再次记住,默认情况下仅在需要时才使用交换。

如果您担心用于交换的SSD写入周期,则可以在拥有足够的RAM的情况下完全删除/停用交换,并且仅在HDD中激活一个临时交换,而不用担心交换问题。那将是最好的路线。


0

我强烈建议您将swappiness设置更改为较低的值,如果您有足够的内存/内存用于系统4 GB或更多的内存,最好将其设置为“ 0”。即使使用高内存系统在10时进行交换,但我几乎看不到ubuntu在交换分区上放置了任何内容,因为大多数内容都已经在内存上了。

我做了一点谷歌搜索,我发现此页面http://namhuy.net/1563/how-to-tweak-and-optimize-ssd-for-ubuntu-linux-mint.html

可能会帮助您调整和优化SSD,以使Ubuntu系统更有效地运行,并使ssd寿命更长


0

更改交换性可能实际上没有影响。我们在RAM不足的系统中进行了很多尝试,我们希望尽可能多地将其推入SSD,而实际上影响不大,因为这些项目仍保留在内存中(这意味着它们是必需的)。这可能是有争议的。


0

我喜欢检查smartctl输出的想法,但是我的代码更加紧凑。我从来不明白为什么人们不知道它awk具有grep内置的功能。

sudo smartctl -a /dev/sdb | awk ' ($0 ~ /Total_LBAs_Written/) {print ($10*512)/(1024^3) " GiB"}'

虽然这是我使用的代码:

sudo smartctl -a ${device} | awk ' ($0 ~ /Total_LBAs_Written/) { if (($10*512)/(1024^3) > 1000) { msg="TiB"; size=($10*512)/(1024^4); } else { msg="GiB"; size=($10*512)/(1024^3); }; printf "\nThis device has had %.2
f %s written to it.\n",size,msg; }'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.