如何优化SSD的操作系统?

在固态硬盘上安装Ubuntu之前/期间/之后应该采取哪些步骤来优化性能并确保硬盘的最大耐用性?

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

对于SSD,您希望尽可能减少驱动器写入的次数,因为读取不应该增加驱动器的磨损。

1)管理交换文件

如果您没有hibernate计算机并且有足够的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 

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

也可以看看:

  • 如何启用TRIM?

SSD生活

一般来说,我不会打扰 – 对SSD寿命的担忧被夸大了。 你可以阅读这篇详细的文章,了解为什么你真的不应该担心 。 简而言之,现代固态硬盘内部的电路可以为您管理耗损,他们知道如何做得比您好得多。

本文是计算以80M / s的连续速率接收写入的SSD的寿命。 生命是51年 。 这基于2007年的技术 – 现在SSD寿命将更长。 而你几乎肯定不会一天24小时以80M / s的速度写入SSD。

SSD性能

然而,随着时间的推移性能降低可能是一个问题, TRIM就是解决方案。 有两种选择

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

您必须自己启用自动TRIM 。 (基本上,如果你使用的是ext4,你可以在你的挂载选项中添加discard选项。)我发现有一篇博文报道说丢弃选项会在删除文件时减慢你的系统速度 。

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

 sudo fstrim / 

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

如果你想知道,正如维基百科所描述的那样,TRIM解决的问题是:

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

有几点:

对准:

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

正确的调度程序:

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

Mountflags:

我会推荐noatimediscard

TMPFS

将tmp放在ramdisk上会增加ssd的生命周期。 要使用此function,请在fstab中添加以下行: none /tmp tmpfs defaults 0 0

一般来说,如果你想深入探讨这个话题,我会推荐这篇优秀的wiki文章。

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

文件系统

Arch wiki 提到了SSD文件系统的一些优选选项 – 其中一个是不稳定的,另一个是ext *的。 我认为ext4是最好的选择之一。
注意:如果是ext4,您可能需要使用discard mount选项。

fstab文件

 #       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 gig内存的系统,需要在RAM中定位/ tmp。
  • 没有swap分区。 如今它仅用于hibernate,因为现代机器具有相当大的RAM。
  • noatimediscard选项。 信息在这里 。

调度

考虑从默认调度程序切换到SSD的noop或deadline调度程序,默认调度程序在大多数Linux发行版下是cfq(完全公平排队)。 例如,使用noop调度程序,只需按接收顺序处理请求,而不考虑数据实际驻留在磁盘上的位置。 该选项被认为对SSD有利,因为SSD的所有扇区的寻道时间相同。

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

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

信息

一 两

4)启用自动TRIM

如果您的SSD支持它,您还应该启用自动TRIM(如此处所述)

我不会将此行添加到您的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,如果你的hw / sw支持它,那是必须的,我不在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 

你可以从这里进行复制和粘贴,这样就没有错误,对外行人来说,它看起来很糟糕,事实并非如此。

我还读到,将10%的ssd驱动器保留为未格式化可以帮助延长寿命,这还有待观察。 我没有读到这么多,所以我不能保证这样做是否有意义。

这是最好的全能指南,他没有在Google上浏览一天,然后想出一个指南,你应该在这里查看

TRIM允许操作系统通知SSD哪些数据块不再被认为正在使用中并且可以在内部擦除。 修剪使SSD能够处理垃圾收集开销,否则将提前显着减慢对所涉及的块的未来写入操作。 1

在Ubuntu 14.04中, util-linux软件包中增加了一项新function,可以自动定期修剪SSD,但只有Intel和Samsung SSD默认启用TRIM,因为一些廉价的SSD甚至可以在运行TRIM时自行修复。 2 Ubuntu 14.04中/etc/cron.weekly/fstrim的内容:

 #!/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 (eg 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 如何启用Trim?

很明显, /var/tmp不应该在tmpfs中,因为根据定义,它的内容需要保留在重新启动之外:

  • TMP和VarTMP之间的差异

好吧“长话短说”:

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

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

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

这将为您的临时文件创建一个ramdrive,这将降低老化。 还可以在默认情况下为你的ext4线添加noatime,nodiratime,discard 。 这也将降低磨损,并启用TRIMfunction。 保存并重启。

有一些很好的信息如何为Ubuntu调整和优化SSD,Linux Mint来自http://namhuy.net/1563/how-to-tweak-and-optimize-ssd-for-ubuntu-linux-mint.html你可能会感兴趣的

使用预加载

在Ubuntu,Linux Mint或基于debian的发行版上安装preload

 # apt-get update && apt-get install preload 

关掉你的交换

要更改swappiness设置:

 $ su - # nano /etc/sysctl.conf 

并将此行添加到sysctl.conf文件中。

 vm.swappiness = 10 

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

 vm.dirty_writeback_centisecs = 15000 vm.swappiness = 10 

找到配置文件守护进程,通常是/etc/syslog.conf并且通过在方式前面写一个减号(“ – ”)来改变/var/log/forms的所有路径。之前mail.err

 /var/log/mail.err 


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

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

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

如何为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之后为你的ssd驱动器或分区添加noatime,nodiratime

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

我建议只将那些在启动时读取的东西放在SSD上任何可能需要很长时间才能加载的应用程序。数据和日志以及其他非常重要的东西我会在普通硬盘上找到。你也可以设置你的ubuntu只加载在启动时来自SSD的一个很大的initramfs并没有将更改写回到ssd.This有好处,对这个分区的更改不是持久性的,这对你的启动系统来说就像保护一样。当然你需要更多的RAM。

我会将分区/,/ etc,/ usr,/ boot,/ lib 32/64放在SSD上,而不是像

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

维基百科说:

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

对于备份,有很多种方法,最简单的方法是(r)同步加cron作业。