我有一台由 OVH 托管的服务器,该服务器配置为具有软 RAID1 阵列 /dev/md0,其中包含 LVM PV。还有另一个 /dev/md1 阵列,它应该是 /boot,但最终没有使用。
今天早上,我从服务器收到大量日志,表明我的 /dev/sdb 产生了 I/O 错误(基本上我猜它已经死机了)。后来我的 MySQL 崩溃了,我的 SSH 拒绝了所有连接。我别无选择,只能重新启动(因为它是一个我无法物理访问的远程服务器)。
启动时,使用的 Web 服务器是 nginx,这是我最初使用的服务器,但不久前我用 Apache 将其替换了。
发现这令人不安,我立即重新启动到救援模式,并尝试冷静地检索我的数据并尝试准备好更改我的磁盘。
现在,我已经完成了,令我惊讶的是,执行完之后mdadm --assemble --scan
,得到的 mdstats 是:
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty]
md125 : active raid1 sda1[0]
314571640 blocks super 1.2 [2/1] [U_]
md126 : active raid1 sdb1[2]
314571640 blocks super 1.2 [2/1] [_U]
md127 : active raid1 sda2[0] sdb2[1]
1048000 blocks super 1.2 [2/2] [UU]
unused devices: <none>
sda1 和 sdb1 都被视为不同的阵列,这一点相当明显,尽管缺少另一部分。每当我尝试运行 pvscan 时,它都会告诉我
# pvscan
Found duplicate PV fuQ8NF1x1aifPHtGffNEF1sKw6ZNwv29: using /dev/md126 not /dev/md125
PV /dev/md126 VG unit05 lvm2 [300.00 GiB / 112.00 GiB free]
Total: 1 [300.00 GiB] / in use: 1 [300.00 GiB] / in no VG: 0 [0 ]
这感觉我来到这里是因为在过去的某个时刻,我的一个磁盘决定按照自己的方式运行并停止同步。
碰巧在 LVM 中找到的数据(然后是来自 /dev/sdb 的数据)似乎是最新的。
我应该怎么做
- 检查数据是否确实不同步
- 如果是,请同步数据然后更换磁盘
- 如果没有,我是否应该更换磁盘并等待 mdadm 同步新磁盘?
答案1
以前,我遇到过这个问题,我想我会添加我的修复程序,以防将来有人来找。问题似乎是 LVM 在 RAID 阵列中找到磁盘之前先在各个磁盘上找到它们。一旦 LVM 安装磁盘,RAID 阵列组装就会失败。我的修复方法是简单地告诉 LVM 不要扫描这些设备。每次启动时,我都会有一个物理卷,其中有一个大小不正确的错误(这是有道理的,因为我有 RAID 10)。在 Centos 7 上,我在设备部分中的 /etc/lvm/lvm.conf 中添加了以下内容:
filter = [ "r|/dev/sda|","r|/dev/sdb|","r|/dev/sdc|","r|/dev/sdd|" ]
这告诉 LVM 不要通过 sdd 扫描 sda,并确保 Raid 阵列可以正确安装驱动器。
更多文档在这里:RedHat 文档:LVM 过滤器