fdisk不修复分区表,仅写入手动指定结构;真正修复需已知原始起始扇区、大小和类型,否则易致数据不可访问,故应先用parted -l、gdisk -l、cat /proc/partitions交叉验证损坏层级,并优先选用testdisk扫描恢复。

fdisk 本身不修复分区表,它只写入你手动指定的分区结构。真正“修复”的前提是——你知道原始分区的起始扇区、大小和类型。盲目用 fdisk 重建,极大概率让数据无法访问。所以,fdisk 在分区表损坏场景中,是最后手段,不是首选工具。
先确认是不是真坏了,以及坏在哪一层
别一看到挂载失败就开 fdisk。先运行这几个命令交叉判断:
- sudo fdisk -l /dev/sdX:看是否输出空白、报错(如 “Unable to open”),或只显示磁盘信息但无任何分区行
- sudo parted /dev/sdX print:关注 “Partition Table” 字段——是 msdos、gpt 还是 unknown;若分区数量为 0,表头很可能已损
- cat /proc/partitions:如果 /dev/sdX 存在,但没有 /dev/sdX1、/dev/sdX2 等子项,说明内核根本没解析出有效分区条目
- sudo gdisk -l /dev/sdX(对疑似 GPT 盘):若提示 “Found invalid GPT and invalid MBR”,基本可判定分区表损毁
区分分区表损坏 vs 文件系统损坏
这是关键分水岭,处理路径完全相反:
-
分区表损坏:lsblk 显示 /dev/sdX,但不显示 /dev/sdX1;
sudo file -s /dev/sdX1报 “cannot open” 或直接失败;此时fsck命令根本无法执行,因为设备路径不存在 -
文件系统损坏:lsblk 和 fdisk -l 都能正常列出 /dev/sdX1,但挂载时报 “wrong fs type”、“bad magic number”;这时该用
e2fsck -f /dev/sdX1或xfs_repair /dev/sdX1,而不是碰 fdisk
fdisk 的正确使用场景与操作要点
仅当满足以下全部条件时,才考虑用 fdisk 手动重建:
- 你清楚记得原分区的起始扇区(比如之前记过或从备份中查到)
- 磁盘是 MBR 类型(gdisk 不适用于 MBR,fdisk 是合理选择)
- 其他恢复工具(如 testdisk)已尝试且无效,或你确定原始布局极其简单(如仅一个主分区占满全盘)
操作步骤(以 /dev/sda 为例):
- 进入交互模式:
sudo fdisk /dev/sda - 输入
p查看当前状态(即使为空也执行一次) - 输入
o创建新的空 DOS 分区表(慎用!会清空原有表) - 输入
n→p→1→ 回车(默认起始)→ 输入大小(如+50G或回车占满) - 输入
t→1→83(设为 Linux 类型) - 输入
a→1(如需启动标志) - 输入
w写入并退出 - 立即执行:
sudo partprobe /dev/sda让内核重读分区表,再用lsblk验证
更安全的替代方案:优先用 testdisk
testdisk 能扫描磁盘底层,根据 ext4/xfs/fat 等文件系统签名自动推断原始分区边界,成功率远高于手动 fdisk:
- 安装:
sudo apt install testdisk(Debian/Ubuntu)或sudo yum install testdisk(RHEL/CentOS) - 运行:
sudo testdisk /dev/sdX→ 选 Proceed → 选 Intel(MBR)或 EFI GPT → Analyse → Quick Search - 找到分区后按
P预览目录,确认内容正确 → 按Write写回分区表 - 完成后重启或运行
partprobe,再检查lsblk和fdisk -l


















