3.3.1 常见文件系统概览(ext4、xfs、btrfs、zfs)
常见 Linux 文件系统以 ext4、XFS、Btrfs、ZFS 为主,各自定位与特性不同,运维选型需结合稳定性、性能、功能与生态支持。本节给出概览、安装与创建示例、常见排错与练习。
原理草图(功能侧重对比):
关键特性与定位(简表)#
- ext4:通用性强、成熟稳定;日志、延迟分配、多块分配;系统盘/通用数据盘首选。
- XFS:大文件与高并发 I/O 强;在线扩容方便但缩容受限;日志/媒体/备份盘常用。
- Btrfs:CoW、快照、子卷、校验、内置 RAID;功能丰富但性能敏感;需要快照与数据管理场景。
- ZFS:卷管理与文件系统一体;强校验、快照、压缩、自愈;对内存/CPU要求高,适合存储服务器。
安装与创建示例(可执行流程)#
场景:新增数据盘
/dev/sdb,创建 20G 分区并格式化为不同文件系统。
1) 分区并格式化
# 1. 分区
sudo fdisk /dev/sdb <<'EOF'
n
p
1
+20G
w
EOF
# 2. ext4
sudo mkfs.ext4 -L data_ext4 /dev/sdb1
# 3. xfs
sudo mkfs.xfs -L data_xfs /dev/sdb1
# 4. btrfs
sudo mkfs.btrfs -L data_btrfs /dev/sdb1
2) 挂载与持久化
sudo mkdir -p /data/{ext4,xfs,btrfs}
sudo mount /dev/sdb1 /data/ext4
# 查看 UUID 并写入 /etc/fstab
sudo blkid /dev/sdb1
# 示例(替换为实际UUID)
echo 'UUID=xxxx-xxxx /data/ext4 ext4 defaults 0 2' | sudo tee -a /etc/fstab
# 验证
sudo mount -a
df -hT | grep /data
3) ZFS(安装与创建池)
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y zfsutils-linux
# 创建 zpool 与 zfs
sudo zpool create tank /dev/sdb1
sudo zfs create tank/data
sudo zfs set compression=lz4 tank/data
# 挂载点
zfs list
核心命令与说明#
# ext4: 查看特性
sudo tune2fs -l /dev/sdb1 | head -n 20
# 说明:列出ext4特性与日志、UUID等信息
# xfs: 查看元数据
sudo xfs_info /dev/sdb1
# 说明:查看XFS块大小、inode等参数
# btrfs: 创建子卷与快照
sudo mount /dev/sdb1 /data/btrfs
sudo btrfs subvolume create /data/btrfs/sv1
sudo btrfs subvolume snapshot /data/btrfs/sv1 /data/btrfs/sv1_snap
# zfs: 快照与回滚
sudo zfs snapshot tank/data@backup_001
sudo zfs rollback tank/data@backup_001
常见故障排查(示例)#
1) 挂载失败:wrong fs type
# 诊断:确认分区文件系统类型
lsblk -f /dev/sdb1
# 修复:使用正确的 -t 参数或重新格式化
sudo mount -t ext4 /dev/sdb1 /data/ext4
2) XFS 无法缩容
# 说明:XFS不支持在线缩容
# 解决:备份->重建更小文件系统->恢复
3) Btrfs 空间不足但 df 仍有空间
sudo btrfs filesystem usage /data/btrfs
# 解决:平衡与回收
sudo btrfs balance start -dusage=75 /data/btrfs
4) ZFS 内存占用高
# 查看ARC占用(Linux)
cat /proc/spl/kstat/zfs/arcstats | head
# 建议:合理设置 zfs_arc_max
练习#
1) 用同一块磁盘分别创建 ext4 与 xfs,比较 fio 顺序写吞吐。
2) 使用 btrfs 创建子卷与快照,验证快照回滚效果。
3) 使用 zfs 创建压缩数据集,比较写入前后占用变化。
4) 故障演练:模拟误删文件,尝试从 btrfs/zfs 快照恢复。