必须用 gdisk 或 parted 处理大于 2tb 的硬盘,因 fdisk 仅支持 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测试语法,有错会直接报出来,别等重启才发现
真正麻烦的从来不是命令记不住,而是新盘刚接上时你不知道它到底有没有分区表、内核认不认识、其他服务有没有偷偷锁住设备——这些细节不卡在第一步,后面全白干。











