超过 2TB 的硬盘,分区时就别再用 fdisk 了,得换成 gdisk 或 parted。原因很直接:fdisk 只支持 MBR 分区表,而 MBR 基于 32 位寻址,容量上限大约就是 2.2TB。这个边界一旦被越过,常见情况包括静默截断、直接报错,或者系统只认出前 2TB。相比之下,gdisk 和 parted 原生支持 GPT 与 64 位 LBA,不受这种容量限制。

先把结论放在前面:别上来就急着用 fdisk,先确认磁盘容量,再看当前用的是哪种分区表;只要硬盘超过 2TB,就得改用 gdisk 或 parted,因为 fdisk 只支持 MBR,强行操作不是直接报错,就是白白浪费一部分空间。
怎么判断该用 fdisk 还是 gdisk?
关键看磁盘容量和现有分区表类型:
fdisk -l /dev/sdb输出里如果出现Disklabel type: dos,说明是 MBR,可用fdisk- 如果显示
Disklabel type: gpt,或提示DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes(约 2.2TB),就必须切到gdisk或parted lsblk -f能快速确认设备有没有已有分区、是否挂载、文件系统类型,避免误操作正在使用的盘- 新盘没分区表时,
fdisk会自动建 DOS label,gdisk默认建 GPT label——这点不手动干预就容易踩坑
fdisk 创建主分区时为什么输完 +10G 还是失败?
常见错误是回车太快、没确认扇区范围,或磁盘本身有残留 LVM/RAID 签名:
- 进入
fdisk /dev/sdb后,输入n→p→1,起始扇区直接回车用默认值,但结束位置别只输+10G——要确保它落在有效扇区范围内,fdisk有时会拒绝超出物理边界 - 若提示
Value out of range,说明当前磁盘剩余空间不够,或已有分区占满;用p查看已用空间再算 - 执行
w前务必用p预览分区表,确认Start和End列数值合理(比如不是负数或远超总扇区数) - 写入后内核可能没立刻识别新分区,得跑
partprobe /dev/sdb或udevadm settle,否则lsblk看不到sdb1
格式化前漏掉这一步,mkfs 会报错
分区创建完不能直接 mkfs.xfs /dev/sdb1——得先确认设备节点存在且无占用:
- 运行
cat /proc/partitions,检查sdb1是否在列表里;没有就说明partprobe没生效或w没成功写入 - 如果
mkfs报device is busy,可能是之前挂载过没卸载,或 LVM/RAID 元数据残留,先试dmsetup remove_all和pvremove /dev/sdb1 - RHEL/CentOS 默认倾向
mkfs.xfs,Ubuntu/Debian 更常用mkfs.ext4;选哪个取决于后续是否需要 ACL、快照或大文件支持,不是随便换 - 格式化命令带
-f强制覆盖(如mkfs.xfs -f /dev/sdb1)能绕过“already has a filesystem”警告,但要确保真没数据
挂载后 df -h 看不到,八成是 /etc/fstab 写错了
临时挂载 mount /dev/sdb1 /mnt/data 成功,但 df -h 不显示?重点查三点:
- 挂载点目录是否存在且为空:
ls -ld /mnt/data,权限不对或非空目录会导致静默失败 - 永久挂载时,
/etc/fstab第二列必须是挂载路径(如/mnt/data),不是设备名;第三列是文件系统类型(xfs或ext4),拼错会mount -a报unknown filesystem type - 推荐用 UUID 而非
/dev/sdb1:运行blkid /dev/sdb1复制 UUID,写进 fstab 类似UUID=xxxx /mnt/data xfs defaults 0 0;设备名在重启后可能变(比如插了新硬盘),UUID 才稳定 - 改完 fstab 必须执行
mount -a测试语法,有错会直接报出来,别等重启才发现
真正麻烦的从来不是命令记不住,而是新盘刚接上时你不知道它到底有没有分区表、内核认不认识、其他服务有没有偷偷锁住设备——这些细节不卡在第一步,后面全白干。