CentOS 7 SSD 优化 减少磁盘写入

起因, 无意间查看磁盘的 SMART 信息, 发现 SSD 写入了 1.59TB, 读取才 320G. 这才仅仅使用了 68 天. 这样下去128G 的 SSD. 迟早会把写入量用完, 导致不能写入数据

首先看一下磁盘信息

smartctl -Ai /dev/nvme0n1

smartctl 6.5 2016-05-07 r4318 [x86_64-linux-4.15.4-1.el7.elrepo.x86_64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number:                       SAMSUNG MZVPW128HEGM-00000
Serial Number:                      ---
Firmware Version:                   CXZ7500Q
PCI Vendor/Subsystem ID:            ---
IEEE OUI Identifier:                ---
Total NVM Capacity:                 128,035,676,160 [128 GB]
Unallocated NVM Capacity:           0
Controller ID:                      2
Number of Namespaces:               1
Namespace 1 Size/Capacity:          128,035,676,160 [128 GB]
Namespace 1 Formatted LBA Size:     512
Local Time is:                      Fri Jun  8 21:29:48 2018 CST

=== START OF SMART DATA SECTION ===
SMART/Health Information (NVMe Log 0x02, NSID 0x1)
Critical Warning:                   0x00
Temperature:                        44 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    0%
Data Units Read:                    626,052 [320 GB]
Data Units Written:                 3,111,426 [1.59 TB]
Host Read Commands:                 12,856,998
Host Write Commands:                31,600,168
Controller Busy Time:               266
Power Cycles:                       12
Power On Hours:                     821
Unsafe Shutdowns:                   0
Media and Data Integrity Errors:    0
Error Information Log Entries:      0
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0
Temperature Sensor 1:               44 Celsius
Temperature Sensor 2:               50 Celsius

禁用文件的最后访问时间 (relatime 选项)

/etc/fstab 中为所有 xfs 分区添加 relatime 挂载参数, 减少文件系统对访问时间 (atime) 的写入操作

修改 /etc/fstab 文件

/dev/mapper/centos-root   /             xfs     defaults,relatime           0 0
UUID=xxxx-xxxx-xxxx-xxxx  /boot         xfs     defaults                    0 0
UUID=xxxx-xxxx-xxxx-xxxx  /boot/efi     vfat    umask=0077,shortname=winnt  0 0
/dev/mapper/centos-home   /home         xfs     defaults,relatime           0 0
/dev/mapper/centos-swap   swap          swap    defaults                    0 0

启用 TRIM 操作

开启 fstrim 服务

systemctl enable --now fstrim.timer

或者定期手动执行 TRIM

fstrim /
fstrim /home
fstrim /boot

限制交换分区的使用 (SWAP 分区)

设置 vm.swappiness 为 1 会极大地减少系统对 SWAP 的使用, 除非内存非常紧张时才会使用 SWAP, 从而减少磁盘写入

编辑 /etc/sysctl.conf 文件, 减少系统对交换分区的依赖

vm.swappiness=1
# vm.vfs_cache_pressure=50 (可选, 我没用)

运行命令使更改生效

sysctl vm.swappiness=1
sysctl -p

# 快速导入
echo "vm.swappiness=1" >> /etc/sysctl.conf

使用 tmpfs 保存临时文件

使用 tmpfs 可以将 /tmp 的所有写操作都存储在内存中, 避免将临时文件写入磁盘, 从而减少对 SSD 的写入

启用 tmp.mount 服务

systemctl enable tmp.mount

其他优化建议

/home/var/log 等经常写入数据的路径映射到 HDD 上。如果系统中有机械硬盘 (HDD), 可以将经常写入的目录如 /home/var/log 挂载到 HDD 上, 减少 SSD 的写入量。


原文

Linux: IO Performance Tuning with noatime, nodiratime, relatime
优化 CentOS 7,延长 SSD 使用寿命

最后更新于 2018-06-08
使用 Hugo 构建
主题 StackJimmy 设计