MDADM超级块恢复

电源循环后,我发现我的RAID 5arrays不再工作。 我尝试了各种方法来重新组装数组,但到目前为止还没有任何工作。 我相信我需要以某种方式重新创建超级块和UUID ,但不愿意陷入不丢失大量数据的事情。 谢谢阅读。

cat /etc/mdadm/mdadm.conf

 DEVICE partitions ARRAY /dev/md0 level=raid5 num-devices=4 metadata=0.90 UUID=fd522a0f:2de72d76:f2afdfe9:5e3c9df1 MAILADDR root 

这是正常的。 它应该有4x2000GB驱动器(sda,sdc,sde,sdd)。

cat /proc/mdstat

 Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : inactive sdd[1](S) 1953514496 blocks unused devices:  

这是个问题。 它只显示arrays中的一个驱动器,它也处于非活动状态。 该数组也应该包含sda,sdc和sde。 当我做一个mdadm --examine /dev/sdd一切看起来都很好。 在其他驱动器上检查说/ dev / sdX上没有RAID超级块

mdadm --examine --scan

 ARRAY /dev/md0 level=raid5 num-devices=4 metadata=0.90 UUID=fd522a0f:2de72d76:f2afdfe9:5e3c9df1 

没有帮助。

mdadm --assemble --scan -v

 mdadm: looking for devices for /dev/md0 mdadm: no RAID superblock on /dev/sde mdadm: /dev/sde has wrong uuid. mdadm: cannot open device /dev/sdd: Device or resource busy mdadm: /dev/sdd has wrong uuid. mdadm: no RAID superblock on /dev/sdc mdadm: /dev/sdc has wrong uuid. mdadm: cannot open device /dev/sdb5: Device or resource busy mdadm: /dev/sdb5 has wrong uuid. mdadm: no RAID superblock on /dev/sdb2 mdadm: /dev/sdb2 has wrong uuid. mdadm: cannot open device /dev/sdb1: Device or resource busy mdadm: /dev/sdb1 has wrong uuid. mdadm: cannot open device /dev/sdb: Device or resource busy mdadm: /dev/sdb has wrong uuid. mdadm: no RAID superblock on /dev/sda mdadm: /dev/sda has wrong uuid. 

从这看起来我没有UUID,也没有sdb,sdc和sde的超级块。

sudo fdisk -l

 Disk /dev/sda: 2000.4 GB, 2000397852160 bytes 255 heads, 63 sectors/track, 243201 cylinders, total 3907027055 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 Disk /dev/sda doesn't contain a valid partition table Disk /dev/sdb: 250.1 GB, 250058268160 bytes 255 heads, 63 sectors/track, 30401 cylinders, total 488395055 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: 0x353cf669 Device Boot Start End Blocks Id System /dev/sdb1 63 476327249 238163593+ 83 Linux /dev/sdb2 476327250 488392064 6032407+ 5 Extended /dev/sdb5 476327313 488392064 6032376 82 Linux swap / Solaris Disk /dev/sdc: 2000.4 GB, 2000397852160 bytes 255 heads, 63 sectors/track, 243201 cylinders, total 3907027055 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 Disk /dev/sdc doesn't contain a valid partition table Disk /dev/sdd: 2000.4 GB, 2000398934016 bytes 255 heads, 63 sectors/track, 243201 cylinders, total 3907029168 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 Disk /dev/sdd doesn't contain a valid partition table Disk /dev/sde: 2000.4 GB, 2000397852160 bytes 255 heads, 63 sectors/track, 243201 cylinders, total 3907027055 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 Disk /dev/sde doesn't contain a valid partition table 

因此,看起来我的RAID磁盘都没有分区表或UUID。 我发现问题的最接近的是这个线程 ,它建议运行mdadm --create /dev/md0 -v -l 5 -n 4 /dev/sda /dev/sdc /dev/sde /dev/sdd并检查fsck -fn /dev/md0的有效文件系统。 但是,第一个命令吐出mdadm: no raid-devices specified. 我使用sda1,sdc1等重试了命令,但后来我得到了这个:

 mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: super1.x cannot open /dev/sda1: No such file or directory mdadm: ddf: Cannot open /dev/sda1: No such file or directory mdadm: Cannot open /dev/sda1: No such file or directory mdadm: device /dev/sda1 not suitable for any style of array 

如果我执行创建并将sda1作为命令中的“缺失”变量,那么它只是对sdc1说同样的事情。

我确信我正在使它变得比它需要的更复杂。 有经验的人可以帮帮我吗? 感谢您提前的时间。

* 编辑 *当我运行dumpe2fs /dev/sda我得到:

 dumpe2fs 1.41.14 (22-Dec-2010) Filesystem volume name:  Last mounted on:  Filesystem UUID: bbe6fb91-d37c-414a-8c2b-c76a30b9b5c5 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file Filesystem flags: signed_directory_hash Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 366288896 Block count: 1465135872 Reserved block count: 73256793 Free blocks: 568552005 Free inodes: 366066972 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 674 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8192 Inode blocks per group: 512 Filesystem created: Wed Oct 28 12:23:09 2009 Last mount time: Tue Oct 18 13:59:36 2011 Last write time: Tue Oct 18 13:59:36 2011 Mount count: 17 Maximum mount count: 26 Last checked: Fri Oct 14 17:04:16 2011 Check interval: 15552000 (6 months) Next check after: Wed Apr 11 17:04:16 2012 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: 17e784d8-012e-4a29-9bbd-c312de282588 Journal backup: inode blocks Journal superblock magic number invalid! 

所以东西还在那里。 还在研究……

哎呀! 真是个泡菜。 让我们看看我们是否能让你排序。 首先回顾一下磁盘和分区表:

 sda - no partition table sdb - sdb1 [Linux] sdb2 [Linux extended] sdb5 [swap] sdc - no partition table sdd - no partition table sde - no partition table 
  1. 这些都没有标记为fd Linux raid autodetect ,这是默认值
  2. 您没有使用分区来组织磁盘空间[0]
  3. 您似乎将整个磁盘格式化为ext2 / 3 并将整个磁盘用作raidset的一部分

最后一点是我认为你被解雇的地方。 initscripts可能认为你是因为fsck,理智检查了卷,并在此过程中消灭了MD超级块。 dumpe2fs 应该不为RAID集的卷部分返回任何内容

以我的RAID为例:

 root@mark21:/tmp/etc/udev# fdisk -l /dev/sda Disk /dev/sda: 640.1 GB, 640135028736 bytes 255 heads, 63 sectors/track, 77825 cylinders, total 1250263728 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: 0x0000ffc4 Device Boot Start End Blocks Id System /dev/sda1 2048 1240233983 620115968 fd Linux raid autodetect root@mark21:/tmp/etc/udev# dumpe2fs /dev/sda1 dumpe2fs 1.41.14 (22-Dec-2010) dumpe2fs: Bad magic number in super-block while trying to open /dev/sda Couldn't find valid filesystem superblock. 

您完全可以重新创建RAID集非常幸运,但这不会改变部署中的根本缺陷。 这将再次发生

我建议的是:

  1. 备份该raid集上的所有内容
  2. 销毁数组并从每个设备中删除md超级块(man mdadm)
  3. 将这些磁盘清零: dd if=/dev/zero of=/dev/sdX bs=1M count=100
  4. 在sda,sdc,sdd和sdf上创建跨越99%磁盘的分区[0]
  5. 将这些分区标记为type fd linux-raid wiki type fd
  6. 永远不要使用任何类型的文件系统格式化这些分区
  7. 创建一个新的RAID 5:mdadm –create / dev / md0 -v -f -l 5 -n 4 / dev / sda1 / dev / sdc1 / dev / sdd1 / dev / sde1
  8. 在/etc/mdadm.conf中更新新的UUID
  9. 从此过上幸福的生活

我从你的描述中假设sdb是你的系统盘,那没关系。 只需确保在raid集创建中不小心包含它。 在此之后,您应该走在正确的轨道上,永远不会再遇到这个问题。

[0]我曾经在有很多坏块的SATA磁盘上遇到过一次非常讨厌的故障。 使用供应商工具重建磁盘后。 我曾经完全相同的一组磁盘现在是唯一的,坏驱动器现在比低级格式开始时少了几个块,这当然毁了我的分区表并阻止驱动器重新加入MD RAID集。

硬盘驱动器通常只有一个备用块的“空闲列表”。 我的理论是该列表必须已经用尽,因为这不是企业磁盘,而是让我有机会将其发送出去进行数据恢复,而不是失败安全,它决定截断我的数据并重新调整整个大小磁盘。

因此,我在创建RAID集时不再使用整个磁盘,而是在创建通常跨越整个磁盘的分区时使用95-99%的可用空间。 在替换失败的成员时,这也为您提供了额外的灵活性。 例如,并非所有250 GB磁盘都具有相同数量的空闲块,因此如果您以最大限度低于最大值,则可以使用几乎任何磁盘品牌来替换发生故障的成员。

我以前遇到过同样的问题,而且我没有记录它(就在不久前)。

我记得有关使用e2fsck -b /dev/sdX并尝试备份超级块扇区的事情

你也可以看看TestDisk

你的post已经有一段时间了,但我会写这个:

“mdadm:无法打开设备/ dev / sdb1:设备或资源忙”

检查很好

cat / proc / mdstat

我想你的驱动器附加到一些raid ex。 的/ dev / md126

如果是这样,停止突袭

mdadm –stop / dev / md125

然后尝试重新组装raid / dev / md0

mdadm –assemble –verbose –update summary / dev / md0 / dev / sda3 / dev / sdb3 / dev / sdc3 / dev / sdd3

但是:更重要的问题:

请勿使用大于1.5 TB的磁盘使用RAID 5!

不可恢复的误码率

这是在应用循环冗余校验(CRC)代码和多次重试后驱动器无法恢复数据的速率。 对于企业级驱动器(SCSI,FC,SAS),UBE(不可恢复的位错误)速率通常在10 ^ 15中指定为1位,对于桌面类驱动器(IDE / ATA / PATA,SATA),10 ^ 14中指定1位。 (所以每个~1.7 TB)

所以,如果你的一个驱动器发生故障,有大约55%的机会不会重建 (对于UBE 10 ^ -14)祝你好运……

更多信息: http : //www.raidtips.com/raid5-ure.aspx