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