跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    文件系统 (XFS/EXT4)

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

    特性XFSEXT4
    默认使用RHEL 7+ / CentOS 7+Debian / Ubuntu
    最大文件系统容量8 EB1 EB
    最大单文件大小8 EB16 TB
    在线扩展支持(仅增大)支持(仅增大)
    在线缩小不支持不支持在线缩小,但支持离线缩小
    日志类型元数据日志元数据日志(默认 data=ordered,只记元数据;要数据日志需显式 data=journal)
    碎片整理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 运维的基本功。根据实际业务需求选择合适的文件系统,合理使用检查和修复工具,能有效保障数据安全。