Linux:当一个驱动器脱离阵列一段时间后,重建 MD-RAID 1 阵列

Linux:当一个驱动器脱离阵列一段时间后,重建 MD-RAID 1 阵列

大约一个半月前,我注意到一台 (OpenSuSE 11.3) 服务器中的两个硬盘驱动器快要坏了。根据 SMART 数据进行猜测,我首先替换了 /dev/sdb;为此,我从阵列中移除了驱动器,关闭了服务器,替换了驱动器,重新启动,然后将新驱动器添加到阵列中。到目前为止,一切顺利。如果我没记错的话,我还在这个驱动器上安装了 GRUB。然后我开始替换和重建 /dev/sda。我不记得我是否关闭了它以替换 /dev/sda(驱动器位于热插拔托架/托架中),但在第一次重新启动时,我遇到了各种 GRUB 问题,导致无法启动操作系统。我终于启动了它,但注意到一些奇怪的行为。例如,根据 /proc/mdstat,阵列中只有一个驱动器处于活动状态:

openvpn01:/home/Kendall # cat /proc/mdstat
Personalities : [raid1] 
md2 : active raid1 sdb3[2]
  20972784 blocks super 1.0 [2/1] [_U]
  bitmap: 1/161 pages [4KB], 64KB chunk

md1 : active raid1 sdb2[2]
  5245208 blocks super 1.0 [2/1] [_U]
  bitmap: 2/11 pages [8KB], 256KB chunk

md0 : active raid1 sdb1[2]
  1052212 blocks super 1.0 [2/1] [_U]
  bitmap: 0/9 pages [0KB], 64KB chunk

unused devices: <none>

嗯,好吧,所以我尝试将 /dev/sda 添加回阵列中:

mdadm --manage /dev/md0 --add /dev/sda1
mdadm: add new device failed for /dev/sda1 as 3: Device or resource busy

这很奇怪...但请注意 lsof 向我们显示的内容:

openvpn01:/home/Kendall # lsof /dev/sda3 | head -15
COMMAND     PID       USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME                                                                          
init          1       root  cwd    DIR    8,3     4096       128 /                                                                             
init          1       root  rtd    DIR    8,3     4096       128 /                                                                             
init          1       root  txt    REG    8,3    39468    404103 /sbin/init                                                                    
init          1       root  mem    REG    8,3    91812  33849572 /lib/libaudit.so.1.0.0                                                        
init          1       root  mem    REG    8,3    17392  33648690 /lib/libdl-2.11.2.so                                                          
init          1       root  mem    REG    8,3  1674953  33683537 /lib/libc-2.11.2.so                                                           
init          1       root  mem    REG    8,3    55024  33994082 /lib/libpam.so.0.82.2                                                         
init          1       root  mem    REG    8,3   120868  33828745 /lib/libselinux.so.1                                                          
init          1       root  mem    REG    8,3   143978  33683531 /lib/ld-2.11.2.so                                                             
kthreadd      2       root  cwd    DIR    8,3     4096       128 /

...因此,看起来根文件系统实际上是从 /dev/sda3 运行的。在 MD-RAID 设置中,md2 是根 FS 阵列,而 /dev/sd[ab]3 是阵列中的分区。查看挂载

openvpn01:/home/Kendall # cat /proc/mounts
/dev/sda3 / xfs rw,relatime,attr2,noquota 0 0
/dev/md1 /boot ext4 rw,relatime,user_xattr,acl,barrier=1,data=ordered 0 0

/dev/sda3 肯定已安装根文件系统,但 /boot 正在使用该阵列。

此外,当我通过 yast2 进入引导加载程序配置屏幕并查看引导加载程序详细信息时,它在“磁盘顺序设置”下仍然有旧驱动器(我通过序列号知道这一点)。

基本上,现在我担心的是阵列。操作系统认为阵列中只有一个驱动器,而这并不是安装根文件系统的驱动器!我计划在接下来的几天内尝试修复剩余的 GRUB 问题,但随后我担心阵列上的数据会发生什么;基本上,它能否在不破坏我的任何/所有数据的情况下重建自身?

希望我已经提供了足够的细节;如果没有,请发表评论,我会添加任何必要的信息。

谢谢,

肯德尔

答案1

可能发生的情况是,您的 initrd 决定用作/dev/sda3根文件系统,但是在构建 MD 阵列时,/dev/sdb3其修改时间较晚,/dev/sda3并用于支持阵列。

# mdadm --examine /dev/sd??# mdadm --detail /dev/md?可能给你提供一些关于正在发生的事情的额外线索。

最安全的方法是按照 Zoredache 的建议从实时 CD 进行备份和重建。确保备份 /dev/sda? 和 MD 阵列 - 其中一个或两个可能比另一个具有更新的数据。

相关内容