Linux 分区表损坏的修复流程
一、先保护与评估
sudo dd if=/dev/sda of=/data/mbr_bak bs=1 count=512,备份文件请存到其他磁盘/网络位置。lsblk、sudo fdisk -l、sudo parted -l、dmesg | grep sda、cat /var/log/syslog | grep sda。二、修复分区表的常用方法
sudo fdisk -l 或 sudo parted /dev/sdX print。sudo fdisk /dev/sdX,用 p 打印、d 删除错误分区、n 新建分区(务必保持与原始一致的起始扇区与分区类型,否则文件系统可能无法访问)、w 写入。gdisk 或 parted 的 mklabel gpt 重建,再用 recover/rescue 功能尝试找回分区。sudo partprobe /dev/sdX、lsblk、sudo fdisk -l。sudo apt-get install testdisk(Debian/Ubuntu),或 sudo yum/dnf install testdisk(RHEL/CentOS/Fedora)。sudo testdisk,选择磁盘 → 选择分区表类型(如 Intel/EFI GPT)→ Analyse → 先做 Quick Search,必要时做 Deeper Search。sudo apt-get install gparted 或 sudo yum/dnf install gparted;启动后选择磁盘,必要时执行“设备 → 创建分区表”(会清空全盘,慎用),或使用 Check/Repair 检查文件系统一致性。sudo dd if=/data/mbr_bak of=/dev/sda bs=1 count=512;适用于 MBR 损坏且分区布局未变的场景。三、修复后的验证与文件系统检查
sudo partprobe /dev/sdX、lsblk、sudo fdisk -l,确认分区结构与大小正确。sudo fsck -y /dev/sda1;确保分区未被挂载或以只读方式检查。sudo mount /dev/sda1 /mnt && ls /mnt,确认数据可读。sudo update-grub(在 chroot 或救援环境中执行)。四、常见场景与对应方案
| 场景 | 主要表现 | 推荐操作 |
|---|---|---|
| MBR 扇区被覆盖/破坏 | 系统不认盘或仅显示未分区 | 用已备份的 512 字节 dd 还原;无备份则用 TestDisk 重建分区结构 |
| GPT 表损坏或丢失 | parted 报错、gdisk 识别异常 |
TestDisk 选择 EFI GPT 类型,Analyse/Deeper Search 找回分区并 Write |
| 误删/错改分区 | 分区大小或类型异常 | TestDisk 恢复分区边界与类型,避免手动重建造成偏移 |
| 只是文件系统损坏 | 分区可见但挂载失败/报错 | 先 fsck 修复文件系统,再验证挂载与数据可用性 |
五、预防与注意事项
dd 克隆到同容量或更大的盘上演练。