1. 选择合适的文件系统
根据应用场景选择匹配的文件系统是基础。ext4 兼容性好,适合大多数常规场景(如桌面、小型服务器);XFS 针对大文件(如数据库、视频存储)和高并发设计,性能更优;Btrfs 提供数据去重、压缩功能,适合存储大量重复数据的备份场景,但兼容性略差。
2. 调整文件系统挂载选项
通过挂载选项减少不必要的磁盘IO:
- noatime:禁用文件访问时间更新(默认每次访问文件都会写入磁盘),显著降低元数据操作开销;
- nodiratime:进一步禁用目录访问时间更新;
- dir_index(ext4):启用目录索引(哈希树),加快目录遍历速度(尤其适用于包含大量文件的目录)。
示例(/etc/fstab配置):
/dev/sdb1 /mnt/data ext4 defaults,noatime,nodiratime,dir_index 0 0
修改后需执行 mount -o remount /mnt/data 生效。
3. 优化内核参数
内核参数直接影响文件系统性能,重点调整以下几类:
- IO调度器:根据存储设备选择。SSD推荐noop(无队列调度,减少额外开销)或deadline(保证IO响应时间);HDD推荐deadline(避免CFQ的调度延迟);
- swappiness(vm.swappiness):控制内存与交换空间的使用比例(默认60),数值越低越倾向于使用内存(如设为10,减少swap使用,提升性能);
- TCP参数(针对网络文件系统如NFS):调整
net.ipv4.tcp_tw_reuse(复用TIME_WAIT连接)、net.ipv4.tcp_fin_timeout(缩短连接关闭时间)、net.core.rmem_max/wmem_max(增大读写缓冲区),提升网络IO吞吐量。
4. 利用缓存机制
- 内核缓存:Linux会自动缓存文件数据和元数据(如inode、目录结构),增加内存可提升缓存命中率(如添加更多内存);
- 应用层缓存:使用opcache(PHP)、Redis(数据库查询)等工具缓存常用数据,减少对文件系统的直接访问;
- LVM Cache:将SSD作为缓存设备(如
lvmcache create 命令),加速HDD的读写速度(适合已有HDD且不想更换硬件的场景)。
5. 定期维护文件系统
- 碎片整理:ext4/XFS虽为日志文件系统,长期使用仍可能产生碎片(尤其是频繁删除/写入的场景),可使用
e4defrag(ext4)或 xfs_fsr(XFS)工具整理;
- 检查修复:定期用
fsck(ext4)或 xfs_repair(XFS)检查并修复文件系统错误(需卸载文件系统或从Live CD启动);
- 清理日志:删除不必要的日志文件(如
/var/log 下的旧日志),释放磁盘空间。
6. 硬件升级
- 存储设备:SSD的随机读写性能远优于HDD(尤其是4K IO),优先将系统盘、数据库盘更换为SSD(如NVMe SSD,性能提升更明显);
- 内存:增加内存可减少磁盘IO(更多数据缓存在内存中),尤其适合数据库、缓存服务器等内存密集型场景;
- RAID配置:使用RAID 0(提升读写速度,无冗余)、RAID 10(兼顾速度与冗余,适合数据库)或RAID 5(适合大容量存储)提高磁盘性能和可靠性。
7. 监控性能瓶颈
使用工具持续监控文件系统性能,及时发现问题:
- iostat:查看磁盘IO利用率(%util)、等待队列长度(await)、读写速率(tps/r/s/w/s);
- vmstat:监控系统整体IO(bi/bo,块设备读写)、内存使用(free/buff/cache);
- iotop:实时查看进程级的IO使用情况(找出高IO进程);
- fio:模拟真实IO负载(如随机读写、顺序读写),测试文件系统性能(如吞吐量、延迟)。
8. 针对性场景优化
- 数据库场景:使用XFS文件系统,调整extents大小(如
mkfs.xfs -b size=4096),启用数据库自带的缓存(如InnoDB的innodb_buffer_pool_size);
- NFS场景:调整挂载选项(如
rsize/wsize=1048576,增大读写缓冲区)、优化NFS服务器配置(如 async 异步写入,提升吞吐量);
- 高并发场景:使用XFS文件系统,增加inode数量(如
mkfs.ext4 -N 10000000,创建时指定inode数量),避免inode耗尽导致的性能下降。