我的一台服务器的驱动器发生故障,所以我从所有三个相关arrays中移除了故障驱动器,将驱动器换出,然后将新驱动器添加到arrays中。 其中两个arrays工作完美。 第三个将驱动器添加为备用,并且在mdadm细节中有一个奇怪的“已删除”条目。
我尝试了两个
mdadm /dev/md2 --remove failed
和
mdadm /dev/md2 --remove detached
就像这里和这里所build议的,这两者都没有抱怨,但也没有任何影响。
有谁知道我可以摆脱这个条目,并得到正确的驱动器加回来? (理想情况下,不用第三次重新同步,我已经做了两次,这需要几个小时,但是如果这是需要的,那就需要这么做)。新的驱动器是/dev/sda ,相关的分区是/dev/sda3 。
这里是数组的细节:
#mdadm --detail / dev / md2
的/ dev / MD2:
版本:0.90
创作时间:周三10月26日12:27:49 2011
团队副本:raid1
数组大小:729952192(696.14 GiB 747.47 GB)
使用的开发尺寸:729952192(696.14 GiB 747.47 GB)
RAID设备:2
设备总数:2
优先轻微:2
持久性:超级块是持久的
更新时间:2013年11月12日17:48:53
状态:干净,退化
有源器件:1
工作设备:2
失败的设备:0
备用设备:1
UUID:2fdbf68c:d572d905:776c2c25:004bd7b2(本地到主机等等)
事件:0.34665
数量主要次要RaidDevice状态
0 0 0 0删除
1 8 19 1主动同步/ dev / sdb3
2 8 3 - 备用/ dev / sda3
如果相关的话,它是一个64位的服务器。 它通常运行Ubuntu,但现在我在数据中心的“救援”操作系统,这是Debian 7(wheezy)。 “删除”的项目是我最后一次在Ubuntu(目前不会从磁盘启动),所以我不认为这不是一些Ubuntu / Debian的冲突(当然,他们是密切的有关)。
更新 :
在本地机器上用testing设备进行了大量testing之后,我只是简单地从这个数组中获取了mdadmexception行为。 例如,再次从数组中删除/dev/sda3 ,我这样做:
mdadm /dev/md2 --grow --force --raid-devices=1
而那摆脱了“删除”的设备,留下我只是用/dev/sdb3 。 然后我nuked /dev/sda3 (写了一个文件系统,所以它没有raid fs了),那么:
mdadm /dev/md2 --grow --raid-devices=2
…这给了我一个arrays/dev/sdb3插槽0和“删除”插槽1,如你所料。 然后
mdadm /dev/md2 --add /dev/sda3
…补充说 – 作为一个备用 。 (另外3.5小时排水。)
所以在arrays中重build备份,因为mdadm的手册页说
RAID设备更改
…
当设备数量增加时,所有存在的热备件将立即激活。
…我把这个arrays扩大到三个设备,试图激活“备用”:
mdadm /dev/md2 --grow --raid-devices=3
我得到了什么? 两个 “删除”设备,和备用。 但是,当我用一个testing数组做这个,我不明白这个行为。
所以我再次拷贝/dev/sda3 ,用它来创build一个全新的数组,并将数据从旧数组复制到新数组:
rsync -r -t -v --exclude 'lost+found' --progress /mnt/oldarray/* /mnt/newarray
这当然会花费数小时。 希望当我完成后,我可以完全停止旧的数组,nuke /dev/sdb3 ,并将其添加到新的数组。 希望它不会被添加为备用!
那么所有通常的选项(列在我的问题中)都失败了,我别无select,只能:
从数组中删除/dev/sda3
核武器
创build一个包含它和一个空槽的新降级数组
将旧数组中的文件rsync到新的数组中
停止旧的数组
Nuke /dev/sdb3
将/dev/sdb3添加到新arrays
它开始说“备用,重build”,但一旦它被重build,它被添加到arrays作为主动驱动器。
当然,这意味着处理arrays的连锁效应已经发生了变化(因为这是根文件系统,这是一个皇家的痛苦)。
据我所知,在前一个数组的定义中有一些已经被破坏,因为:
A)添加驱动器应该像Just Worked (tm)一样,与其他两个一样,
和
B)如果没有,收缩和增长arrays应该工作。