起因, 无意间查看磁盘的 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 使用寿命