今天我收到了主服务器发出的两条通知,通知说 RAID 阵列中的磁盘出现故障。这似乎是我加入公司前几年由一位前员工设置的软件 RAID。
我之前从未在 Linux 上设置或管理过 raid,因此在开始进行任何更改或运行命令之前,我希望更好地了解发生了什么以及如何修复它。
我收到的两条通知是:
在 md 设备 /dev/md/1 上检测到失败事件。
它可能与组件设备 /dev/sda1 相关。
您忠实的,等等。
PS /proc/mdstat 文件当前包含以下内容:
个性:[raid1] md0:活动raid1 sdb2 [1] sda20 480192320块超级1.0 [2/1] [_U]位图:4/4页[16KB],65536KB块
md1:活动 raid1 sdb1[1] sda10 8188864 块超级 1.2 [2/1] [_U]
未使用的设备:
和:
在 md 设备 /dev/md/0 上检测到失败事件。
它可能与组件设备 /dev/sda2 相关。
您忠实的,等等。
PS /proc/mdstat 文件当前包含以下内容:
个性:[raid1] md0:活动raid1 sdb2 [1] sda20 480192320块超级1.0 [2/1] [_U]位图:3/4页[12KB],65536KB块
md1:活动 raid1 sdb1[1] sda1[0] 8188864 块超级 1.2 [2/2] [UU]
未使用的设备:
我知道服务器中有两个可用的物理磁盘,分别为 500gb/465gb。对我来说,这些通知表明一个磁盘是 md0,分为两个分区,另一个磁盘是 md1,也分为两个分区。
是这样吗?或者这实际上表明其中一个物理磁盘发生故障,需要更换?
答案1
对我来说,这些通知表明一个磁盘是 md0,分成两个分区,另一个磁盘是 md1,也分成两个分区。
恰恰相反。物理磁盘为“sda”和“sdb” – RAID 阵列为“md0”和“md1”。
每个磁盘确实被分成两个分区(sda1、sda2、sdb1、sdb2),每对分区上都配置了一个 RAID 阵列。如果你运行,lsblk
你可能会看到类似这样的内容:
名称 尺寸 类型 星展银行 466G磁盘 ─sda1 8G部分 │ └─md1 8G 阵列1 └─sda2 458G部分 └─md0 458G 阵列1 安全数据库 466G磁盘 ═─sdb1 8G部分 │ └─md1 8G 阵列1 └─sdb2 458G部分 └─md0 458G 阵列1
所以物理磁盘/dev/sda已发生故障,并且它同时充当 md0 和 md1 阵列的成员。(可能一小部分空间用于“/boot”卷,其余部分用于 rootfs。)
要找出它的物理位置,请使用lsblk -S
或lsblk -do name,tran,model,serial,wwn
。
更换磁盘很可能可以通过以下方式实时完成mdadm --manage
:(我思考确切的命令取决于您是否首先将新磁盘连接为“sdc”,或者是否直接替换旧磁盘并且它仍然是“sda”......)
答案2
解决这个问题的关键是:
md1 : active raid1 sdb1[1] sda10 8188864 blocks super 1.2 [2/1] [_U]
这告诉您 md1(代表第二个 raid)应该由 2 个分区组成 - sdb1 和 sda10。由于某种原因,sda1 已从阵列中删除,因此它现在处于降级状态。
sda1 表示操作系统识别的第一个磁盘上的第一个分区。下一步是找出失败的原因,并修复或替换它。
我会运行类似“hdparm -I /dev/SDA”的命令,该命令应该会告诉您磁盘的品牌和型号 - 这样您就知道您正在处理哪个磁盘。然后,我会在日志文件中查找与 /dev/SDA 相关的错误。如果找到这些错误,则可能需要更换磁盘。如果没有找到,则可能是磁盘上表示其属于阵列一部分的签名丢失了。在这种情况下,可以使用 mdadm 命令将其重新添加到阵列中。您还应该调查发生这种情况的原因。
如果磁盘出现故障,您需要 (a) 转储分区信息,(b) 降级 md0 - 即删除 /dev/sda2 (c) 替换 /dev/sda (d) 对新 sda 进行分区,分区大小不小于原始 sda (e) 将这些分区标记为 FD 类型 = raid 分区 (f) 使用 mdadm 读取分区。您可以使用“watch cat /proc/mdstat”来观察重建过程