我有一台 Linux 文件服务器,其中有两个 12 磁盘 MD1000 磁盘阵列连接到 RAID 控制器。不幸的是,电源故障导致 RAID 控制器上的配置数据丢失,现在报告没有磁盘配置。我没有原始配置的备份或记录。
查看上次成功启动时的服务器日志,它使用 mdadm 构建一个由 4 个设备组成的 RAID0 阵列(虽然任何地方都没有 mdadm.conf 文件,所以我猜它会自动检测)并且每个设备都是一个硬件 RAID5 阵列。
尝试恢复配置和数据:我对每个磁盘执行了 dd,并使用 ReclaiMe(Windows)工具确定原始配置是 RAID50,具有 4 个硬件 RAID5 阵列(使用 mdadm 组合)- 外加 4 个备用磁盘。
ReclaiMe 还恢复了 4 个 RAID5 阵列的图像(恢复到标记为 1.img、2.img、3.img、4.img 的文件中),并为 RAID0 构建指定了以下配置信息:
- 在 R-Studio 窗口的右侧,将“RAID 类型”设置为“RAID0(条带集)”。
- 下面,将“块大小”设置为“256 KB”。
- 在“父级”表中,在所有行中输入“63 部门”作为“偏移量”。
我已使用 R-studio 和这些参数来验证数据是否存在,现在我正尝试使用 mdadm 组装 RAID0 阵列,以便我可以挂载原始文件系统。此时我有点卡住了。我已挂载包含映像的(NTFS 格式)物理磁盘(每个映像 1 个物理磁盘),然后将映像本身作为循环设备挂载:
# losetup /dev/loop1 /media/ubuntu/disk1/1.img
# losetup /dev/loop2 /media/ubuntu/disk2/2.img
# losetup /dev/loop3 /media/ubuntu/disk3/3.img
# losetup /dev/loop4 /media/ubuntu/disk4/4.img
在循环设备上运行 fdisk:
# fdisk -l /dev/loop2
Disk /dev/loop2: 2000.4 GB, 2000435544064 bytes
255 heads, 63 sectors/track, 243205 cylinders, total 3907100672 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/loop2p1 63 3902798969 1951399453+ fd Linux raid autodetect
当我尝试自动组装时,我得到:
# mdadm --assemble --scan -v
mdadm: Cannot assemble mbr metadata on /dev/loop4
mdadm: Cannot assemble mbr metadata on /dev/loop3
mdadm: Cannot assemble mbr metadata on /dev/loop2
mdadm: Cannot assemble mbr metadata on /dev/loop1
当我尝试手动执行此操作时:
# mdadm --create /dev/md0 -v --level=0 --assume-clean --raid-devices=4 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4
mdadm: chunk size defaults to 512K
mdadm: /dev/loop1 appears to be part of a raid array:
level=raid0 devices=0 ctime=Thu Jan 1 00:00:00 1970
mdadm: partition table exists on /dev/loop1 but will be lost or
meaningless after creating array
mdadm: /dev/loop2 appears to be part of a raid array:
level=raid0 devices=0 ctime=Thu Jan 1 00:00:00 1970
mdadm: partition table exists on /dev/loop2 but will be lost or
meaningless after creating array
mdadm: /dev/loop3 appears to be part of a raid array:
level=raid0 devices=0 ctime=Thu Jan 1 00:00:00 1970
mdadm: partition table exists on /dev/loop3 but will be lost or
meaningless after creating array
mdadm: /dev/loop4 appears to be part of a raid array:
level=raid0 devices=0 ctime=Thu Jan 1 00:00:00 1970
mdadm: partition table exists on /dev/loop4 but will be lost or
meaningless after creating array
Continue creating array? N
我想知道 ReclaiMe 输出中提到的偏移量以及与 fdisk 输出中的 Start 63 相对应的偏移量是否需要不同的 losetup,因此尝试了(因为 63 * 512 = 32256):
# losetup /dev/loop1 /media/ubuntu/disk1/1.img -o 32256
# losetup /dev/loop2 /media/ubuntu/disk2/2.img -o 32256
# losetup /dev/loop3 /media/ubuntu/disk3/3.img -o 32256
# losetup /dev/loop4 /media/ubuntu/disk4/4.img -o 32256
然后:
# mdadm --assemble --scan -v
mdadm: no recogniseable superblock on /dev/loop4
mdadm: no recogniseable superblock on /dev/loop3
mdadm: no recogniseable superblock on /dev/loop2
mdadm: no recogniseable superblock on /dev/loop1
因此,我尝试再次手动创建:
# mdadm --create /dev/md0 -v --level=0 --assume-clean --raid-devices=4 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4
mdadm: chunk size defaults to 512K
mdadm: /dev/loop1 appears to contain an ext2fs file system
size=-784337920K mtime=Wed Dec 4 12:34:29 2013
Continue creating array? N
此时,我不知道该怎么办。我已经尝试过几次从备份中恢复 4 个 img 文件(总计 8TB),但都失败了。
[此外,有什么方法可以确定元数据版本或块大小吗?]