分区表和引导扇区损坏表现为lsblk无子分区、启动卡在grub rescue或提示Invalid partition table;需先用lsblk和fdisk -l定性,有备份则dd回写MBR,无备份则用TestDisk扫描重建分区表并写入,再根据BIOS/UEFI模式重装GRUB。

磁盘分区表和引导扇区损坏,通常表现为系统无法识别分区(lsblk只显示 sda,无 sda1 等子设备)、启动卡在黑屏或 grub rescue>、提示 Invalid partition table 或 error: unknown filesystem。修复需分清两类问题:一是仅分区表(MBR 中 64 字节)损坏,二是连带引导代码(446 字节)一并丢失。前者用 TestDisk 恢复最安全;后者若已有备份,可直接 dd 回写;若两者皆无,则必须依赖 TestDisk 扫描重建。
确认是否真为分区表/MBR 损坏
别跳步,先快速定性:
- 运行
lsblk:如果仅列出sda,但下面没有sda1sda2等,说明内核未解析出任何分区条目 - 运行
sudo fdisk -l /dev/sda:若报Unable to open /dev/sda,或输出为空、仅含Invalid flag 0x0000类警告,基本锁定 MBR 分区表损坏 - 切勿直接跑
e2fsck:若/dev/sda1这个设备节点都不存在,文件系统工具根本无从作用
有备份时:用 dd 快速恢复 MBR 扇区
适用于你提前执行过类似命令备份过原始 MBR:
dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
修复步骤(需 Live USB 或救援环境):
- 挂载存放备份的分区(如
/dev/sdb1)到临时目录:sudo mount /dev/sdb1 /mnt/backup - 执行回写:
sudo dd if=/mnt/backup/sda.mbr.bak of=/dev/sda bs=512 count=1 - 强制内核重读分区表:
sudo partprobe /dev/sda;若失败或仍无效,直接重启
无备份时:用 TestDisk 扫描重建分区表
这是唯一能不依赖备份、安全还原原始分区边界的方法——它不猜起始扇区,而是扫描全盘文件系统签名(如 ext4 的 ext4 superblock、NTFS 的 NTFS signature)反推分区位置。
- 安装:
sudo apt install testdisk(Debian/Ubuntu)或sudo dnf install testdisk(RHEL/Fedora) - 确保目标盘未挂载:
mount | grep sda和lsblk均不应显示sda1被占用 - 启动:
sudo testdisk /dev/sda - 选 [Intel](即 MBR 分区表类型)→ [Analyse] → 回车 → 自动触发 [Quick Search]
- 看到列表后,高亮目标分区,按 P 键预览文件——看到熟悉的
/home/etc目录才说明识别准确 - 确认后回车选中,再选 [Write],输入 Y 写入 MBR 扇区
- 写完立即执行
sudo partprobe /dev/sda;若提示device is busy,用fuser -v /dev/sda查杀占用进程,或直接重启
修复后仍无法启动?可能只是 GRUB 引导代码没恢复
TestDisk 只修分区表,不修引导代码(446 字节部分),也不装 GRUB。分区恢复后若开机仍进不了系统:
- 确认 BIOS/UEFI 模式:
ls /sys/firmware/efi/efivars存在则为 UEFI,需挂载 ESP 分区(/boot/efi) - 用 Live 环境挂载原系统,
chroot后执行:
• BIOS:grub-install /dev/sda
• UEFI:grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
• 统一更新配置:grub-mkconfig -o /boot/grub/grub.cfg


















