如何优化SSD的操作系统?


Answers:


108

我已经成功地使用了几种不同的技术来改善Ubuntu使用存储设备的方式,无论是固态驱动器还是传统驱动器。

对于SSD,您还希望将驱动器的写入次数也减至最少,因为读取操作不应增加驱动器的磨损。

1)管理交换文件

如果您不休眠计算机,并且有足够的RAM内存来运行所有应用程序,那么从理论上讲,您不需要交换分区。

如果混合使用SSD和硬盘驱动器,请仅将交换分区放在硬盘驱动器上。

2)不写入读取时间戳(适用于SSD和硬盘驱动器)

使用选项noatimenodiratime挂载分区将在您读取文件和文件夹时停止时间戳记写入。除非您使用本地邮件服务器客户端(例如mutt),否则通常不需要这些时间戳记写入。这通常是个坏主意,原因是每次更新时间戳时每次读取都会产生一次写入。这会减少SSD的寿命。

编辑您的/ etc / fstab配置文件(请小心-进行备份以确保破坏fstab配置会阻止您的系统正常工作):

cp /etc/fstab ~/fstab-backup
gksudo gedit /etc/fstab

通过将文本noatime和nodiratime添加到定义根(/)和其他分区(如果有)的行中来编辑分区的安装选项(/ home)- 注意:如果您有/ home分区,则只需更改即可该分区,如果您担心破坏某些东西

# / was on /dev/sda2 during installation
UUID=587e0dc5-2db1-4cd9-9792-a5459a7bcfd2 /               ext4    noatime,nodiratime,errors=remount-ro 0       1

# /home was on /dev/sda3 during installation
UUID=2c919dc4-24de-474f-8da0-14c7e1240ab8 /home           ext4    noatime,nodiratime,defaults        0       2

这些更改生效之前,您将需要重新启动计算机。

3)最小化来自OS和应用程序的写入

假设您没有在运行关键任务产品服务器,那么大多数人都不会在出现问题的情况下查看日志(尤其是对于大多数Ubuntu用户来说,严重的错误很少见)。因此,您可以配置Ubuntu,以便将所有日志写入RAM内存而不是SSD。

注意:仅在安装了要使用的所有软件(尤其是Apache Web服务器之类的东西)后,才进行以下更改,否则可能会遇到/ var / log中缺少目录的某些问题

有关此方法的背景信息,请在ubuntu-eee.com上查看延长闪存驱动器的寿命。

使用编辑器打开/ etc / fstab(假设您已经备份了/ etc / fstab文件)

gksudo gedit /etc/fstab

在fstab文件末尾添加以下行并保存:

# Uncomment these after all server based applications installed - eg. apache
#tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
#tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
#tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0 
#tmpfs /var/log/apt tmpfs defaults,noatime 0 0
# none /var/cache unionfs dirs=/tmp:/var/cache=ro 0 0

这些更改生效之前,您将需要重新启动计算机。

也可以看看:


7
关于日志和内容的最后一部分,对tmpfs行进行了注释,那么为什么添加这些行会有所不同呢?我们是否需要添加未注释的内容?
Oxwivi 2011年

8
我可以理解这是否旨在提高速度,但是您撰写的大部分内容似乎都旨在提高SSD的使用寿命。难道现代SSD的这些改进没有意义吗?并以更多的RAM使用为代价!(例如,请参阅此其他答案中给出的链接)
Chan-Ho Suh 2012年

7
不需要2)。relatime很好地防止了写操作,并且从内核2.6.30开始默认情况下处于活动状态。
MihaiCapotă2012年

3
只是在@MihaiCapotă的评论中添加一个服务器故障答案,其中包含有关为何不需要noatime的更多详细信息。
Cas

1
他们说noatime 在这里意味着nodiratime ,因此添加前一个选项就足够了。
jarno '16

92

SSD寿命

通常,我不会打扰-有关SSD寿命的担忧被夸大了。您可以阅读这篇详细的文章,了解您为什么不真正担心。简而言之,现代SSD内的电路可以为您管理损耗均衡,而且他们知道如何做比您更好。

本文是对以80M / s连续速率接收写入数据的SSD寿命的计算。寿命是51年。这是基于2007年的技术-SSD的寿命现在将更长。而且,您几乎可以肯定不会每天24小时以80M / s的速度写入SSD。

SSD性能

但是随着时间的推移性能可能会出现问题,而TRIM是解决方案。有两种选择

  • 自动/在线TRIM,又名丢弃
  • 手动TRIM

您必须自己启用自动TRIM。(discard如果您正在使用ext4,则基本上是将选项添加到安装选项中。)我发现一篇博客文章报告说,在删除文件时,丢弃选项会降低系统的速度

您有时可以使用fstrim手动执行此操作(或在cron作业中)。如果只有一个分区,那么您要做的就是:

sudo fstrim /

请注意,fstrim仅在11.10及更高版本中可用。对于较旧的系统,您将需要wiper.sh脚本。我在/usr/share/doc/hdparm/contrib/wiper.sh.gz系统上找到该脚本。

如果您想知道,如Wikipedia所述,TRIM解决的问题是:

SSD将数据存储在分组为页面的闪存单元中,这些页面(每个页面通常为4 kB)一起被分组为块(每个块通常128页,总计512 kB)。NAND闪存单元只能在空时直接写入。如果认为它们包含数据,则首先需要擦除内容,然后才能可靠地执行写操作。在SSD中,可以在页面级别上执行写操作,但是由于硬件限制,擦除命令始终会影响整个块。结果,只要可以使用空页面,就可以将数据写入SSD介质的速度非常快,但是一旦以前写入的页面需要被覆盖,速度就会大大降低。。由于需要先擦除页面中的单元格才能再次写入,但只能擦除整个块,因此覆盖将启动读取-擦除-修改-写入周期:必须存储整个块的内容在高速缓存中将其有效擦除之前,先在高速缓存中将其覆盖,然后在高速缓存中修改覆盖的页面,以使高速缓存的块保持最新状态,然后才将整个块(带有更新的页面)写入闪存介质。这种现象称为写放大。


8
我希望我可以多次投票。这将是答案之一。该链接解决了我很长一段时间以来的担心。非常感谢Hamish。
Luis Alvarado

来自storagesearch.com的有趣文章。我希望它能给个约会!那么,以上答案是否意味着除TRIM以外,SSD所有者无需理会第一个答案中的建议?我不需要太多文件访问时间,但是具有2G的内存,在运行一些照片编辑软件以及其他一些内存密集型程序(例如Chrome)时,具有交换分区可能仍然有用。
Lawrence I. Siden

@lsiden:文章确实提到了“稍后:-2008年5月”。而且您是正确的,您不必担心第一篇文章中的所有其他内容。只需启用TRIM并享受速度即可:)
Hamish Downer

2
本文指的是企业级SSD:他使用了2百万个写耐久性周期。消费类SSD大约有3000-5000个周期。具有3000个周期的128 GB SSD可提供57天的连续80MB / s写入速度。
LeartS 2014年

1
从Ubuntu 14.10起,TRIMming每周自动在fstrim支持的所有SSD上进行。参考
KrisWebDev

20

有几点:

对准:

经常指出的是分区的正确对齐。这应该等于SSD的块大小。安全播放,并使分区与MiB边界对齐。请注意,您无法使用Ubuntu安装程序的分区工具(使用MB而不使用MiB)来执行此操作,但是可以引导实时CD,使用Gparted(使用MiB),然后单击“安装”以使用您设置的分区。

正确的调度程序:

重要的一点是调度程序应该是noop。您可以通过kernelparameter elevator=noopecho noop > /sys/block/sda/queue/schedulerrc.local中的条目设置此调度程序。

Mountflags:

我会建议noatimediscard

Tmpfs

将tmp放在ramdisk上会增加ssd的寿命。要使用此功能,请将以下行放在fstab中:none /tmp tmpfs defaults 0 0

通常,如果您想更深入地研究这个主题,我会推荐这个出色的Wiki文章。


16

在Ubuntu上快速调整SSD的过程:

文件系统

Arch Wiki 提到了一些用于SSD文件系统的首选选项-其中一个是不稳定的,其他是ext *。我认为ext4是最好的选择之一。
注意:对于ext4,您可能需要使用discardmount选项。

fstab

# <file system> <mount point> <type> <options>                                  <dump>  <pass>
proc            /proc         proc   nodev,noexec,nosuid                        0       0
tmpfs           /tmp          tmpfs  nodev,nosuid,noatime,mode=1777             0       0
/dev/sda1       /             ext4   defaults,noatime,discard,errors=remount-ro 0       1
/dev/sda2       /home         ext4   defaults,noatime,discard,user_xattr        0       2
/dev/sda3       /windows      ntfs   defaults,noatime,discard,umask=007,gid=46  0       0

这里没有几件重要的事情:

  • 对于具有> = 2 gigs内存的系统,在RAM中定位/ tmp是可取的。
  • 没有swap分区。如今,仅休眠状态就需要它,因为现代计算机具有大量的RAM。
  • noatimediscard选项。信息在这里

调度器

考虑从默认调度程序(在大多数Linux发行版中为cfq(完全公平的排队))切换到SSD的noop或截止时间调度程序。例如,使用noop调度程序,可以简单地按接收请求的顺序处理请求,而无需考虑数据在磁盘上的物理位置。人们认为此选项对SSD有利,因为搜索时间对于SSD上的所有扇区都相同。

将以下内容添加到/etc/rc.local

# SSD performance tuning
echo noop > /sys/block/sda/queue/scheduler

信息

一个 2


2
如果没有swap且具有/tmpRAM,则很容易出现内存不足的情况,因为许多程序都/tmp用作存储空间(例如,用于存储DVD映像的Brasero)。
安排

5
并不是的。tmpfs默认情况下为RAM的10%。大小可以使用size选项进行调整。
Andrejs Cainikovs 2011年

1
Brasero是一个不好的例子,正如Lennart Poettering在他的博客0pointer.de/blog/projects/tmp.html
LiveWireBT

8

4)启用自动TRIM

如果您的SSD支持的话,你也应该启用自动TRIM(如描述这里


3

我不会将此行添加到您的fstab中,var / tmp文件夹旨在避免重新启动,并且可能对您造成问题。

tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0

当我配置新系统时,如果发生任何事情,我将所有tmp文件夹都注释掉,这样我可以检查日志和内容。然后,一旦有了主系统设置程序,我将取消注释它们,但是我从不添加以上行,这是我使用的方法:

tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0 
tmpfs /var/log/apt tmpfs defaults,noatime 0 0

如果我的系统有任何问题,我将其注释掉,以便即使在重新启动或锁定后强制重新启动后也可以检查所有内容。

另外,您不需要nodiratime,noatime选项本身会同时照顾两者。

至于TRIM,如果您的硬件/软件支持,那是必须的,我不要在fstab中使用discard。通过执行以下操作,我创建了一个日常cron,因为我的PC始终处于打开状态:

gksu gedit /etc/cron.daily/trim

然后将其添加到文件并保存(如果您在ssd上没有单独的/ home分区,或者在ssd上没有其他部分,则应该了解如何修改此方法:

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
fstrim -v / >> $LOG
fstrim -v /home >> $LOG

然后通过以下方式使文件可执行:

sudo chmod +x /etc/cron.daily/trim

我也像这样编辑rc.local:

gksu gedit /etc/rc.local

将其添加到“出口0”上方和最后一个#号下方:

# Modification for SSD
# you may want to add more folders to be checked/created to this list
for dir in apparmor apt ConsoleKit cups dist-upgrade fsck gdm installer news ntpstats samba speech-dispatcher unattended-upgrades; do
  if [ ! -e /var/log/$dir ] ; then
    mkdir /var/log/$dir
  fi
done

您可以从此处复制和粘贴,这样就不会出现错误,而不会出现在外行看来是错误的。

我还读到,让您的ssd驱动器的10%保持未格式化状态可以帮助延长使用寿命,这还有待观察。我对此没有读太多,所以我不能保证这样做。

这是最好的全方位指南,他没有浏览Google一天,然后提出了指南,您应该在此处查看


是否打算将常规/ var / log下的所有目录添加到/etc/rc.local?如果不添加目录怎么办?我想如果您安装一些新软件包,可能需要添加更多目录。可以在关机期间更新/etc/rc.local以便在下次启动时创建所有目录吗?
jarno 2015年

在ubuntu 14.04和更高版本中,默认情况下设置了cron作业/etc/cron.weekly/fstrim来每周修剪文件系统。至于14.04,请参阅此处。Ubuntu 15.10 /sbin/fstrim --all || true在fstrim脚本中使用。
jarno 2015年

至少目录/ var / log / installer在Xubuntu 15.10中有一个名为ubiquity-apt-clone的子目录。您是否应该递归创建子目录?
jarno,2015年

3

TRIM允许操作系统通知SSD哪些数据块不再使用,可以在内部擦除。整理使SSD可以处理垃圾回收开销,否则将大大减慢将来对相关块的写入操作的速度。1个

在Ubuntu 14.04中,已在util-linux软件包中添加了一项新功能,该功能会定期自动修剪SSD,但是默认情况下,只有Intel和Samsung SSD启用了TRIM,因为某些便宜的SSD甚至在运行TRIM时也会变砖。2/etc/cron.weekly/fstrim Ubuntu 14.04中的内容:

#!/bin/sh
# call fstrim-all to trim all mounted file systems which support it
set -e

# This only runs on Intel and Samsung SSDs by default, as some SSDs with faulty
# firmware may encounter data loss problems when running fstrim under high I/O
# load (e. g.  https://launchpad.net/bugs/1259829). You can append the
# --no-model-check option here to disable the vendor check and run fstrim on
# all SSD drives.
exec fstrim-all

1 https://en.wikipedia.org/wiki/Trim_%28computing%29
2 如何启用修剪?



2

好的“长话短说”:

  1. 是。就像普通的硬盘一样。是一个很好的概述。
  2. 我将介绍一些特殊的附加功能。
  3. 很好。我在服务器上使用它。

ext4在安装过程中格式化为格式,并创建一个约1 GB的小型交换。安装后,请编辑fstab sudo gedit /etc/fstab并添加以下行

tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0

这将为您的临时文件创建一个ramdrive,这将降低老化程度。还可以noatime,nodiratime,discard在默认设置后添加到ext4行。这还将降低磨损并启用TRIM功能。保存并重新启动。


非常感谢。我很困惑,因为我一直使用双引导Linux,这是我第一次将Linux安装在新的SSD上,因此过程和存储对我来说都是新的。但是好像和在HDD上安装Ubuntu一样,对吗?
Varun 2012年

这是相同的。在安装时,可能会要求您创建分区表,但这是一键式操作。
gajdipajti 2012年

另一个问题,我是否需要对Dell笔记本电脑的BIOS进行任何更改。我今天要安装SSD和Ubuntu?
Varun 2012年

不,现代的BIOS自动检测类型的硬盘。
gajdipajti 2012年

非常感谢,非常有帮助,会让您知道明天会发生什么:)
Varun 2012年


2

需要UPS。在/etc/sysctl.conf文件中

vm.dirty_writeback_centisecs = 15000
vm.swappiness = 10

找到配置文件守护程序(通常为/etc/syslog.confили),/etc/rsyslog.d//var/log/通过在前面的方式中书写减号(“-”)来更改表单的所有路径。在mail.err之前

/var/log/mail.err


mail.err -/var/log/mail.err

使用FS btrfs并使用-o ssd选项

更多http://vasilisc.com/speedup_ubuntu_eng#speedup_fs


1

如何为Ubuntu,Linux Mint调整和优化SSD

启用TRIM

TRIM(Trim命令让操作系统知道哪些SSD块未被使用并且可以清除)

如果发生错误,请先备份fstab。

# cp /etc/fstab ~/fstab.bk

编辑fstab文件

# nano /etc/fstab

在ext4之后将丢弃添加到您的ssd驱动器或分区

UUID=bef10b86-494d-41c6-aa46-af72cfba90fd / ext4 discard,errors=remount-ro 0 1
Adding noatime and nodiratime

noatime和nodiratime是linux中linux文件系统的挂载选项。noatime禁用文件系统上的atime更新,而nodiratime将禁用目录系统上的atime更新。通过添加noatime和nodiratime将大大减少ssd负载,从而提高性能。

编辑fstab文件

# nano /etc/fstab

在ext4之后,将noatime,nodiratime添加到您的ssd驱动器或分区中

UUID=bef10b86-494d-41c6-aa46-af72cfba90fd / ext4 discard,noatime,nodiratime,errors=remount-ro 0 1

0

我建议仅将引导时读取的那些东西放在可能需要大量时间加载的应用程序中,例如数据和日志以及其他非关键性的东西(我会在普通的HDD上找到它们),也可以将ubuntu设置为仅加载引导时从SSD获得一个大的initramfs并且不将更改写回ssd,这有一个好处,即对该分区的更改不是持久性的,就像对引导系统的保护一样,因此您当然需要更多的RAM。

我会例如将分区/,/ etc,/ usr,/ boot,/ lib 32/64放在SSD上,

/ opt,/ bin,/ sbin,/ root,/ home甚至交换(增加RAM !!!)

维基百科说:

Linux内核从版本2.6.33开始支持TRIM功能。使用“ discard”参数挂载时,将支持ext4文件系统。最新的磁盘实用程序(以及因此使用它们的安装软件)也将应用正确的分区对齐。

对于备份,有很多方法,最简单的方法是(r)sync plus cron job。


您知道每个地点的用途吗?除了提及的所有位置/root/home以及swap都应放在SSD上以提高速度,因为它大多是只读的。为了提高速度,也请装/var上SSD。
Lekensteyn 2011年

取决于您打算加快的速度以及SSD的大小。120 GB应该足够,可以,但是使用较小的SSD可以轻松达到目标。
Michael K

/Kubuntu Oneiric 的分区在我的SSD上占用4.5GB。/减去20GB就足够了/home。调整文件系统布局,将其分布在几个分区上的努力是不值得的。
Lekensteyn 2011年
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.