Linux软件RAID10阵列GPT分区表丢失后的恢复方法咨询
Linux软件RAID10阵列GPT分区表丢失后的恢复方法咨询
先别慌,这种因突发电力故障导致的GPT分区表丢失是有很大概率恢复的,我给你梳理几个可行的操作步骤,一定要记住:所有操作先在磁盘镜像上测试,绝对不能直接在原盘上瞎试,避免造成不可逆的损坏!
第一步:先给所有磁盘做完整镜像
这是最关键的前置步骤,万一后续操作出错,我们还能从镜像回滚。用dd命令给每块盘做镜像(把/path/to/backup/换成你有足够空间的存储路径):
dd if=/dev/sda of=/path/to/backup/sda.img bs=4M status=progress dd if=/dev/sdb of=/path/to/backup/sdb.img bs=4M status=progress dd if=/dev/sdc of=/path/to/backup/sdc.img bs=4M status=progress dd if=/dev/sdd of=/path/to/backup/sdd.img bs=4M status=progress
如果觉得dd速度慢,也可以用ddrescue,它能跳过坏块,更适合故障盘。
方法一:利用GPT备份分区表恢复
GPT分区表默认会在磁盘末尾保留一份备份,我们可以尝试用gdisk工具加载这份备份:
- 先在镜像上测试,比如挂载sda的镜像:
losetup /dev/loop0 /path/to/backup/sda.img - 运行
gdisk /dev/loop0,进入交互界面 - 按
r进入恢复与转换菜单 - 按
l尝试从磁盘末尾加载备份分区表,如果工具提示找到有效备份,就说明有戏 - 确认分区结构和你之前的一致后,按
w写入分区表(先在镜像上操作,没问题再换到原盘/dev/sda) - 用同样的方法处理其他三块磁盘的镜像/原盘
方法二:通过RAID元数据反推分区位置
如果GPT备份也损坏了,我们可以从RAID的元数据入手,反推原来的分区范围:
- 运行
mdadm --examine /dev/sda(或者镜像对应的loop设备),查看输出里的Data Offset和Data Size字段,这能帮我们确定RAID成员的起始和结束扇区 - 因为你之前是给每块盘建了第一个分区
/dev/sd[abcd]1,所以分区的起始扇区通常是GPT默认的2048,结束扇区是磁盘总扇数减去33(GPT备份占用的扇区数)。你可以用fdisk -l /dev/sda查看磁盘总扇数 - 运行
gdisk /dev/sda,按n新建分区:- 分区类型选
primary - 起始扇区填
2048 - 结束扇区填
[总扇数]-33 - 分区类型GUID选
fd00(Linux RAID专用类型)
- 分区类型选
- 按
w写入分区表,同样操作其他三块盘
最后:重新组装RAID并验证
当四块盘的分区表都恢复后,尝试重新组装RAID:
mdadm --assemble --verbose /dev/md10 /dev/sd[abcd]1
如果组装成功,先别急着挂载,先检查文件系统的完整性(假设你用的是ext4):
fsck.ext4 /dev/md10
确认没问题后,就可以挂载RAID阵列查看数据了。
如果以上方法都不行,还可以试试testdisk工具,它能扫描磁盘上的分区签名,自动识别GPT分区结构,操作更可视化,适合不太熟悉命令行的用户。
备注:内容来源于stack exchange,提问作者Max Cuttins
相关产品推荐
相关产品推荐

