fdisk -l 能显示隐藏分区但不过滤,所谓“看不到”实为分区类型被忽略或工具不支持GPT;需用gdisk、partprobe等工具配合排查内核识别与元数据格式问题。

fdisk -l 显示不了隐藏分区?先确认是不是被标记为“隐藏”类型
Linux 下所谓“隐藏分区”,通常指分区表中类型 ID 被设为 0x17(Hidden NTFS)、0x1b(Hidden FAT32)等带 Hidden 前缀的 Windows 分区类型。这些分区在 fdisk -l 里仍会显示,但可能被忽略或不挂载——不是“看不见”,而是“被跳过”。fdisk 本身不过滤分区,它只读取 MBR/GPT 结构;真正影响显示的是工具对分区类型的处理逻辑。
实操建议:
- 用
sudo fdisk -l /dev/sda查看完整设备,注意每行开头的Device列和末尾的Type列,找含Hidden字样的描述 - 若
Type是Microsoft basic data但实际是 Windows 隐藏恢复分区,说明用了 GPT + Microsoft 属性位(非传统隐藏 ID),此时fdisk不识别“隐藏”语义,得换工具 - 遇到空设备或显示
No partition table,可能是分区表损坏或使用了 LVM/RAID/加密层,fdisk看不到逻辑层以下内容
lsblk -f 和 blkid 都不显示某个分区?检查是否被 udev 过滤或未扫描
lsblk -f 和 blkid 依赖内核块设备信息和 udev 数据库,如果分区存在但没出现在输出里,大概率是内核没识别到该分区(比如分区表未重读、设备忙、或分区起始扇区错位)。它们不会主动“隐藏”分区,但也不会自动刷新分区表状态。
实操建议:
- 执行
sudo partprobe /dev/sda强制内核重新读取分区表(尤其在修改过fdisk后未重启时) - 检查
/sys/block/sda/sda1/start是否有数值,没有说明内核根本没解析出这个分区节点 - 运行
sudo dmesg | tail -20,看是否有类似sda: sda1 sda2 sda3的识别日志,或报错如partition #4 has size 0 - 某些 USB 设备或 NVMe SSD 在热插拔后需手动触发扫描:
echo 1 | sudo tee /sys/block/nvme0n1/device/rescan
想看到所有扇区(包括未分配、空闲、保留区)?别用分区工具,用 dd + hexdump
分区工具(fdisk、parted)只关心已定义的分区边界,不展示“空白扇区”。要真看到物理磁盘上每个扇区内容(比如 MBR、EBR、GPT 头、空闲空间),必须绕过分区抽象层,直接读裸设备。
实操建议:
- 用
sudo dd if=/dev/sda bs=512 count=1 | hexdump -C查看第一个扇区(MBR 或 GPT 头) - GPT 设备还需检查末尾:计算总扇区数
sudo blockdev --getsz /dev/sda,再读最后 1 扇区:sudo dd if=/dev/sda bs=512 skip=$(( $(blockdev --getsz /dev/sda) - 1 )) count=1 | hexdump -C - 注意:直接读写裸设备极危险,
dd参数写错可能清空整个盘;操作前确认设备名(lsblk对照),避免误操作/dev/sda变成/dev/sdb - 若需可视化扇区布局,
gdisk -l /dev/sda比fdisk更清楚显示 GPT 备份头位置和保护区域
为什么 gdisk 能看到但 fdisk 看不到某些分区?MBR 和 GPT 元数据冲突
当一块盘既写过 MBR 又写过 GPT(比如用 Windows Disk Management 清除 GPT 后又用 Linux 工具重写),可能残留混合元数据。fdisk 只认 MBR,gdisk 只认 GPT,两者互不兼容。这时一个工具看到的“分区”,另一个可能完全无视——不是漏了,是压根不解析那种格式。
实操建议:
- 运行
sudo gdisk -l /dev/sda和sudo fdisk -l /dev/sda对比输出,若前者显示分区而后者只显示Disk /dev/sda: ... bytes, ... sectors且无 Device 行,基本可判定是纯 GPT 盘,fdisk旧版本不支持 - 检查
sudo fdisk -l /dev/sda输出顶部是否含Partition Table: gpt,不含则fdisk当作无分区处理(即使 GPT 头有效) - 解决办法不是“强制显示”,而是统一工具链:GPT 盘优先用
gdisk、parted;需要兼容老系统时,用sgdisk --mbrtogpt转换(慎用)
真正难的不是命令怎么敲,而是分清“没显示”到底是内核没识别、工具不支持、还是分区本身不存在。尤其是混合分区表和 NVMe 设备,lsblk 和 fdisk 的输出差异背后,往往是不同内核模块对同一块设备的解释分歧。










