linux xfs_fsr命令

简介:xfs_fsr是XFS文件系统的在线碎片整理工具,可以在文件系统挂载并正常使用时进行碎片整理,无需卸载分区,适合服务器环境。

语法格式

xfs_fsr [选项] [设备文件或挂载点]

常用选项

选项 说明
-t 秒数 运行指定的时间(秒)后停止
-p 秒数 每次整理操作后的暂停时间
-m 次数 最大移动次数限制
-f 文件 从指定文件读取要整理的文件列表
-v 详细模式,显示更多信息
-d 调试模式,显示调试信息
-g 显示进度信息
-n 只检查不进行实际整理
-V 显示版本信息
-h 显示帮助信息
XFS碎片整理特点
  • 在线整理:XFS文件系统可以在挂载状态下进行碎片整理
  • 智能整理:自动选择碎片化严重的文件进行整理
  • 低优先级:整理过程以低优先级运行,减少对系统性能的影响
  • 增量整理:每次运行只整理部分文件,适合定期运行
  • 元数据优化:不仅整理数据,还会优化元数据的布局

使用示例

示例1:基本碎片整理
# 整理整个XFS文件系统
sudo xfs_fsr /

# 整理指定的挂载点
sudo xfs_fsr /home

# 整理指定的设备
sudo xfs_fsr /dev/sdb1

说明:xfs_fsr会智能选择碎片化最严重的文件进行整理。

示例2:限制运行时间
# 运行10分钟后停止
sudo xfs_fsr -t 600 /

# 运行1小时后停止
sudo xfs_fsr -t 3600 /home

说明:-t选项适合在维护窗口有限的情况下使用。

示例3:详细模式与进度显示
# 显示详细信息和进度
sudo xfs_fsr -vg /

# 调试模式(显示更多细节)
sudo xfs_fsr -vd /home
示例4:从文件列表整理
# 创建要整理的文件列表
find /home -name "*.log" -size +100M > /tmp/frag_files.txt
find /var/lib/mysql -name "*.ibd" >> /tmp/frag_files.txt

# 根据文件列表进行整理
sudo xfs_fsr -f /tmp/frag_files.txt
示例5:输出结果详解
$ sudo xfs_fsr -g /home
xfs_fsr - file system reorganizer for XFS
Version 5.10.0
config file /etc/xfs_fsr.conf
Setting up reorganization.
Initializing /home
/home inode 655367 cnt 1 exts 11 -> 1
/home inode 131073 cnt 1 exts 7 -> 1
/home inode 196609 cnt 1 exts 9 -> 1
/home inode 262145 cnt 1 exts 15 -> 1
...
Reorganization complete.
Moved 4 extents (4 files).
Total extents moved: 42 -> 4 (90.5% reduction)
输出字段说明:
  • inode: 文件的inode编号
  • cnt: 引用计数
  • exts: 扩展块数量(整理前 -> 整理后)
  • Total extents moved: 移动的扩展块总数和减少百分比

高级配置

配置文件示例

xfs_fsr的配置文件位于 /etc/xfs_fsr.conf,可以通过配置文件控制整理行为:

# /etc/xfs_fsr.conf 示例

# 默认整理时间(秒)
default_time = 7200

# 每次整理后的暂停时间(毫秒)
pause_time = 100

# 是否检查文件系统使用情况
check_usage = true

# 忽略的文件系统使用率阈值(%)
ignore_usage_threshold = 90

# 每次运行的最大文件移动次数
max_moves = 1000

# 日志级别
log_level = 1
自动化定时任务
创建定期碎片整理脚本
#!/bin/bash
# /usr/local/bin/xfs_defrag.sh

LOG_FILE="/var/log/xfs_fsr.log"
MOUNT_POINT="/home"

echo "=== XFS碎片整理开始: $(date) ===" >> $LOG_FILE

# 运行碎片整理2小时
/usr/sbin/xfs_fsr -t 7200 -g $MOUNT_POINT >> $LOG_FILE 2>&1

echo "=== XFS碎片整理结束: $(date) ===" >> $LOG_FILE
设置cron定时任务
# 编辑cron任务
sudo crontab -e

# 添加以下行,每周日凌晨2点运行
0 2 * * 0 /usr/local/bin/xfs_defrag.sh

最佳实践

推荐做法
  • 在系统负载较低时运行(如凌晨)
  • 定期运行,而不是等到碎片严重时
  • 使用-t选项限制运行时间
  • 监控整理前后的磁盘性能变化
  • 对于关键业务系统,先在测试环境验证
  • 保持足够的空闲磁盘空间(至少10-20%)
避免做法
  • 在业务高峰期运行碎片整理
  • 连续长时间运行(超过8小时)
  • 在磁盘空间不足时运行
  • 对SSD进行频繁碎片整理
  • 在系统备份期间运行
  • 同时整理多个文件系统
重要注意事项
  • 仅适用于XFS: xfs_fsr只适用于XFS文件系统
  • 在线整理: 文件系统可以保持挂载状态
  • 性能影响: 整理过程会增加I/O负载,影响系统性能
  • SSD注意事项: 虽然XFS对SSD友好,但频繁整理SSD会减少其寿命
  • 磁盘空间: 需要足够的空闲空间来移动数据块
  • 文件锁定: 正在被进程写入的文件可能无法整理
  • 版本兼容性: 确保xfsprogs工具包版本与内核版本匹配
性能监控建议
整理前性能基准测试
# 测试磁盘读取性能
hdparm -Tt /dev/sdb1

# 测试文件系统性能
iozone -a /home

# 监控系统I/O
iostat -x 1 10
整理后性能对比
# 检查文件碎片程度
xfs_db -c frag /dev/sdb1

# 查看文件系统统计信息
xfs_estimate /home

# 监控整理效果
grep "Total extents moved" /var/log/xfs_fsr.log
常见问题解答
Q: xfs_fsr和e4defrag有什么区别?

A: 主要区别:

  • xfs_fsr用于XFS文件系统,e4defrag用于ext4文件系统
  • xfs_fsr可以在线整理,e4defrag通常需要卸载或停止文件写入
  • xfs_fsr是增量式整理,e4defrag通常是全量整理
Q: XFS文件系统需要频繁碎片整理吗?

A: XFS的设计具有良好的抗碎片能力。对于大多数应用场景,每月或每季度运行一次xfs_fsr就足够了。

Q: 如何判断XFS文件系统是否需要整理?

A: 可以使用以下命令检查:

# 检查文件碎片情况
xfs_db -c frag /dev/sdb1

# 监控磁盘性能
iostat -x 1
Q: xfs_fsr会整理所有文件吗?

A: 不会。xfs_fsr会智能选择碎片化最严重的文件进行整理。可以使用-f选项指定要整理的文件列表。