必须人工判断分区表类型并选择对应工具:fdisk -l 报无效表则大概率mbr损坏,gdisk -l 提示gpt校验失败则属gpt损坏;lsblk无子设备表明分区表不可读;testdisk中应优先选择type匹配、size与记忆一致且非hidden/deleted的分区条目;fdisk重建时起始扇区错1扇区即致fsck失败。

分区表损坏后没有“自动恢复路径”,必须人工判断类型、选择工具、按数据价值排序操作——不存在一键回滚或系统级快照机制。
怎么快速判断是 MBR 还是 GPT 损坏
先看错误现象再选工具,别猜:
- 执行
sudo fdisk -l /dev/sda报Invalid partition table或完全不显示分区 → 大概率是 MBR 分区表损坏(64 字节被改写或清零) - 执行
sudo gdisk -l /dev/sda显示Found invalid GPT and valid MBR; converting MBR to GPT format或Warning: The CRC for the backup partition table is incorrect→ GPT 损坏,可能是主头、备份头或分区数组校验失败 -
lsblk只显示/dev/sda,无任何sda1/sda2→ 分区表已不可读,但磁盘本身可能完好 - 启动时卡在 GRUB 提示符或报
unknown filesystem→ 很可能 MBR 引导区 + 分区表同时受损
testdisk 扫描后看到多个分区候选,该选哪个
TestDisk 的 Deeper Search 常返回多个重叠/历史分区条目,不能默认选第一个:
- 优先看
Type列:标为Linux、Linux LVM、EFI System且大小与你记忆中一致的条目 - 注意
Size和Start扇区:用sudo fdisk -l /dev/sda对比原始布局(如有备份),或用hexdump -C -n 512 /dev/sda | head -20看是否残留旧文件系统签名(如 ext4 的ext4字符串) - 跳过标为
Hidden或Deleted的项,除非你明确记得曾删除过该分区 - 如果多个候选起始扇区相差 ≤1MB,选
Start最小的那个(通常是原始主分区)
fdisk 重建分区时起始扇区填错会怎样
填错起始扇区是恢复失败最常见原因,后果严重:
- 哪怕只偏移 1 个扇区(512 字节),
fsck就会报Superblock checksum mismatch或直接拒绝挂载 - ext4 文件系统超级块默认在扇区 1(即 offset 1024 字节)、扇区 3、扇区 5 等位置,起始扇区错位会导致这些位置全部失效
- 使用
sudo dumpe2fs -h /dev/sda1 2>/dev/null | grep -i "inodes count"能验证是否读到有效 superblock;若报错或输出为空,大概率起始位置错了 - 安全做法:用
sudo fdisk -l /dev/sda查原分区起始扇区(若还能显示),或从备份的sfdisk -d /dev/sda输出里抄start=值
真正麻烦的不是工具不会用,而是分区表损坏常伴随文件系统元数据错位——即使 testdisk 找回了分区,fsck 仍可能反复报错。这时候得切到只读模式,先用 debugfs 或 photorec 把关键文件捞出来,再考虑修复结构。











