xfs_growfs 是用于扩展 XFS 文件系统大小的命令行工具。XFS 是一种高性能的 64 位日志文件系统,特别适合大容量存储和并行 I/O。
xfs_growfs [选项] 挂载点|设备
| 选项 | 说明 |
|---|---|
-d |
扩展数据部分(默认行为) |
-D 大小 |
指定扩展数据部分到指定大小 |
-e |
扩展可以存储inode的区域 |
-i |
不更改inode,只打印信息 |
-L 大小 |
设置日志区域大小 |
-m |
更新挂载选项 |
-n |
不实际执行,只显示会做什么 |
-r |
扩展实时部分 |
-t |
使用备用挂载表 |
-V |
显示版本信息 |
-x |
解锁文件系统 |
# 查看挂载点信息
xfs_growfs -n /mnt/data
# 查看设备信息
xfs_growfs -n /dev/sda1
# 查看详细信息
xfs_info /mnt/data
xfs_admin -l /dev/sda1
# 使用df查看空间
df -hT /mnt/data
# 使用挂载点(无需卸载,在线扩展)
sudo xfs_growfs /mnt/data
# 使用设备文件(需要先确保分区已扩展)
sudo xfs_growfs /dev/sda1
# 显示扩展过程
sudo xfs_growfs -d /mnt/data
# 扩展到100GB
sudo xfs_growfs -D 100G /mnt/data
# 使用512字节块为单位指定大小
sudo xfs_growfs -D 209715200 /mnt/data # 100GB = 100*1024*1024*1024/512
# 扩展到分区最大(需要先扩展底层分区)
sudo xfs_growfs /mnt/data
# 扩展可以存储inode的区域
sudo xfs_growfs -e /mnt/data
# 同时扩展数据和inode区域
sudo xfs_growfs -d -e /mnt/data
# 查看inode信息
xfs_db -c "sb 0" -c "print inopblock" /dev/sda1
# 查看如果要扩展会做什么
sudo xfs_growfs -n /mnt/data
# 查看指定大小的扩展效果
sudo xfs_growfs -n -D 50G /mnt/data
# 查看所有可能的扩展选项
sudo xfs_growfs -n -d -e /mnt/data
#!/bin/bash
# 标准分区XFS扩展流程
DEVICE="/dev/sdb1"
MOUNT_POINT="/mnt/data"
echo "=== Step 1: 检查当前状态 ==="
df -h "$MOUNT_POINT"
sudo xfs_info "$MOUNT_POINT"
echo "=== Step 2: 检查设备空间 ==="
sudo parted "$DEVICE" unit GB print
echo "=== Step 3: 扩展底层分区(如果需要) ==="
# 使用 parted 扩展分区
# sudo parted "$DEVICE" resizepart 1 100%
echo "=== Step 4: 重新读取分区表 ==="
sudo partprobe "$DEVICE"
echo "=== Step 5: 扩展XFS文件系统 ==="
sudo xfs_growfs "$MOUNT_POINT"
echo "=== Step 6: 验证扩展结果 ==="
df -h "$MOUNT_POINT"
sudo xfs_info "$MOUNT_POINT"
#!/bin/bash
# LVM逻辑卷XFS扩展流程
VG="vg_data"
LV="lv_data"
LV_PATH="/dev/$VG/$LV"
MOUNT_POINT="/data"
echo "=== LVM逻辑卷XFS扩展 ==="
# 1. 检查当前状态
echo "当前空间使用:"
df -h "$MOUNT_POINT"
sudo lvs
# 2. 扩展逻辑卷(增加20GB)
echo "扩展逻辑卷20GB..."
sudo lvextend -L +20G "$LV_PATH"
# 3. 扩展XFS文件系统(在线扩展,无需卸载)
echo "扩展XFS文件系统..."
sudo xfs_growfs "$MOUNT_POINT"
# 4. 验证结果
echo "扩展完成:"
df -h "$MOUNT_POINT"
sudo xfs_info "$MOUNT_POINT"
#!/bin/bash
# RAID设备XFS扩展
RAID_DEVICE="/dev/md0"
MOUNT_POINT="/raid"
echo "=== RAID设备XFS扩展 ==="
# 1. 检查RAID状态
sudo mdadm --detail "$RAID_DEVICE"
# 2. 检查文件系统状态
df -h "$MOUNT_POINT"
sudo xfs_info "$MOUNT_POINT"
# 3. 添加新磁盘到RAID(如果需要)
# sudo mdadm --add "$RAID_DEVICE" /dev/sdd
# 4. 扩展RAID设备
# sudo mdadm --grow "$RAID_DEVICE" --raid-devices=4
# 5. 扩展XFS文件系统
sudo xfs_growfs "$MOUNT_POINT"
echo "扩展完成"
# 创建XFS文件系统
sudo mkfs.xfs /dev/sdb1
# 指定inode大小和特性
sudo mkfs.xfs -f -i size=512 /dev/sdb1
# 指定标签
sudo mkfs.xfs -L "DataVolume" /dev/sdb1
# 使用更大的日志
sudo mkfs.xfs -l size=128m /dev/sdb1
# 挂载新创建的文件系统
sudo mount /dev/sdb1 /mnt/data
# 检查XFS文件系统(需要卸载)
sudo umount /mnt/data
sudo xfs_check /dev/sdb1
# 修复XFS文件系统
sudo xfs_repair /dev/sdb1
# 检查但不修复
sudo xfs_repair -n /dev/sdb1
# 强制修复
sudo xfs_repair -f /dev/sdb1
# 重新挂载
sudo mount /dev/sdb1 /mnt/data
# 查看当前挂载选项
mount | grep xfs
# 优化挂载选项
sudo mount -o noatime,nodiratime,allocsize=1G /dev/sdb1 /mnt/data
# 或修改/etc/fstab
# /dev/sdb1 /mnt/data xfs noatime,nodiratime,allocsize=1G 0 0
# 使用大块I/O
sudo mount -o allocsize=1G,largeio,inode64,swalloc /dev/sdb1 /mnt/data
# 启用写屏障(数据安全)
sudo mount -o barrier /dev/sdb1 /mnt/data
# 禁用写屏障(性能优先)
sudo mount -o nobarrier /dev/sdb1 /mnt/data
# 检查实时设备配置
xfs_info /mnt/data | grep -i realtime
# 扩展实时设备部分
sudo xfs_growfs -r /mnt/data
# 指定实时设备大小
sudo xfs_growfs -r -D 50G /mnt/data
# 查看当前日志大小
sudo xfs_info /mnt/data | grep log
# 更新日志大小(需要卸载)
sudo umount /mnt/data
sudo xfs_growfs -L 256m /dev/sdb1
sudo mount /dev/sdb1 /mnt/data
# 或者在线更新(某些内核支持)
sudo xfs_growfs -m /mnt/data
#!/bin/bash
# 批量扩展所有XFS文件系统
for MOUNT_POINT in $(mount -t xfs | awk '{print $3}'); do
echo "检查 $MOUNT_POINT ..."
# 检查是否有可用空间
DEVICE=$(mount | grep " $MOUNT_POINT " | awk '{print $1}')
PARTITION_SIZE=$(sudo blockdev --getsize64 "$DEVICE")
FS_SIZE=$(sudo xfs_info "$MOUNT_POINT" | grep "data blocks" | awk '{print $4}')
if [ "$PARTITION_SIZE" -gt "$FS_SIZE" ]; then
echo "扩展 $MOUNT_POINT ..."
sudo xfs_growfs "$MOUNT_POINT"
else
echo "$MOUNT_POINT 已使用所有空间"
fi
done
# 原因:挂载点被其他进程占用或挂载选项问题
# 解决方法:
# 1. 检查是否有进程占用
sudo lsof /mnt/data
# 2. 检查挂载状态
mount | grep /mnt/data
cat /proc/mounts | grep /mnt/data
# 3. 尝试使用设备路径
sudo xfs_growfs /dev/sda1
# 4. 检查文件系统类型
df -T /mnt/data
# 5. 如果是只读挂载,重新挂载为读写
sudo mount -o remount,rw /mnt/data
# 原因:底层设备没有足够的空间
# 解决方法:
# 1. 检查分区大小
sudo parted /dev/sda unit GB print
# 2. 检查逻辑卷大小
sudo lvs
# 3. 扩展底层存储
# 对于分区:使用 parted 扩展分区
# sudo parted /dev/sda resizepart 1 100%
# 对于LVM:扩展逻辑卷
# sudo lvextend -L +10G /dev/vg/data
# 对于RAID:扩展RAID设备
# sudo mdadm --grow /dev/md0 --size=max
# 4. 重新读取分区表
sudo partprobe /dev/sda
# 5. 重试扩展
sudo xfs_growfs /mnt/data
# 原因:不是XFS文件系统或未挂载
# 解决方法:
# 1. 检查文件系统类型
df -T /mnt/data
# 2. 检查是否挂载
mount | grep /mnt/data
# 3. 如果是其他文件系统,使用相应工具
# ext4: sudo resize2fs /dev/sda1
# btrfs: sudo btrfs filesystem resize /mnt/data
# 4. 如果是未挂载的XFS,使用设备路径
sudo xfs_growfs /dev/sda1
# 5. 重新挂载XFS文件系统
sudo mount -t xfs /dev/sda1 /mnt/data
# 原因:指定的大小超过设备容量
# 解决方法:
# 1. 检查设备最大容量
sudo blockdev --getsize64 /dev/sda1
# 2. 计算可用空间
sudo xfs_info /mnt/data | grep "data blocks"
# 3. 使用合理的大小
# 例如,扩展到90%容量
DEVICE_SIZE=$(sudo blockdev --getsize64 /dev/sda1)
TARGET_SIZE=$((DEVICE_SIZE * 90 / 100))
sudo xfs_growfs -D "${TARGET_SIZE}b" /mnt/data
# 4. 或使用默认扩展到最大
sudo xfs_growfs /mnt/data
| 文件系统 | 扩展命令 | 缩小命令 | 在线操作 | 特点 |
|---|---|---|---|---|
| XFS | xfs_growfs |
不支持 | 支持 | 高性能,大文件优化 |
| ext4 | resize2fs |
支持 | 部分支持 | 通用性好,兼容性强 |
| Btrfs | btrfs filesystem resize |
支持 | 支持 | 支持快照,压缩,去重 |
| ZFS | zfs set quota |
限制支持 | 支持 | 企业级,数据完整性 |
显示XFS文件系统信息
xfs_info /mnt/data
修改XFS文件系统参数
xfs_admin -L label /dev/sda1
修复XFS文件系统
xfs_repair /dev/sda1
XFS文件系统调试器
xfs_db /dev/sda1
冻结XFS文件系统
xfs_freeze -f /mnt/data
XFS配额管理
xfs_quota -x -c report /mnt/data
| 场景 | 建议文件系统 | 原因 |
|---|---|---|
| 数据库服务器 | XFS 或 ext4 | XFS的高并发性能优秀,ext4稳定可靠 |
| 大文件存储(视频、备份) | XFS | XFS对超大文件支持更好 |
| 需要频繁调整大小的系统 | Btrfs 或 ext4 | 支持缩小操作,更灵活 |
| 桌面系统 | ext4 | 稳定、兼容性好 |
| 云存储/分布式存储 | XFS 或 CephFS | XFS性能好,适合高负载 |