如何从RAID 4重塑中断后的单块设备恢复原RAID 1阵列的数据?
如何从RAID 4重塑中断后的单块设备恢复原RAID 1阵列的数据?
看来你因为RAID级别转换的意外中断折腾得够呛,先别急,我们一步步来尝试找回你的数据——毕竟原来的RAID1是镜像模式,这块盘很大概率还保留着完整的数据副本,只是现在被RAID4的元数据标记给“迷惑”了。
第一步:先做备份!(这是重中之重,别跳过)
在任何操作之前,一定要给这块盘做个完整镜像,避免操作失误彻底搞砸数据:
# 把整个磁盘镜像到外部存储,bs=1M和status=progress能让你看到进度 dd if=/dev/sdc of=/path/to/external/drive/sdc_full_backup.img bs=1M status=progress
如果外部存储空间不够,至少备份RAID元数据和分区表,留个后路:
# 保存mdadm的检查输出 mdadm --examine /dev/sdc > /path/to/backup/sdc_mdadm_info.txt # 备份前2048个扇区(包含RAID元数据和分区表) dd if=/dev/sdc of=/path/to/backup/sdc_critical_sectors.img bs=512 count=2048
第二步:尝试直接跳过RAID元数据挂载磁盘
从你提供的mdadm --examine输出来看,原来RAID的数据起始偏移是264192个扇区(每个扇区512字节),换算成字节就是 264192 * 512 = 135266304。我们可以直接指定这个偏移量挂载磁盘,绕开当前的RAID4标记:
# 创建挂载目录 mkdir -p /mnt/recovery # 尝试用原偏移量挂载 mount -o offset=135266304 /dev/sdc /mnt/recovery
如果挂载失败,试试输出里的New Offset对应的字节数:263936 * 512 = 135135232:
mount -o offset=135135232 /dev/sdc /mnt/recovery
如果成功挂载,立刻把数据复制到安全的存储设备上,别磨蹭!
第三步:用mdadm组装降级的RAID1阵列
如果直接挂载不行,我们可以尝试把这块盘当作降级的RAID1阵列来启动——毕竟它原本就是RAID1的一员:
# 先停止可能还在运行的原RAID阵列(如果有的话) mdadm --stop /dev/md0 # 创建一个降级的RAID1阵列,指定2个设备但只提供当前这块,另一个用missing代替 mdadm --create /dev/md127 --level=1 --raid-devices=2 /dev/sdc missing
然后检查阵列状态:
mdadm --detail /dev/md127
如果输出显示阵列是clean, degraded状态,那就尝试挂载:
mount /dev/md127 /mnt/recovery
第四步:用数据恢复工具扫描磁盘
如果以上方法都没成功,就用testdisk工具来深度扫描磁盘,找回丢失的文件系统:
# 先安装testdisk(不同系统命令略有不同) # Debian/Ubuntu系: apt install testdisk # RHEL/CentOS系: yum install testdisk # 启动扫描 testdisk /dev/sdc
按照工具向导操作:选择Intel/PC partition,然后点击Analyze扫描磁盘,找到原来的文件系统后,按照提示恢复数据即可。
一些重要提醒
- 绝对不要在源磁盘上写入无关数据(比如格式化、重新创建阵列),除非你已经做好了完整镜像。
- 如果磁盘有坏道,用
ddrescue代替dd做镜像,它能跳过坏道继续完成备份:ddrescue /dev/sdc /path/to/sdc_backup.img /path/to/sdc_backup.log - 数据恢复出来后,立刻转移到安全存储,之后再慢慢排查RAID阵列的问题,别再用原来的阵列冒险。
备注:内容来源于stack exchange,提问作者Robigan 06
相关产品推荐
相关产品推荐

