Akemi

Linux文件系统调优

2025/05/28

rhel提供两种本地文件系统,也是现在主流的文件系统,即xfs与ext4文件系统两种

XFS文件系统介绍

是rhel7和8的默认文件系统

  • 最高支持单文件1PB和文件系统8EB大小
  • 提供多种分配方案,支持元数据日志记录,更快进行崩溃恢复
  • 引导期间不支持文件系统完整性检查
  • 可以在活动时进行随便整理和扩容,但不能缩容

EXT4文件系统介绍

ext4是ext3的可扩展系统,提供对ext2和ext3的支持

  • 最高支持单文件16TB和文件系统50TB
  • 使用区段分配
  • 在部分场景下,ext4的性能比xfs更好
  • 可以在活动时扩容,并支持缩容

SSD与TRIM丢弃

传统机械硬盘(HDD)可直接覆写数据,但 SSD 的物理特性要求文件系统通过 TRIM 主动通知存储设备哪些数据块可回收。

若未启用 TRIM,SSD 会在写入新数据时被迫执行“读取-修改-擦除-写入”操作,显著降低性能。

长期积累的无效数据会占用可用块,导致写入速度下降

类型 触发方式 性能影响 适用场景
在线丢弃 实时(文件删除时触发) 可能增加瞬时延迟 对存储空间释放即时性要求高的场景
批量丢弃 手动执行(一次性) 集中处理,延迟可控 需避免实时性能波动的关键业务系统
计划批量丢弃 定时任务(如每周一次)
fstrim.timer 均衡性能与自动化 通用服务器、桌面环境

文件系统创建选项

1
2
3
4
5
6
7
8
9
10
11
mkfs.xfs
-i size=512 调整inode索引节点大小为512k
-n size=8192 调整文件系统目录文件块大小
-d su=512k,sw=2 RAID调优选项,2块数据盘,Chunk Size(条带大小)512k

mkfs.ext4
-I 128 调整inode大小为128k,默认256k
-O ^extra_size 禁用extra_size特性,在每个inode中为扩展元数据保留空间,如果-I小于256则无效
-O large_dir 提高目录的最大大小,默认禁用
-O ^huge_file 允许文件大小大于2TB,默认启动
-E stride=128,stripe-width=256 RAID调优项,指定步幅与条带宽度

文件系统挂载参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 通用参数
atime 每次文件被访问时,系统会更新该文件的 atime 时间戳元数据
relatime (默认)定时统一修改atime时间戳,减少元数据写入
noatime 不更新atime元数据
nodiratime 不更新目录的atime元数据

# xfs参数
inode64 使indoe被放置在数据附加,最小化磁盘寻道(仅针对HDD)
logbsize 日志缓冲区大小,越大,写入日志的IO次数就越少,默认32k
norecovery 禁用日志恢复

# ext4参数
i_version 启用64位inode支持,默认禁用
journal_ioprio 控制日志IO的优先级,取值范围0~7,0最高,默认3

mount | grep rl-root
(rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)

文件系统日志

在linux中,文件系统日志可以加快文件系统的恢复:
每次修改文件,都会被记录在日志中,所以恢复时,只需要检查日志和受日志影响的部分,而不是整个文件系统

1
2
3
4
5
6
7
8
xfs中提供norecovery选项,禁用日志恢复

ext3、ext4支持多种模式下工作
参数为date=mode
可选
ordered 日志中只记录元数据,所有数据刷新到磁盘后才会提交日志条目
writeback 日志中只记录元数据但不保留顺序。恢复后,可能会出现旧数据
journal 数据在写入前存储在日志中,可靠性高但性能差

写屏障barriers

写屏障强制执行写顺序,当启用barriers时,保证数据与日志条目之间的提交顺序,确保文件系统可恢复

默认打开,xfs中无法禁用,ext4可以使用nobarrier来禁用

使用外部journal

对于大量随机写的工作负载,写操作与日志更新之间可能存在磁盘争用

所以在一些场景,比如使用HDD的存储上,会选择将日志放在低延时设备上如SSD上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
下面的创建中,我将使用/dev/sda2创建一个名为/dev/vdd1的日志分区

xfs创建
mkfs.xfs -l logdev=/dev/vdd1 /dev/sda2
/dev/vdd1是日志设备分区
/dev/sda2是主文件系统分区

xfs挂载
mount -o logdev=/dev/vdd1 /dev/sda2 /mnt
需要再次指定日志设备分区

ext4创建
1.创建日志设备(必须使用相同块大小的设备)
mkfs.ext4 -O journal_dev -b 4096 /dev/vdd1
2.创建文件系统
mkfs.ext4 -J device=/dev/vdd1 -b 4096 /dev/sda2
CATALOG
  1. 1. XFS文件系统介绍
  2. 2. EXT4文件系统介绍
  3. 3. SSD与TRIM丢弃
  4. 4. 文件系统创建选项
  5. 5. 文件系统挂载参数
  6. 6. 文件系统日志
    1. 6.1. 使用外部journal