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
将临时目录挂载为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
避免频繁使用交换空间
这是对使用交换分区的系统,对SSD和SD卡推荐的调整。这将减少系统的swappiness值,从而减少磁盘I/O操作。
在降低系统的swappiness值之前请先阅读教程Linux性能:为什么你应该添加交换空间swap。
如果您有足够的可用内存并了解风险,则可以完全避免添加交换空间或使用交换空间。
您还可以使用systemd-swap仅在必要时启用自动交换。另外阅读zram-generator或zram-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
将更多具有大量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/sdxx
,sdxx
是你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