fdisk只识别2TB因默认使用32位MBR分区表,地址上限为2^32×512B≈2.2TiB;必须用parted执行mklabel gpt初始化为GPT,并以1MiB对齐创建分区,再运行partprobe刷新内核设备节点。

fdisk 为什么一上手就只认出 2TB
因为 fdisk 默认操作的是 msdos(即 MBR)分区表,而 MBR 的扇区地址字段只有 32 位,按标准 512 字节扇区计算,上限就是 232 × 512 = ~2.2 TiB。超过部分的地址根本无法编码,内核连 /dev/sdb1 设备节点都不会生成。你运行 fdisk -l /dev/sdb,如果末尾写着 Disk label type: dos,那就坐实了是 MBR —— 此时不管磁盘物理容量多大,分区操作都在无效空间里打转。
parted mklabel gpt 是不可跳过的强制动作
别信“新盘不用初始化”——某些 NVMe、RAID 卡或 OEM 硬盘出厂自带隐藏 MBR 签名,parted 不会自动清除它。不执行 mklabel gpt,后续所有 mkpart 都在 MBR 框架下运行,分区表写进去了,但超出 2TB 的部分对内核完全不可见。
- 进入交互:
parted /dev/sdb(把sdb换成你的目标盘) - 执行:
mklabel gpt,提示警告时输yes(只清元数据,不擦数据区,但关键数据仍建议提前备份) - 立刻执行:
print,确认输出中明确含Partition Table: gpt;没看到就重来
mkpart 必须用 1MiB 对齐,别碰 0 或 0%
mkpart primary 0% 100% 看似省事,但 0% 在某些内核版本或 4Kn 扇区盘上可能落到非对齐位置,触发 Warning: The resulting partition is not properly aligned。这种分区虽能创建成功,I/O 性能可能下降 20% 以上,且部分旧固件无法引导。
- 推荐写法:
mkpart primary 1MiB 100%(让parted自动对齐到最佳起始扇区) - 避免写
0、0%、1这类模糊偏移,尤其不要混用单位(如0% 100GB) - 退出前再
print一眼,确认Start值是 2048(对应 1MiB)或其整数倍
partprobe 不执行,/dev/sdb1 就不会出现
执行完 mkpart 并 quit 后,内核缓存未刷新,/dev/sdb1 节点压根不生成。此时直接 mkfs.xfs /dev/sdb1 会报 No such file or directory。
- 立即运行:
partprobe /dev/sdb(不是partprobe全局扫描,指定盘更稳) - 验证是否生效:
ls /dev/sdb*应该能看到/dev/sdb1;lsblk显示的容量应与物理盘一致 - 若仍不显示,可尝试
echo 1 > /sys/block/sdb/device/rescan或重启(生产环境慎用后者)
partprobe 不是可选步骤,是让内核真正“看见”分区的必要握手。


















