文件系统 (XFS/EXT4)
XFS 和 EXT4 是企业 Linux 中最常用的两种文件系统。RHEL/CentOS 系列默认使用 XFS,而 EXT4 在 Debian/Ubuntu 系列中更为常见。了解它们的差异以及各自的管理工具,对于系统管理员至关重要。
XFS 与 EXT4 对比
Section titled “XFS 与 EXT4 对比”| 特性 | XFS | EXT4 |
|---|---|---|
| 默认使用 | RHEL 7+ / CentOS 7+ | Debian / Ubuntu |
| 最大文件系统容量 | 8 EB | 1 EB |
| 最大单文件大小 | 8 EB | 16 TB |
| 在线扩展 | 支持(仅增大) | 支持(仅增大) |
| 在线缩小 | 不支持 | 不支持在线缩小,但支持离线缩小 |
| 日志类型 | 元数据日志 | 元数据+数据日志 |
| 碎片整理 | xfs_fsr | e4defrag |
| 修复工具 | xfs_repair | e2fsck |
| 适用场景 | 大文件、高并发 I/O | 通用场景、小文件较多 |
| 删除文件性能 | 极佳 | 良好 |
创建文件系统
Section titled “创建文件系统”创建 XFS 文件系统
Section titled “创建 XFS 文件系统”基本创建:
sudo mkfs.xfs /dev/sdb1指定标签和块大小:
sudo mkfs.xfs -L appdata -b size=4096 /dev/sdb1强制重新格式化(覆盖已有文件系统):
sudo mkfs.xfs -f /dev/sdb1常用 mkfs.xfs 参数:
| 参数 | 说明 |
|---|---|
-f | 强制格式化 |
-L label | 设置文件系统标签 |
-b size=N | 设置块大小(默认 4096) |
-i size=N | 设置 inode 大小 |
-d agcount=N | 设置分配组数量 |
创建 EXT4 文件系统
Section titled “创建 EXT4 文件系统”基本创建:
sudo mkfs.ext4 /dev/sdb1指定标签、块大小和 inode 比例:
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 | 启用指定特性 |
XFS 管理工具
Section titled “XFS 管理工具”xfs_info - 查看 XFS 文件系统信息
Section titled “xfs_info - 查看 XFS 文件系统信息”sudo xfs_info /dev/sdb1或通过挂载点查看:
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=1data = bsize=4096 blocks=13107200, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0, ftype=1log =internal log bsize=4096 blocks=6400, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0关键字段说明:
bsize:块大小blocks:总块数agcount:分配组数量isize:inode 大小
xfs_repair - 修复 XFS 文件系统
Section titled “xfs_repair - 修复 XFS 文件系统”基本修复流程:
-
卸载文件系统:
Terminal window sudo umount /app -
先检查日志是否可以回放:
Terminal window sudo xfs_repair -n /dev/sdb1-n参数为只检查不修复模式。 -
执行修复:
Terminal window sudo xfs_repair /dev/sdb1 -
如果日志损坏导致无法修复,清除日志后重试:
Terminal window sudo xfs_repair -L /dev/sdb1-L会丢弃日志中未提交的事务,可能导致少量数据丢失,仅在必要时使用。 -
重新挂载:
Terminal window sudo mount /dev/sdb1 /app
xfs_growfs - 在线扩展 XFS
Section titled “xfs_growfs - 在线扩展 XFS”当逻辑卷或分区扩大后,需要扩展 XFS 文件系统以利用新空间:
# 扩展到挂载点所在设备的全部可用空间sudo xfs_growfs /app也可以指定新的块数量:
sudo xfs_growfs -D 26214400 /app其他 XFS 工具
Section titled “其他 XFS 工具”# 碎片整理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 /appEXT4 管理工具
Section titled “EXT4 管理工具”tune2fs - 查看和调整 EXT4 参数
Section titled “tune2fs - 查看和调整 EXT4 参数”查看文件系统详细信息:
sudo tune2fs -l /dev/sdb1常用调整操作:
# 修改文件系统标签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
# 查看 UUIDsudo tune2fs -l /dev/sdb1 | grep UUIDe2fsck - 检查和修复 EXT4
Section titled “e2fsck - 检查和修复 EXT4”-
卸载文件系统:
Terminal window sudo umount /data -
检查文件系统(不修复):
Terminal window sudo e2fsck -n /dev/sdb1 -
自动修复所有问题:
Terminal window sudo e2fsck -y /dev/sdb1 -
强制检查(即使文件系统标记为干净):
Terminal window sudo e2fsck -f /dev/sdb1 -
重新挂载:
Terminal window sudo mount /dev/sdb1 /data
常用 e2fsck 参数:
| 参数 | 说明 |
|---|---|
-n | 只检查,不修复 |
-y | 对所有问题自动回答 yes |
-f | 强制检查 |
-p | 自动修复安全的问题 |
-v | 详细输出 |
resize2fs - 调整 EXT4 文件系统大小
Section titled “resize2fs - 调整 EXT4 文件系统大小”扩展 EXT4 文件系统
Section titled “扩展 EXT4 文件系统”在线扩展(文件系统已挂载时):
# 先扩展逻辑卷或分区sudo lvextend -L +20G /dev/vg_data/lv_data
# 再扩展文件系统到设备的全部大小sudo resize2fs /dev/vg_data/lv_data扩展到指定大小:
sudo resize2fs /dev/vg_data/lv_data 80G缩小 EXT4 文件系统
Section titled “缩小 EXT4 文件系统”-
卸载文件系统:
Terminal window sudo umount /data -
强制检查文件系统:
Terminal window sudo e2fsck -f /dev/vg_data/lv_data -
缩小文件系统:
Terminal window sudo resize2fs /dev/vg_data/lv_data 30G -
缩小逻辑卷(必须与文件系统大小匹配或略大):
Terminal window sudo lvreduce -L 30G /dev/vg_data/lv_data -
重新挂载并验证:
Terminal window sudo mount /dev/vg_data/lv_data /datadf -hT /data
查看文件系统类型
Section titled “查看文件系统类型”# 方法一:lsblklsblk -f
# 方法二:blkidsudo blkid /dev/sdb1
# 方法三:df(已挂载的文件系统)df -T /app
# 方法四:file 命令sudo file -sL /dev/sdb1查看文件系统使用情况
Section titled “查看文件系统使用情况”# 查看所有挂载点的使用情况df -hT
# 查看 inode 使用情况df -i
# 查看指定目录的磁盘占用du -sh /app/*修改文件系统标签
Section titled “修改文件系统标签”# XFSsudo xfs_admin -L newlabel /dev/sdb1
# EXT4sudo tune2fs -L newlabel /dev/sdb1修改文件系统 UUID
Section titled “修改文件系统 UUID”# XFS(需卸载)sudo xfs_admin -U generate /dev/sdb1
# EXT4sudo tune2fs -U random /dev/sdb1完整实战:创建并管理双文件系统
Section titled “完整实战:创建并管理双文件系统”以下示例在两个分区上分别创建 XFS 和 EXT4 文件系统,并进行基本的管理操作。
-
创建两个分区(假设 /dev/sdb 已分好区):
Terminal window lsblk /dev/sdb# sdb1 - 50G(用于 XFS)# sdb2 - 50G(用于 EXT4) -
创建文件系统:
Terminal window sudo mkfs.xfs -L xfs_data /dev/sdb1sudo mkfs.ext4 -L ext4_data -m 1 /dev/sdb2 -
挂载并验证:
Terminal window sudo mkdir -p /data/xfs /data/ext4sudo mount /dev/sdb1 /data/xfssudo mount /dev/sdb2 /data/ext4df -hT /data/xfs /data/ext4 -
查看文件系统信息:
Terminal window # XFS 信息sudo xfs_info /data/xfs# EXT4 信息sudo tune2fs -l /dev/sdb2 | head -30 -
配置自动挂载:
Terminal window sudo cp /etc/fstab /etc/fstab.bakcat <<EOF | sudo tee -a /etc/fstabLABEL=xfs_data /data/xfs xfs defaults,noatime 0 0LABEL=ext4_data /data/ext4 ext4 defaults,noatime 0 0EOFsudo mount -a
掌握 XFS 和 EXT4 的管理工具是企业 Linux 运维的基本功。根据实际业务需求选择合适的文件系统,合理使用检查和修复工具,能有效保障数据安全。