AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1400
Accepted
Lars Haugseth
Lars Haugseth
Asked: 2010-08-07 06:03:05 +0800 CST2010-08-07 06:03:05 +0800 CST 2010-08-07 06:03:05 +0800 CST

如何优化 SSD 的操作系统?

  • 772

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

performance ssd
  • 13 13 个回答
  • 138700 Views

13 个回答

  • Voted
  1. Best Answer
    practicalli-john
    2010-08-09T05:09:36+08:002010-08-09T05:09:36+08:00

    我已经成功地使用了几种不同的技术来改进 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 分区,请从更改开始如果您担心破坏某些东西,则该分区

    # / 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 中缺少目录的问题

    有关此方法的背景信息,请参阅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?
    • 113
  2. Hamish Downer
    2010-08-09T11:03:33+08:002010-08-09T11:03:33+08:00

    固态硬盘寿命

    一般来说,我不会打扰 - 对 SSD 寿命的担忧被夸大了。您可以阅读这篇详细的文章,了解为什么您真的不应该担心。简而言之,现代 SSD 内部的电路会为您管理磨损均衡,而且他们比您更清楚如何做到这一点。

    文章中计算了以 80M/s 的连续速率接收写入的 SSD 的寿命。寿命51岁。那是基于 2007 年的技术 - 现在 SSD 的寿命会更长。而且您几乎可以肯定不会一天 24 小时以 80M/s 的速度写入您的 SSD。

    固态硬盘性能

    然而,随着时间的推移性能下降可能是一个问题,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 介质就非常快,但一旦需要覆盖之前写入的页,速度就会大大降低. 由于在再次写入之前需要擦除页面中的单元格,但只能擦除整个块,因此覆盖将启动读取-擦除-修改-写入周期:必须存储整个块的内容在闪存介质上有效擦除之前在缓存中,然后在缓存中修改被覆盖的页面,以便缓存块是最新的,然后才将整个块(具有更新的页面)写入闪存介质。这种现象称为写放大。

    • 95
  3. Sebastian Rühl
    2011-02-04T13:28:06+08:002011-02-04T13:28:06+08:00

    有几点:

    结盟:

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

    正确的调度程序:

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

    挂载标志:

    我会推荐noatime和discard

    临时文件

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

    一般来说,如果你想更深入地研究这个主题,我会推荐这篇优秀的 wiki 文章。

    • 20
  4. Andrejs Cainikovs
    2011-12-10T09:24:43+08:002011-12-10T09:24:43+08:00

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

    文件系统

    Arch wiki提到SSD 文件系统的一些可取选项 - 其中一个是不稳定的,其他是ext * 的。我认为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 gigs 内存的系统,在 RAM 中定位 /tmp 是可取的。
    • 没有swap分区。现在它只需要休眠,因为现代机器有相当大的内存。
    • noatime和discard选项。信息在这里。

    调度器

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

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

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

    信息

    一二 _

    • 16
  5. Uli
    2010-12-31T15:37:50+08:002010-12-31T15:37:50+08:00

    4)启用自动TRIM

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

    • 8
  6. JohnRB
    2013-07-29T14:53:52+08:002013-07-29T14:53:52+08:00

    我不会将此行添加到您的 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
    

    在“exit 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 驱动器未格式化有助于延长使用寿命,这还有待观察。我没有对此进行过多的阅读,因此我无法保证这样做是否有意义。

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

    • 3
  7. karel
    2013-12-25T17:52:14+08:002013-12-25T17:52:14+08:00

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

    在 Ubuntu 14.04 中, util-linux包中添加了一个新功能,该功能会定期自动修剪 SSD,但只有 Intel 和三星 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如何启用修剪?

    • 3
  8. gajdipajti
    2012-04-24T14:06:31+08:002012-04-24T14:06:31+08:00

    好的“长话短说”:

    1. 是的。它就像一个普通的硬盘。这是一个很好的概述。
    2. 一些特殊的额外内容,我将介绍。
    3. 相当不错。我将它与服务器一起使用。

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

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

    这将为您的临时文件创建一个内存驱动器,从而降低老化。还要在默认值后添加noatime,nodiratime,discard到您的 ext4 行。这也将降低磨损,并启用 TRIM 功能。保存并重新启动。

    • 2
  9. Василий Алексеенко
    2012-05-13T03:08:36+08:002012-05-13T03:08:36+08:00

    UPS 是必需的。在/etc/sysctl.conf文件中

    vm.dirty_writeback_centisecs = 15000
    vm.swappiness = 10
    

    找到配置文件守护进程,通常/etc/syslog.confили/etc/rsyslog.d/和表单的所有路径/var/log/通过在ways前面写一个减号(“-”)改变。在mail.err之前

    /var/log/mail.err
    

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

    使用 FSbtrfs并使用-o ssd选项

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

    • 2
  10. user95602
    2012-10-10T08:12:24+08:002012-10-10T08:12:24+08:00

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

    • TMP 和 VarTMP 的区别
    • 2

相关问题

  • 如果有空闲 RAM,如何清空交换?

  • 为什么 Flash 应用程序如此缓慢/崩溃?

  • 上网本版电池寿命 - Ubuntu 与 Kubuntu?

  • Ubuntu 是否支持与 SSD 一起使用的 TRIM 命令?

  • 如果在服务器机器上运行 Ubuntu 桌面版,性能损失是多少?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve