当前位置: 首页>>技术教程>>正文


如何优化SSD的操作系统?

, ,

问题描述

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

最佳解决方案

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

对于SSD,您希望尽量减少写入驱动器的次数,因为读取操作不会增加驱动器的磨损。

1)管理交换文件

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

如果您有SSD和硬盘的混合,请将交换分区放在硬盘驱动器上。

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

使用noatime和nodiratime选项装入分区将在您读取文件和文件夹时停止时间戳写入。除非使用本地邮件服务器客户端(如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)最小化来自操作系统和应用程序的写入

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

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

有关此方法的背景信息,请参阅prolonging the life of your flash drive on 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

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

也可以看看:

次佳解决方案

SSD生活

一般来说,我不会感到困扰 – 对SSD生活的担忧被夸大了。您可以阅读这个detailed article about why you really shouldn’t worry。简而言之,现代SSD内部的电路为您管理wear-levelling,他们知道如何做得比您更好。

在这篇文章中,我们将以80M /s的连续速率对SSD的寿命进行计算。生命是51年。这是基于2007年的技术 – 现在SSD寿命会更长。而且你几乎肯定不会每天24小时以80M /s的速度写SSD。

SSD性能

然而随着时间的推移性能下降可能会成为问题,TRIM是解决方案。有两种选择

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

  • 手动TRIM

你必须enable automatic TRIM yourself。 (基本上,如果您使用的是ext4,则将discard选项添加到您的安装选项中。)我找到了一篇博客文章,报告了the discard option slows down your system when deleting files

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

sudo fstrim /

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

如果你想知道,TRIM解决的问题,如described by Wikipedia,是:

SSDs store data in flash memory cells that are grouped into pages, with the pages (typically 4 kB each) grouped together into blocks (typically 128 pages per block, totaling 512 kB). NAND flash memory cells can only be directly written to when they are empty. If they are considered to contain data, the contents first need to be erased before a write operation can be performed reliably. In SSDs, a write operation can be done on the page-level, but due to hardware limitations, erase commands always affect entire blocks. As a result, writing data to SSD media is very fast as long as empty pages can be used, but slows down considerably once previously written pages need to be overwritten. Since an erase of the cells in the page is needed before it can be written again, but only entire blocks can be erased, an overwrite will initiate a read-erase-modify-write cycle: the contents of the entire block have to be stored in cache before it is effectively erased on the flash medium, then the overwritten page is modified in the cache so the cached block is up to date, and only then is the entire block (with updated page) written to the flash medium. This phenomenon is known as write amplification.

第三种解决方案

有几点:

对准:

经常指出的是分区的右边alignment。这应该等于SSD的块大小。安全地玩,让你的分区对齐MiB边界。请注意,您不能使用Ubuntu安装程序的分区工具(使用MB而非MiB)执行此操作,但可以启动Live CD,使用Gparted(使用MiB),然后单击安装以使用您设置的分区。

正确的调度程序:

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

Mountflags:

我会推荐noatimediscard

TMPFS

将tmp放在ramdisk上可以延长ssd的使用寿命。为了使用它,在你的fstab中放入以下行:none /tmp tmpfs defaults 0 0

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

第四种方案

在Ubuntu上为您的SSD快速调整课程:

文件系统

Arch wiki mentions SSD文件系统的几个首选选项 – 其中一个不稳定,另外一些则是分机*。我认为ext4是最好的选择之一。注意:如果是ext4,您可能需要使用discard安装选项。

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个内存的系统,在RAM中定位/tmp是可取的。

  • 没有swap分区。现在只需要休眠,因为现代机器有相当大的RAM。

  • noatimediscard选项。信息是here

调度

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

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

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

信息

one two

第五种方案

4)启用自动TRIM

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

第六种方案

我不会将此行添加到您的fstab中,var /tmp文件夹是为了在重新启动后生存下来,并且可能会给您带来问题。

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

当我配置新系统时,如果发生任何事情,我会将所有tmp文件夹注释掉,我可以检查日志和内容。然后,一旦我有主系统设置,我将un-comment他们,但我从来没有添加上面的行,这里是我使用的:

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,因为我的电脑总是开着,这样做:

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上搜索一下,然后拿出一个指南,你应该检查一下HERE

第七种方案

TRIM允许操作系统通知SSD哪些数据块不再被考虑使用,并且可以在内部擦除。修剪使SSD能够处理垃圾收集的开销,否则这会大大减慢将来对相关块的写入操作

在Ubuntu 14.04中,util-linux软件包中增加了一项新功能,可以自动定期修剪SSD,但只有英特尔和三星SSD默认启用TRIM,因为一些便宜的SSD甚至可以在运行TRIM时自行调整。2在Ubuntu中的/etc/cron.weekly/fstrim的内容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 How is Trim enabled?

第八种方案

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

第九种方案

好的“长话短说”:

  1. 是。这就像一个普通的硬盘。 Here是一个很好的概述。

  2. 我将介绍一些特别的附加内容。

  3. 很好。我用它与服务器。

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

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

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

第十种方案

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

使用预加载

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

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

关掉你的交换

要更改swappiness设置:

$ su -
# nano /etc/sysctl.conf

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

vm.swappiness = 10

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/346.html,未经允许,请勿转载。