银河麒麟OS分区表损坏时,先执行dmesg和fdisk -l确认是否真损坏,再用blockdev重读分区表;MBR损坏用dd修复引导或fdisk重建,GPT损坏用gdisk恢复备份头,彻底崩溃则用testdisk扫描重建。

银河麒麟OS系统因误操作、异常断电或磁盘故障导致无法识别分区、启动卡在GRUB rescue、/dev/sdX设备消失或lsblk不显示原有分区时,需立即停止写入操作,优先验证是否为分区表损坏而非文件系统损坏,并通过fdisk、gdisk或testdisk工具定位并修复MBR或GPT头信息。
先确认是不是真坏了分区表
很多“分区不见了”的情况其实是内核没重读分区表,或文件系统损坏被误判。先执行sudo dmesg | tail -20查看最近磁盘报错,再运行sudo fdisk -l /dev/sda(把sda换成你实际的磁盘名)。如果输出中明确提示“Invalid partition table”“GPT header corruption”或完全不显示任何分区行,才是真分区表损坏;若能看到各分区但挂载时报错,则大概率是ext4/xfs文件系统损坏,应改用e2fsck或xfs_repair,不是修分区表。
执行sudo blockdev --rereadpt /dev/sda强制内核重读分区表——这一步能解决约30%的“假损坏”,不用动磁盘结构。
MBR分区表损坏:用fdisk重建主引导记录
适用于传统BIOS模式、使用msdos分区表的机器(常见于老款台式机或部分虚拟机)。
方法一:仅修复MBR代码,保留原有分区结构
执行dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sda bs=512 count=1,该命令将标准MBR引导代码写回磁盘开头,不触碰分区表项本身。注意【目标必须是整块磁盘如/dev/sda,写成/dev/sda1会彻底破坏第一个分区】。
方法二:若分区表项也丢失,需手动重建
运行sudo fdisk /dev/sda → 输入p查看当前分区(此时为空或乱码)→ 输入o新建空DOS分区表→ 输入n创建新分区(按原大小和起始扇区号严格还原,可查备份或用testdisk推算)→ 输入t设置类型(83 for Linux, 82 for swap)→ 输入w写入。这步极易出错,没把握别手敲。
GPT分区表损坏:用gdisk恢复备份头
银河麒麟V10默认UEFI安装均采用GPT分区表,其优势在于自带备份头——只要没全盘覆写,90%以上GPT损坏都能靠备份头救回。
第一步:运行sudo gdisk /dev/sda,进入交互界面
第二步:输入r进入恢复与转换菜单
第三步:输入b调用“Load backup partition table from disk”,gdisk会自动定位末尾备份头并加载
第四步:输入w写入恢复后的分区表——这一步会覆盖当前损坏的主头,但保留全部原始分区定义
执行后立刻运行sudo partprobe /dev/sda通知内核,再用lsblk验证分区是否重现。若提示“Warning! Read error at sector XXXXX”,说明备份头所在扇区物理损坏,需跳转到testdisk方案。
分区表彻底崩溃:用testdisk深度扫描重建
当gdisk无法加载备份头、fdisk报“no partitions found”且磁盘有重要数据不可丢时,必须上testdisk——它不依赖现有表结构,而是逐扇区扫描文件系统签名(如ext4 superblock、NTFS $MFT)反推分区边界。
安装并启动:sudo apt install testdisk -y → sudo testdisk /dev/sda
选择No Log → 选对应磁盘 → 选Intel (for MBR) 或 EFI GPT → 选Analyse → 等待自动扫描完成(通常3–8分钟)
看到类似“Partition Start End Size in sectors”的列表后,用方向键高亮你确认存在的根分区(看Size是否匹配原/大小,Type是否为Linux),按P预览能否列出/home目录文件——能列出来就说明定位准确
按Enter选中该分区 → 按Q退出分析模式 → 按Write将当前识别结果写入分区表 → 确认y → 再次执行sudo partprobe /dev/sda
【写入前务必用P键预览文件,testdisk误判会导致分区错位,覆盖相邻分区数据】

















