格式化前必须确认分区设备名,如/dev/sda1而非/dev/sda;需用lsblk或fdisk -l识别带数字后缀的分区;新盘须先分区再格式化;mkfs.xfs与mkfs.ext4参数不可混用;大容量nvme盘需调优参数;注意udisks2等服务干扰。

mkfs 格式化前必须确认分区设备名
直接对 /dev/sda 这类整盘设备执行 mkfs 会破坏分区表,导致所有数据丢失。正确做法是格式化具体分区,例如 /dev/sda1、/dev/nvme0n1p2。可通过 lsblk 或 fdisk -l 查看当前设备拓扑,注意识别带数字后缀的分区节点。
常见误操作:把 /dev/sdb 当成分区去格式化,结果清空了整个磁盘的 MBR/GPT 结构,连分区都找不到了。
- 运行
lsblk -f查看已挂载和未挂载的块设备及其文件系统类型 - 若看到
/dev/sdc下有sdc1、sdc2,就只对/dev/sdc1执行mkfs - 新硬盘若无分区表,需先用
fdisk或parted创建分区,再格式化
mkfs.xfs、mkfs.ext4 等命令不能混用参数
mkfs 是个前端包装器,实际调用的是对应文件系统的专用工具,比如 mkfs.ext4 调用 mke2fs,mkfs.xfs 调用 xfs_mkfs。它们支持的选项完全不同,强行套用会报错或静默忽略。
例如 -L(设置卷标)在 ext4 和 xfs 中都有效,但 -i size=(inode 大小)仅 ext4 支持,-l size=(日志大小)仅 xfs 支持。
- ext4 常用:
mkfs.ext4 -L "data" -m 0 /dev/sdb1(-m 0 表示不保留 root 预留空间) - XFS 常用:
mkfs.xfs -L "backup" -f /dev/sdb1(-f 强制覆盖已有文件系统) - 不要写
mkfs.xfs -m 0 /dev/sdb1——-m对 xfs 无效,会被忽略
格式化大容量 NVMe 盘时注意默认参数性能陷阱
对单盘超过 10TB 的 NVMe 设备(如 /dev/nvme0n1p1),用默认参数 mkfs.xfs 可能导致 inode 分配过密,后续大量小文件写入时元数据竞争严重;而 mkfs.ext4 默认的 stride 和 stripe-width 若未适配 SSD 页大小与 RAID 宽度,会影响顺序写吞吐。
这不是“能不能用”的问题,而是“用得慢不慢”“撑不撑得住”的问题。
- XFS 推荐加
-n size=64k(提升大目录性能)和-l size=128m(避免日志成瓶颈) - ext4 若用于纯 SSD 单盘,可加
-E stride=128,stripe-width=128(假设 4KB 扇区、128×4KB = 512KB 对齐) - 务必先查物理扇区大小:
cat /sys/block/nvme0n1/queue/logical_block_size
格式化后立即挂载前要检查设备是否被 udev 或 automount 干扰
某些发行版(如 Ubuntu Desktop、Fedora Workstation)启用了 udisks2 服务,它会监听新块设备事件,并自动尝试挂载或弹出提示。如果你刚执行完 mkfs 就立刻 mount,可能遇到 mount: /mnt: wrong fs type, bad option, bad superblock —— 实际是 udisks2 正在后台扫描该设备,造成短暂设备忙。
这不是文件系统损坏,而是竞态。
- 执行
sudo udisksctl info -b /dev/sdb1查看是否被 udisks2 管理 - 临时禁用:
sudo udisksctl unmount -b /dev/sdb1 2>/dev/null || true,再sudo systemctl stop udisks2(仅调试用) - 更稳妥的做法:格式化后等 2–3 秒,再
lsblk确认状态为 “no mount point”,再挂载










