myfreax

Linux 性能:如何提高SSD和SD卡的性能和寿命

SSD写入次数是有限的,为了充分利用这种存储类型,需要进行调整延长SSD和SD卡寿命

7 min read
By myfreax
Linux 性能:如何提高SSD和SD卡的性能和寿命
Linux 性能:如何提高SSD和SD卡的性能和寿命

SSD固态驱动器和SD卡的写入次数是有限的。为了充分利用这种存储类型,我们需要进行一些调整以最大限度地延长 SSD 和 SD 卡的使用寿命和性能。

iotop 命令监控读/写

iotop全称Input/Output top是一个Linux命令,用于显示和监控Linux磁盘IO的详细信息,也可以获取进程IO的使用情况。

它产生类似于top命令的输出。它通常需要root权限才能运行。系统管理员使用它来跟踪可能导致高磁盘I/O读/写的进程。

可以使用您的Linux发行版的包管理器安装iotop命令,安装完成后运行命令iotop-oPa监控磁盘的IO详细信息。

sudo apt install iotop #Denbian
sudo yum -y install iotop #CentOS Fedora
iotop -oPa

然后让iotop命令监控几分钟或几小时,具体取决于磁盘I/O使用的强度。使您可以轻松识别占用磁盘I/O的进程即可。

对于非必要的进程,可以禁止自动启动,对于必须的进程可以选择优化程序减少对磁盘IO的请求。

例如我们在文章Linux 性能:磁盘I/O是否降低应用程序性能提到的优化MySQL减少对磁盘IO的读写。

使用mount 命令的noatime挂载选项

在/etc/fstab文件中使用mount命令的noatime选项停止记录文件系统的读取访问时间。

mount命令noatime选项消除了系统对读取文件时进行时间戳写入的需要。由于写入成本非常高,这通常会带来可观的性能提升。

/etc/fstab文件是文件系统的静态挂载表,它包含挂载文件系统的描述信息。当系统启动时系统将会读取此文件挂载设备。

请使用你喜欢的文本编辑器编辑/etc/fstab。在本教程中我们使用vim编辑文件/etc/fstab,修改完成后保存文件并退出vim

sudo vim /etc/fstab
/dev/sdx / ext4 discard,noatime,errors=remount-ro 0 1
/etc/fstab

将临时目录挂载为tmpfs

tmpfs全称Temporary File System,是Unix/Linux操作系统中实现的临时文件存储规范。

它虽然是一个可挂载的文件系统,但数据存储在内存中,而不是持久性存储设备中。

tmpfs文件系统的结构类似于RAM磁盘,它显示为虚拟磁盘驱动器并托管磁盘文件系统。

如果您的系统有足够的内存,您可以将一些临时目录挂载为tmpfs。这将会减少对SSD的不必要写入。请使用你喜欢的文本编辑器,再次编辑/etc/fstab

以下/etc/fstab文件会将tmpfs设备挂载在/tmp和/var/tmp目录,最后还使用noatime挂载选项减少写入。

sudo vim /etc/fstab
tmpfs   /tmp       tmpfs   defaults,noatime,mode=1777   0 0
tmpfs   /var/tmp   tmpfs   defaults,noatime,mode=1777   0 0
/etc/fstab

避免频繁使用交换空间

这是对使用交换分区的系统,对SSD和SD卡推荐的调整。这将减少系统的swappiness值,从而减少磁盘I/O操作。

在降低系统的swappiness值之前请先阅读教程Linux性能:为什么你应该添加交换空间swap

如果您有足够的可用内存并了解风险,则可以完全避免添加交换空间或使用交换空间。

您还可以使用systemd-swap仅在必要时启用自动交换。另外阅读zram-generatorzram-swap

如果需要降低swappiness值,请在Debian/Ubuntu/Red Hat/CentOS使用vim编辑器修改/etc/sysctl.conf文件。

sudo vim /etc/sysctl.conf
vm.swappiness=10

减少日志写入

禁用Apache、Nginx、邮件服务器和其它服务的访问日志。系统稳定后,您可以将系统日志级别从info降级到warn或者error级别。

或者,如果你不在意丢失日志文件,甚至可以将tmpfs临时文件系统挂载在/var/log目录。

请再次使用你喜欢的文本编辑器,编辑/etc/fstab文件添加以下挂载tmpfs设备的描述信息。

sudo vim /etc/fstab
tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0
/etc/fstab

将更多具有大量I/O的目录挂载到tmpfs

例如,将WordPress 缓存目录从磁盘挂载到tmpfs。运行命令tmpfs /full/path/to/wp-content/cache tmpfs defaults, size=1G 0 0

tmpfs /full/path/to/wp-content/cache tmpfs defaults, size=1G 0 0

profile-sync-daemon 仅适用于桌面

如果您没有优化Web服务器并使用Firefox、Chrome等,请安装profile-sync-daemon

Profile-sync-daemon (PSD) 是一个小型伪守护程序,旨在管理您在tmpfs中的浏览器配置文件,并定期将其同步回您的物理磁盘HDD或者SSD。

I/O 输入输出调度器

考虑从CFQ切换到NOOP或Deadline,两者都在SSD和SD卡上提供更好的性能。要查看当前使用I/O调度器。

请运行命令cat /sys/block/sdX/queue/scheduler。记得将替换sdX替换为你的SSD设备的名称,X不是磁盘分区,例如是sda,sdb。

例如命令echo "deadline" | sudo tee /sys/block/sda/queue/scheduler修改I/O 输入输出调度器为deadline。

cat /sys/block/sdX/queue/scheduler

echo "deadline" | sudo tee /sys/block/sda/queue/scheduler

TRIM

TRIM允许Linux丢弃SSD不再使用的数据块。因此删除文件时,SSD可以将数据写入块,而无需执行繁琐的删除过程。

从本质上讲,TRIM可确保你的SSD的性能不会因为使用久后而导致性能降低太多。

要在Linux启用TRIM。首先请检查/etc/fstab文件确认你已为SSD设备使用挂载选项discard。运行命令cat /etc/fstab

然后检查您的SSD或SD卡是否支持TRIM,运行命令sudo hdparm -I /dev/sdx | grep "TRIM supported",Sd的X不是磁盘分区,例如是sda,sdb。

sudo hdparm -I /dev/sdx | grep "TRIM supported"
sudo systemctl status fstrim.timer
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer
● fstrim.timer - Discard unused blocks once a week
     Loaded: loaded (/lib/systemd/system/fstrim.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Sun 2023-01-01 21:43:57 HKT; 1h 16min left
    Trigger: Mon 2023-01-02 00:00:00 HKT; 3h 32min left
   Triggers: ● fstrim.service
       Docs: man:fstrim

Jan 01 21:43:57 myfreax systemd[1]: Started Discard unused blocks once a week.

进一步提高SSD和SD卡的性能/寿命

使用更大的SD卡。写入根据存储大小扩展,因此存储越大,重复写入相同区域的次数越少,意味着磨损越少。

最后一分钱一分货,便宜的SSD和SD卡通常不会使用长久,也不会有那么好的性能。

要检查SSD和SD卡的寿命,请运行命令sudo smartctl -a /dev/sdxxsdxx是你SSD/SD卡的分区在。

要关注SSD的寿命可以只看行SMART overall-health self-assessment test result: PASSED。或者运行命令sudo smartctl -H /dev/sdb4

sudo yum install smartmontools -y
sudo apt-get install smartmontools -y

sudo smartctl -a /dev/sdxx
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.15.0-56-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Samsung based SSDs
Device Model:     Samsung SSD 850 EVO 120GB
Serial Number:    S21VNSAG415755B
LU WWN Device Id: 5 002538 da024519b
Firmware Version: EMT01B6Q
User Capacity:    120,034,123,776 bytes [120 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2, ATA8-ACS T13/1699-D revision 4c
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Sun Jan  1 20:35:52 2023 HKT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED