内容大纲
内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
1. 磁盘I/O性能调优概述
磁盘I/O性能调优是通过调整I/O调度器、磁盘参数、文件系统等,提高磁盘I/O性能的过程。
学习交流加群风哥QQ113257174
# I/O调度器调优:选择合适的I/O调度器
# 磁盘参数调优:调整磁盘参数
# 文件系统调优:优化文件系统参数
# RAID配置:配置RAID提高性能
# SSD优化:优化SSD性能
# 缓存优化:优化缓存策略
2. I/O调度器调优
调整I/O调度器提高磁盘性能。
更多视频教程www.fgedu.net.cn
# 1. 查看当前I/O调度器
[root@localhost ~]# cat /sys/block/sda/queue/scheduler
mq-deadline kyber [bfq] none
# 2. 查看所有磁盘的I/O调度器
[root@localhost ~]# for i in /sys/block/*/queue/scheduler; do echo “$i: $(cat $i)”; done
/sys/block/sda/queue/scheduler: mq-deadline kyber [bfq] none
/sys/block/sdb/queue/scheduler: mq-deadline kyber [bfq] none
/sys/block/sdc/queue/scheduler: mq-deadline kyber [bfq] none
# 3. 设置I/O调度器为deadline
[root@localhost ~]# echo deadline > /sys/block/sda/queue/scheduler
# 4. 设置I/O调度器为bfq
[root@localhost ~]# echo bfq > /sys/block/sda/queue/scheduler
# 5. 永久设置I/O调度器
[root@localhost ~]# cat > /etc/udev/rules.d/60-io-scheduler.rules << 'EOF'
# 设置I/O调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="bfq"
EOF
# 6. 重载udev规则
[root@localhost ~]# udevadm control --reload-rules
[root@localhost ~]# udevadm trigger
# 7. 验证I/O调度器
[root@localhost ~]# cat /sys/block/sda/queue/scheduler
mq-deadline kyber [bfq] none
3. 磁盘参数调优
调整磁盘参数提高性能。
# 1. 查看磁盘参数
[root@localhost ~]# hdparm -I /dev/sda | grep -E “Model|Serial|Configuration”
Model Number: ST1000DM003-1CH162
Serial Number: Z4Z12345
Configuration:
CHS=121601/255/63, sectors=1953525168, start=0
# 2. 查看磁盘缓存设置
[root@localhost ~]# hdparm -W /dev/sda
/dev/sda:
write-caching = 1 (on)
# 3. 启用磁盘写缓存
[root@localhost ~]# hdparm -W1 /dev/sda
/dev/sda:
setting drive write-caching to 1 (on)
write-caching = 1 (on)
# 4. 禁用磁盘写缓存
[root@localhost ~]# hdparm -W0 /dev/sda
/dev/sda:
setting drive write-caching to 0 (off)
write-caching = 1 (on)
# 5. 查看磁盘预读设置
[root@localhost ~]# blockdev –getra /dev/sda
256
# 6. 设置磁盘预读
[root@localhost ~]# blockdev –setra 1024 /dev/sda
# 7. 永久设置磁盘参数
[root@localhost ~]# cat > /etc/rc.d/rc.local << 'EOF'
#!/bin/bash
# 设置磁盘参数
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
blockdev --setra 1024 /dev/sda
blockdev --setra 1024 /dev/sdb
blockdev --setra 1024 /dev/sdc
EOF
# 8. 设置脚本执行权限
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
# 9. 启用rc.local服务
[root@localhost ~]# systemctl enable --now rc-local
风哥提示:
4. 文件系统调优
优化文件系统参数提高性能。
# 1. 查看文件系统挂载选项
[root@localhost ~]# mount | grep /dev/sda
/dev/sda1 on / type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
# 2. 查看文件系统参数
[root@localhost ~]# xfs_info /
meta-data=/dev/sda1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1, parent=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 3. 重新挂载文件系统
[root@localhost ~]# mount -o remount,noatime /
# 4. 永久设置文件系统挂载选项
[root@localhost ~]# cat /etc/fstab | grep /dev/sda1
/dev/sda1 / xfs defaults,noatime 0 0
# 5. 调整ext4文件系统参数
[root@localhost ~]# tune2fs -o journal_data_writeback /dev/sdb1
tune2fs 1.46.6 (1-Feb-2023)
Setting filesystem flag ‘journal_data_writeback’ on /dev/sdb1
# 6. 调整XFS文件系统参数
[root@localhost ~]# xfs_io -c “attr -s noatime -V 1 /” /
from PG视频:www.itpux.com
5. 磁盘I/O监控
使用iostat、iotop等工具监控磁盘I/O。
# 1. 使用iostat监控磁盘I/O
[root@localhost ~]# iostat -x 1 3
Linux 5.14.0-362.el9.x86_64 (localhost.localdomain) 04/03/2026 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.50 0.00 1.00 0.50 0.00 96.00
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 0.50 0.50 5.00 2.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10.00 5.00 0.00 0.00
sdb 1.00 1.00 10.00 5.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10.00 5.00 0.00 0.00
sdc 1.50 1.50 15.00 7.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10.00 5.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
3.00 0.00 1.50 0.00 0.00 95.50
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
# 2. 使用iotop监控磁盘I/O
[root@localhost ~]# iotop -o
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1234 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd
2345 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % kworker/u4:0
3456 be/4 mysql 0.00 B/s 0.00 B/s 0.00 % 0.00 % mysqld
4567 be/4 nginx 0.00 B/s 0.00 B/s 0.00 % 0.00 % nginx
# 3. 使用dstat监控磁盘I/O
[root@localhost ~]# dstat -d
-dsk/total-
read writ
0B 0B
0B 0B
0B 0B
6. 实战案例
学习交流加群风哥微信: itpux-com
磁盘I/O性能调优实战案例。
# 1. 查看磁盘信息
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931G 0 disk
└─sda1 8:1 0 931G 0 part /
sdb 8:16 0 931G 0 disk
└─sdb1 8:17 0 931G 0 part /data
sdc 8:32 0 931G 0 disk
└─sdc1 8:33 0 931G 0 part /backup
# 2. 设置I/O调度器
[root@localhost ~]# echo bfq > /sys/block/sda/queue/scheduler
[root@localhost ~]# echo bfq > /sys/block/sdb/queue/scheduler
[root@localhost ~]# echo bfq > /sys/block/sdc/queue/scheduler
# 3. 永久设置I/O调度器
[root@localhost ~]# cat > /etc/udev/rules.d/60-io-scheduler.rules << 'EOF'
# 设置I/O调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="bfq"
EOF
# 4. 设置磁盘预读
[root@localhost ~]# blockdev --setra 1024 /dev/sda
[root@localhost ~]# blockdev --setra 1024 /dev/sdb
[root@localhost ~]# blockdev --setra 1024 /dev/sdc
# 5. 创建磁盘调优脚本
[root@localhost ~]# cat > /usr/local/bin/disk-tuning.sh << 'EOF'
#!/bin/bash
# script.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 磁盘调优脚本
LOG_FILE="/var/log/disk-tuning.log"
# 记录日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 设置I/O调度器
set_io_scheduler() {
log “Setting I/O scheduler to bfq…”
for disk in /sys/block/sd*; do
echo bfq > $disk/queue/scheduler
log “Set I/O scheduler for $disk to bfq.”
done
}
# 设置磁盘预读
set_readahead() {
log “Setting disk readahead to 1024…”
blockdev –setra 1024 /dev/sda
blockdev –setra 1024 /dev/sdb
blockdev –setra 1024 /dev/sdc
log “Disk readahead set to 1024.”
}
# 主函数
main() {
log “Starting disk tuning…”
set_io_scheduler
set_readahead
log “Disk tuning completed.”
}
# 执行主函数
main
EOF
# 6. 设置脚本执行权限
[root@localhost ~]# chmod +x /usr/local/bin/disk-tuning.sh
# 7. 配置开机自动执行
[root@localhost ~]# cat > /etc/systemd/system/disk-tuning.service << 'EOF'
[Unit]
Description=Disk Tuning
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/disk-tuning.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
# 8. 启用并启动服务
[root@localhost ~]# systemctl enable --now disk-tuning.service
Created symlink /etc/systemd/system/multi-user.target.wants/disk-tuning.service → /etc/systemd/system/disk-tuning.service.
Created symlink /etc/systemd/system/disk-tuning.service → /etc/systemd/system/disk-tuning.service.
# 9. 查看服务状态
[root@localhost ~]# systemctl status disk-tuning.service
● disk-tuning.service - Disk Tuning
Loaded: loaded (/etc/systemd/system/disk-tuning.service; enabled; preset: disabled)
Active: active (exited) since Fri 2026-04-03 10:00:00 CST; 5s ago
Process: 12345 ExecStart=/usr/local/bin/disk-tuning.sh (code=exited, status=0/SUCCESS)
Main PID: 12345 (code=exited, status=0/SUCCESS)
Apr 03 10:00:00 localhost systemd[1]: Starting Disk Tuning...
Apr 03 10:00:00 localhost disk-tuning.sh[12345]: [2026-04-03 10:00:00] Starting disk tuning...
Apr 03 10:00:00 localhost disk-tuning.sh[12345]: [2026-04-03 10:00:00] Setting I/O scheduler to bfq...
Apr 03 10:00:00 localhost disk-tuning.sh[12345]: [2026-04-03 10:00:00] Set I/O scheduler for /sys/block/sda to bfq.
Apr 03 10:00:00 localhost disk-tuning.sh[12345]: [2026-04-03 10:00:00] Set I/O scheduler for /sys/block/sdb to bfq.
Apr 03 10:00:00 localhost disk-tuning.sh[12345]: [2026-04-03 10:00:00] Set I/O scheduler for /sys/block/sdc to bfq.
Apr 03 10:00:00 localhost disk-tuning.sh[12345]: [2026-04-03 10:00:00] Setting disk readahead to 1024...
Apr 03 10:00:00 localhost disk-tuning.sh[12345]: [2026-04-03 10:00:00] Disk readahead set to 1024.
Apr 03 10:00:00 localhost disk-tuning.sh[12345]: [2026-04-03 10:00:00] Disk tuning completed.
Apr 03 10:00:00 localhost systemd[1]: Finished Disk Tuning.
# 10. 查看日志
[root@localhost ~]# tail -f /var/log/disk-tuning.log
[2026-04-03 10:00:00] Starting disk tuning...
[2026-04-03 10:00:00] Setting I/O scheduler to bfq...
[2026-04-03 10:00:00] Set I/O scheduler for /sys/block/sda to bfq.
[2026-04-03 10:00:00] Set I/O scheduler for /sys/block/sdb to bfq.
[2026-04-03 10:00:00] Set I/O scheduler for /sys/block/sdc to bfq.
[2026-04-03 10:00:00] Setting disk readahead to 1024...
[2026-04-03 10:00:00] Disk readahead set to 1024.
[2026-04-03 10:00:00] Disk tuning completed.
提示
磁盘I/O性能调优
更多学习教程公众号风哥教程itpux_com
需要根据实际应用场景进行调整。对于数据库应用,建议使用deadline或cfq调度器;对于SSD,建议使用noop或deadline调度器。定期监控磁盘I/O性能,及时调整调优策略。
