磁盘实战 04|ext4、XFS、Btrfs 怎么选?格式化前值得想清楚的一次性决定

发布时间:2026/10/7 15:05:51
磁盘实战 04|ext4、XFS、Btrfs 怎么选?格式化前值得想清楚的一次性决定 同事给新数据盘跑mkfs之前问我ext4 还是 XFS我脱口而出「都行」——因为当年别人也是这么答我的。后来栽了跟头才明白这句「都行」有多敷衍。那块盘后来要缩小虚拟盘要腾给别的分区才发现XFS 压根不支持缩容扩可以缩没门只能备份出来重建。如果当初选 ext4就是一条resize2fs的事。文件系统的选择有个特点平时感觉不到它换的时候最疼。所以值得在mkfs前多花五分钟。〇、先花两分钟文件系统到底在管什么上一篇说过分区只是「圈起来的一段空地」。但空地里怎么放文件得有人立规矩——文件系统就是空地上的管理员它管三件事摆位记账文件放哪、目录结构存哪、剩余空间在哪——全记在一类叫元数据的账本里B2 里说的 inode 就是账本的一页记录文件的属主、权限、数据放哪掉电兜底突然断电时怎么让账本不至于记一半日志机制先在日志区把要做的事记一遍再做。掉电后重放日志账本不至于烂花式功能快照、压缩、校验……各家管理员会的花活不一样。主流的三家文件系统性格招牌能力短板ext4稳字辈掌门2010 年代至今 Linux 默认无数生产环境验证没花活无快照/压缩XFS大盘专家大文件高吞吐媒体、数据仓库只能扩不能缩缩容不存在元数据量略大Btrfs新功能担当快照、透明压缩、校验和、子卷写放大场景性能有争议传统数据库官方仍不推荐放它上面怎么查你机器上现在用的是什么df -T /文件系统 类型 1K-块 已用 可用 已用% 挂载点 /dev/sda2 ext4 30865080 13959872 15301484 48% /怎么读类型列就是答案我这台是 ext4。df -T不带参数能看所有挂载点的类型——tmpfs 那些是内存盘不算磁盘文件系统无视。图示三家文件系统对照与 ext4 保留块实测账目一、选型一张决策表你的场景选一句话理由系统盘 / 拿不准ext4默认即答案不会错大文件为主视频、镜像、数据仓库只扩不缩XFS高吞吐是主场RHEL 系默认就是它想要快照秒级备份回滚、透明压缩Btrfs快照是杀手锏openSUSE 默认虚拟机盘以后可能要缩小ext4三家里唯一舒服地支持缩容XFS 不支持Btrfs 缩容技术上可行但慢且险数据库数据目录ext4 / XFSMySQL/PostgreSQL 官方文档点名推荐别用 Btrfs我的口诀系统 ext4、大文件 XFS、要快照 Btrfs、数据库别 Btrfs。二、mkfs 的参数值得知道的那几个sudo mkfs.ext4 -L data01 /dev/sdb1怎么读-L data01是给文件系统起卷标label以后lsblk -f、fstab 里都能用名字认盘比记 UUID 舒服点。另外两个认知点不是必敲参数ext4 的 inode 数量格式化时就定死了mkfs.ext4按每 16K 一个 inode 估。这意味着海量小文件的场景邮件服务器、爬虫数据可能空间没满、inode 先满——B2 讲过怎么用df -i看。真到了那步只能重格式化所以小文件海量的盘建盘时可以-N调大XFS 的 inode 是动态分配的没有「先用完」一说——这是它和 ext4 的一个隐形差异海量小文件场景反而该选 XFS。sudo mkfs.xfs -L bigdata /dev/sdb1三、ext4 那 5%保留块的真实账目ext4 格式化时默认保留 5% 的空间只给 root 用。设计初衷普通用户把盘写满时root 还留有空间能登录救火日志、临时文件还能写。5% 听着不多但盘越大绝对值越吓人。拿我这台 30G 的虚拟机盘实测过一笔账sudo tune2fs -l /dev/sda2 | grep -i reserved\|block count:Block count: 7863552 Reserved block count: 393177怎么读393177 ÷ 7863552 5.0%按 4K 块算 ≈1.5 GiB被保留——df里你「看不到」这 1.5G。对系统盘/留着救火空间别动。 对纯数据盘放视频、备份的root 救火没意义可以收回sudo tune2fs -m 1 /dev/sdb1 # 保留比例降到 1%怎么读-m 1 保留 1%。4T 的数据盘这一条就「找回」约 150G 可用空间不写数据、不挪文件。B2 那篇的 ENOSPC 场景里它也算半个隐藏凶手。四、换文件系统的代价为什么说是「一次性决定」文件系统是格式化时烙进盘里的换 mkfs清空。没有「ext4 无损转 XFS」这种操作Btrfs 也没有从 ext4 的无损转换只有弃用的 ext3→btrfs 实验工具。所以正确姿势是格式化前那一分钟对着第一节决策表过一遍「这块盘未来三年主要放什么」。真要换备份数据 →mkfs新文件系统 → 数据拷回 → 更新 fstabD6。五、和前后篇的关系D3扩容那步的resize2fsvsxfs_growfs之分就是本篇选型埋下的ext4 保留块、「空间没满 inode 先满」都直接呼应B2ENOSPC 排查快照功能如果你真需要Btrfs 之外还有 LVM 快照D3的 VG 层就能做——两条路都通。速查表文末收藏版查当前文件系统 → df -T / 类型列 系统盘/拿不准 → ext4 大文件、只扩不缩 → XFS 缩容不支持 要快照/压缩 → Btrfs数据库目录别放它上面 格式化带卷标 → sudo mkfs.ext4 -L data01 /dev/sdb1 海量小文件 → ext4 注意 inode 先满df -i或直接 XFSinode 动态 看 ext4 保留块 → sudo tune2fs -l 设备 | grep -i reserved 数据盘收回保留空间 → sudo tune2fs -m 1 设备 系统盘别动 换文件系统 → 没有无损转换备份→mkfs→拷回→改fstab