Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Linux 磁盘挂载与性能优化

原文:Linux挂载磁盘mount参数优化

一、Linux 文件属性时间戳理解

Linux 文件有三种重要时间戳:

时间类型 描述 修改条件
Access Time (atime) 文件最后访问时间 读取文件时改变
Modify Time (mtime) 文件内容最后修改时间 修改文件内容时改变
Change Time (ctime) 文件属性最后修改时间 修改文件权限或内容时改变

示例操作

  1. 创建文件并查看时间戳:

    echo "Hello" > hello.txt
    stat hello.txt
    ls -l --time=atime   # 查看访问时间
    ls -l --time=ctime   # 查看改变时间
    
  2. 修改权限:

    chmod 600 hello.txt
    stat hello.txt
    
    • 结果:Change Time 改变,Access/Modify Time 不变
  3. 修改文件内容:

    echo "World" >> hello.txt
    stat hello.txt
    
    • 结果:ModifyChange 改变,Access 不一定改变(取决于是否读取文件)
  4. 读取文件内容:

    cat hello.txt
    stat hello.txt
    
    • 结果:Access 改变

结论

  • 读取文件 -> 改变 Access
  • 修改权限 -> 改变 Change
  • 修改内容 -> 改变 ModifyChangeAccess 视操作方式而定

二、文件系统与挂载参数优化

1. 文件系统选择

  • 常用日志文件系统:Ext2/Ext3/Ext4/XFS
  • XFS:性能好、稳定,CentOS 7 默认使用 XFS
  • 日志文件系统特性:先写日志,再写主文件,保证数据一致性,但会额外记录访问时间 -> 可禁用以提升性能

2. 常用挂载参数

参数 作用 建议
noatime 禁止记录文件访问时间 高频读写场景必用,提升 I/O 20%-30%
nodiratime 禁止目录访问时间记录 配合 noatime
nobarrier 禁止写屏障,依赖存储设备自保护 数据安全有保证时可用
allocsize I/O 预分配大小(延迟分配) 256m 常用优化值
logbufs 内存日志缓冲区数量 默认 8,可调整
logbsize 内存日志缓冲区大小 默认 256k
discard 文件删除触发 TRIM/Discard SSD/Flash 推荐
attr2 XFS 扩展属性优化 默认启用

3. 挂载示例

Ext4 默认优化挂载

defaults,noatime,nodiratime,nobarrier

XFS 优化挂载

defaults,noatime,nodiratime,nobarrier,discard,allocsize=256m,logbufs=8,attr2,logbsize=256k
  • 挂载生效无需重启:
mount -o remount /
  • 可使用 fio 测试性能:
# 顺序读
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=read -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting

# 随机写
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randwrite -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting

三、XFS 文件系统参数说明(常用)

参数 描述
allocsize 延迟分配大小
attr2 扩展属性优化
barrier 写屏障
inode64 支持大 inode 编号
logbufs 日志缓冲区数量
logbsize 日志缓冲区大小
discard 自动触发 TRIM/Discard
noatime/nodiratime 不更新访问时间
osyncisosync 提供真正的 O_SYNC 写

其他高级参数如 dmapi, quota, sunit/swidth 可根据实际需求配置


四、磁盘性能优化基础

1. 文件系统相关

  • 缓存:提高读性能

  • 缓冲:提高写性能

  • 顺序 I/O vs 随机 I/O:

    • 顺序 I/O:连续文件偏移,性能高
    • 随机 I/O:偏移随机,可能导致碎片化

2. 磁盘性能工具

工具 用途
iostat 汇总磁盘 I/O,tps、吞吐量、延迟
iotop 查看进程 I/O 实时占用
sar 历史性能统计
blktrace/perf 详细跟踪 I/O

iostat 参数说明

  • tps:每秒 I/O 次数
  • kB_read/s / kB_wrtn/s:每秒读/写 KB
  • await:平均 I/O 响应时间(ms)
  • svctm:磁盘平均服务时间
  • %util:设备繁忙程度

重点指标:await 越小越好,%util 100% 表示接近满负荷


五、磁盘与文件系统优化方法

1. 磁盘参数优化

  • Cache
sdparm -s WCE=1,RCD=0 -S /dev/sdb
  • I/O 调度器
echo deadline > /sys/block/sdb/queue/scheduler
echo 500 > /sys/block/sdb/queue/iosched/read_expire
echo 1000 > /sys/block/sdb/queue/iosched/write_expire
  • 预读扇区数
blockdev --setra 256 /dev/sdb

2. 文件系统参数

  • EXT3
mkfs.ext3 -b 4096 -i 16384 -m 2 /dev/sdb1
tune2fs -O^has_journal /dev/sdb1  # 无日志
  • XFS
mkfs.xfs -d agcount=256 -l size=128m,lazy-count=1,version=2 /dev/sdb1

3. 挂载参数优化

  • EXT3 示例
mount /dev/sdb1 /cache1 -o defaults,noatime,nodiratime,async,data=writeback,barrier=0
  • XFS 示例
mount /dev/sdb1 /cache1 -o defaults,noatime,nodiratime,nobarrier,discard,allocsize=256m,logbufs=8,attr2,logbsize=256k

六、进阶 I/O 调度与进程控制

ionice

  • 设置进程 I/O 优先级:
ionice -c 3 -p <PID>   # 空闲 I/O
ionice -c 2 -n 0 -p <PID>  # 尽力而为,优先级最高

cgroup

  • 对进程组限制 I/O 带宽,可用于高负载场景

I/O 调度器选择建议

磁盘类型 推荐调度器
HDD deadline
SSD noop
桌面 cfq
大文件顺序读写 as

总结

  1. 理解文件时间戳,有助于选择挂载参数(如 noatime
  2. 文件系统优化重点:选择 XFS / EXT4,调整 blocksize、日志、扩展属性
  3. 磁盘优化重点:cache、I/O 调度器、readahead、ionice
  4. 挂载参数优化重点:noatime,nodiratime,nobarrier,allocsize,logbufs,logbsize,discard
  5. 测试工具:fioiostatiotopblktrace 等,分析性能变化