跳转到内容

文件系统 (XFS/EXT4)

XFS 和 EXT4 是企业 Linux 中最常用的两种文件系统。RHEL/CentOS 系列默认使用 XFS,而 EXT4 在 Debian/Ubuntu 系列中更为常见。了解它们的差异以及各自的管理工具,对于系统管理员至关重要。

特性XFSEXT4
默认使用RHEL 7+ / CentOS 7+Debian / Ubuntu
最大文件系统容量8 EB1 EB
最大单文件大小8 EB16 TB
在线扩展支持(仅增大)支持(仅增大)
在线缩小不支持不支持在线缩小,但支持离线缩小
日志类型元数据日志元数据+数据日志
碎片整理xfs_fsre4defrag
修复工具xfs_repaire2fsck
适用场景大文件、高并发 I/O通用场景、小文件较多
删除文件性能极佳良好

基本创建:

Terminal window
sudo mkfs.xfs /dev/sdb1

指定标签和块大小:

Terminal window
sudo mkfs.xfs -L appdata -b size=4096 /dev/sdb1

强制重新格式化(覆盖已有文件系统):

Terminal window
sudo mkfs.xfs -f /dev/sdb1

常用 mkfs.xfs 参数:

参数说明
-f强制格式化
-L label设置文件系统标签
-b size=N设置块大小(默认 4096)
-i size=N设置 inode 大小
-d agcount=N设置分配组数量

基本创建:

Terminal window
sudo mkfs.ext4 /dev/sdb1

指定标签、块大小和 inode 比例:

Terminal window
sudo mkfs.ext4 -L appdata -b 4096 -i 8192 /dev/sdb1

常用 mkfs.ext4 参数:

参数说明
-L label设置文件系统标签
-b blocksize设置块大小
-i bytes-per-inode每多少字节分配一个 inode
-N number指定 inode 总数
-m percentage预留给 root 的空间百分比(默认 5%)
-O feature启用指定特性
Terminal window
sudo xfs_info /dev/sdb1

或通过挂载点查看:

Terminal window
sudo xfs_info /app

输出示例:

meta-data=/dev/sdb1 isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

关键字段说明:

  • bsize:块大小
  • blocks:总块数
  • agcount:分配组数量
  • isize:inode 大小

基本修复流程:

  1. 卸载文件系统:

    Terminal window
    sudo umount /app
  2. 先检查日志是否可以回放:

    Terminal window
    sudo xfs_repair -n /dev/sdb1

    -n 参数为只检查不修复模式。

  3. 执行修复:

    Terminal window
    sudo xfs_repair /dev/sdb1
  4. 如果日志损坏导致无法修复,清除日志后重试:

    Terminal window
    sudo xfs_repair -L /dev/sdb1

    -L 会丢弃日志中未提交的事务,可能导致少量数据丢失,仅在必要时使用。

  5. 重新挂载:

    Terminal window
    sudo mount /dev/sdb1 /app

当逻辑卷或分区扩大后,需要扩展 XFS 文件系统以利用新空间:

Terminal window
# 扩展到挂载点所在设备的全部可用空间
sudo xfs_growfs /app

也可以指定新的块数量:

Terminal window
sudo xfs_growfs -D 26214400 /app
Terminal window
# 碎片整理
sudo xfs_fsr /app
# 备份 XFS 文件系统
sudo xfsdump -l 0 -f /backup/app.dump /app
# 恢复 XFS 文件系统
sudo xfsrestore -f /backup/app.dump /app
# 冻结文件系统(用于一致性快照)
sudo xfs_freeze -f /app
# 解冻
sudo xfs_freeze -u /app

查看文件系统详细信息:

Terminal window
sudo tune2fs -l /dev/sdb1

常用调整操作:

Terminal window
# 修改文件系统标签
sudo tune2fs -L newlabel /dev/sdb1
# 调整预留空间百分比(从默认 5% 改为 1%)
sudo tune2fs -m 1 /dev/sdb1
# 设置最大挂载次数后强制检查(0 表示禁用)
sudo tune2fs -c 0 /dev/sdb1
# 设置检查间隔时间(0 表示禁用时间检查)
sudo tune2fs -i 0 /dev/sdb1
# 启用文件系统特性
sudo tune2fs -O has_journal /dev/sdb1
# 查看 UUID
sudo tune2fs -l /dev/sdb1 | grep UUID
  1. 卸载文件系统:

    Terminal window
    sudo umount /data
  2. 检查文件系统(不修复):

    Terminal window
    sudo e2fsck -n /dev/sdb1
  3. 自动修复所有问题:

    Terminal window
    sudo e2fsck -y /dev/sdb1
  4. 强制检查(即使文件系统标记为干净):

    Terminal window
    sudo e2fsck -f /dev/sdb1
  5. 重新挂载:

    Terminal window
    sudo mount /dev/sdb1 /data

常用 e2fsck 参数:

参数说明
-n只检查,不修复
-y对所有问题自动回答 yes
-f强制检查
-p自动修复安全的问题
-v详细输出

resize2fs - 调整 EXT4 文件系统大小

Section titled “resize2fs - 调整 EXT4 文件系统大小”

在线扩展(文件系统已挂载时):

Terminal window
# 先扩展逻辑卷或分区
sudo lvextend -L +20G /dev/vg_data/lv_data
# 再扩展文件系统到设备的全部大小
sudo resize2fs /dev/vg_data/lv_data

扩展到指定大小:

Terminal window
sudo resize2fs /dev/vg_data/lv_data 80G
  1. 卸载文件系统:

    Terminal window
    sudo umount /data
  2. 强制检查文件系统:

    Terminal window
    sudo e2fsck -f /dev/vg_data/lv_data
  3. 缩小文件系统:

    Terminal window
    sudo resize2fs /dev/vg_data/lv_data 30G
  4. 缩小逻辑卷(必须与文件系统大小匹配或略大):

    Terminal window
    sudo lvreduce -L 30G /dev/vg_data/lv_data
  5. 重新挂载并验证:

    Terminal window
    sudo mount /dev/vg_data/lv_data /data
    df -hT /data
Terminal window
# 方法一:lsblk
lsblk -f
# 方法二:blkid
sudo blkid /dev/sdb1
# 方法三:df(已挂载的文件系统)
df -T /app
# 方法四:file 命令
sudo file -sL /dev/sdb1
Terminal window
# 查看所有挂载点的使用情况
df -hT
# 查看 inode 使用情况
df -i
# 查看指定目录的磁盘占用
du -sh /app/*
Terminal window
# XFS
sudo xfs_admin -L newlabel /dev/sdb1
# EXT4
sudo tune2fs -L newlabel /dev/sdb1
Terminal window
# XFS(需卸载)
sudo xfs_admin -U generate /dev/sdb1
# EXT4
sudo tune2fs -U random /dev/sdb1

完整实战:创建并管理双文件系统

Section titled “完整实战:创建并管理双文件系统”

以下示例在两个分区上分别创建 XFS 和 EXT4 文件系统,并进行基本的管理操作。

  1. 创建两个分区(假设 /dev/sdb 已分好区):

    Terminal window
    lsblk /dev/sdb
    # sdb1 - 50G(用于 XFS)
    # sdb2 - 50G(用于 EXT4)
  2. 创建文件系统:

    Terminal window
    sudo mkfs.xfs -L xfs_data /dev/sdb1
    sudo mkfs.ext4 -L ext4_data -m 1 /dev/sdb2
  3. 挂载并验证:

    Terminal window
    sudo mkdir -p /data/xfs /data/ext4
    sudo mount /dev/sdb1 /data/xfs
    sudo mount /dev/sdb2 /data/ext4
    df -hT /data/xfs /data/ext4
  4. 查看文件系统信息:

    Terminal window
    # XFS 信息
    sudo xfs_info /data/xfs
    # EXT4 信息
    sudo tune2fs -l /dev/sdb2 | head -30
  5. 配置自动挂载:

    Terminal window
    sudo cp /etc/fstab /etc/fstab.bak
    cat <<EOF | sudo tee -a /etc/fstab
    LABEL=xfs_data /data/xfs xfs defaults,noatime 0 0
    LABEL=ext4_data /data/ext4 ext4 defaults,noatime 0 0
    EOF
    sudo mount -a

掌握 XFS 和 EXT4 的管理工具是企业 Linux 运维的基本功。根据实际业务需求选择合适的文件系统,合理使用检查和修复工具,能有效保障数据安全。