我有一个相当大的 Linux 软件 raid6 阵列,有 16 个设备。最近我注意到阵列中的一个驱动器似乎出现故障:
$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid6 sdk[17] sdn[19] sdp[16] sdg[13] sdi[10] sdl[8] sdj[11] sdh[14] sde[0] sdf[12] sdo[15] sda[2] sdc[6] sdb[7] sdd[1]
41021890560 blocks super 1.2 level 6, 512k chunk, algorithm 2 [16/15] [UUUUUUUUUUUUUUU_]
bitmap: 22/22 pages [88KB], 65536KB chunk
unused devices: <none>
进一步检查细节:
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time :
Raid Level : raid6
Array Size : 41021890560 (39121.52 GiB 42006.42 GB)
Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)
Raid Devices : 16
Total Devices : 15
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time :
State : clean, degraded
Active Devices : 15
Working Devices : 15
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : bitmap
Name :
UUID :
Events : 1781105
Number Major Minor RaidDevice State
0 8 64 0 active sync /dev/sde
1 8 48 1 active sync /dev/sdd
2 8 0 2 active sync /dev/sda
12 8 80 3 active sync /dev/sdf
6 8 32 4 active sync /dev/sdc
7 8 16 5 active sync /dev/sdb
8 8 176 6 active sync /dev/sdl
17 8 160 7 active sync /dev/sdk
10 8 128 8 active sync /dev/sdi
11 8 144 9 active sync /dev/sdj
13 8 96 10 active sync /dev/sdg
14 8 112 11 active sync /dev/sdh
16 8 240 12 active sync /dev/sdp
15 8 224 13 active sync /dev/sdo
19 8 208 14 active sync /dev/sdn
- 0 0 15 removed
是的,我使用的是整个磁盘而不是分区。我现在知道这不是最佳做法,但我在 2017 年构建 raid 时并不知道这一点。到目前为止,它还没有困扰我。我有与现有成员驱动器完全相同的品牌和型号的替换驱动器。
所以看起来/dev/sdm
驱动器被移除了。我无法确定为什么它已被移除。dmesg 或 /var/log 中似乎没有任何消息指出此驱动器被踢出的原因。该驱动器通过了快速和扩展的 SMART 测试。
使用 mdadm 检查驱动器,结果让我有点困惑:
# mdadm --examine /dev/sdm
/dev/sdm:
Magic :
Version : 1.2
Feature Map : 0x1
Array UUID :
Name :
Creation Time :
Raid Level : raid6
Raid Devices : 16
Avail Dev Size : 5860271024 (2794.39 GiB 3000.46 GB)
Array Size : 41021890560 (39121.52 GiB 42006.42 GB)
Used Dev Size : 5860270080 (2794.39 GiB 3000.46 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
Unused Space : before=262064 sectors, after=944 sectors
State : clean
Device UUID :
Internal Bitmap : 8 sectors from superblock
Update Time :
Bad Block Log : 512 entries available at offset 24 sectors
Checksum : 8cfef706 - correct
Events : 328936
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 15
Array State : AAAAAAAAAAAAAAAA ('A' == active, '.' == missing, 'R' == replacing)
尽管其状态为“已移除”设备,但此处显示为“活动设备 15”,并且阵列状态显示有 16 个活动设备。这值得担心吗?
为了进行比较,以下是检查阵列中另一个正常工作的驱动器的输出:
# mdadm --examine /dev/sdl
/dev/sdl:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x1
Array UUID :
Name :
Creation Time :
Raid Level : raid6
Raid Devices : 16
Avail Dev Size : 5860271024 (2794.39 GiB 3000.46 GB)
Array Size : 41021890560 (39121.52 GiB 42006.42 GB)
Used Dev Size : 5860270080 (2794.39 GiB 3000.46 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
Unused Space : before=262056 sectors, after=944 sectors
State : clean
Device UUID :
Internal Bitmap : 8 sectors from superblock
Update Time :
Bad Block Log : 512 entries available at offset 72 sectors
Checksum : 9bf69eb5 - correct
Events : 1782505
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 6
Array State : AAAAAAAAAAAAAAA. ('A' == active, '.' == missing, 'R' == replacing)
我觉得奇怪的是这个输出现在显示丢失的驱动器。
有人能告诉我通过这样的方式移除故障驱动器来恢复阵列是否安全吗:
mdadm --manage /dev/md0 --remove /dev/sdm
(这可能不会产生任何效果,因为驱动器已被“移除”)- 注释掉该数组,
/etc/fstab
这样它就不会在启动时自动挂载 - 关闭机器
- 更换故障驱动器
- 重新启动,
mdadm --manage /dev/md0 --add /dev/sdX
其中 X 是新的、干净的驱动器的字母 - 检查阵列是否正在恢复并等待其完成
我有备份,但其中一些输出让我感到紧张,而且丢失整个阵列仍然会很麻烦。感谢您的帮助,谢谢。
答案1
我成功重建了阵列,但我仍然不确定是什么错误导致相关驱动器出现故障。smartctl -x
尽管总体状态为PASSED
,但磁盘上仍记录了一些通用的 URE,这似乎是个假朋友。
如果它对任何人有帮助,我遵循了以下步骤:
- 运行
mdadm --manage /dev/md0 --remove /dev/sdm
,但正如我所想的那样,这没有任何效果,因为磁盘已被自动移除。同样mdadm --manage /dev/md0 --fail /dev/sdm
没有任何效果,因为磁盘处于移除状态。 - 注释掉我的数组以
/etc/fstab
防止它在启动时被安装。 - 关闭系统。
- 从驱动器托架中取出故障驱动器,并用新驱动器替换。
- 重新启动,验证 HBA 在启动时可以看到所有 16 个设备。
- 使用 检查新驱动器(也分配了
/dev/sdm
)上是否存在分区表parted /dev/sdm print
。我使用的 WD 驱动器确实出厂时附带了 GPT 分区表,它显示在这里。我们需要摆脱它。 - 使用 销毁新磁盘上的分区表
sgdisk --zap /dev/sdm
。这是使用整个磁盘成员时的最佳实践。如果您使用分区作为阵列成员,则可能需要在此步骤中将分区表从工作驱动器复制到新驱动器 - 详细信息可参见这里。无论哪种方式,请确保选择正确的磁盘并按正确的顺序! - 使用以下方法添加新磁盘
mdadm --manage /dev/md0 --add /dev/sdm
- 等待(就我而言)大约 6 个小时,阵列才能重建。使用 监控状态
cat /proc/mdstat
。 - 为重建成功而欢欣鼓舞。希望如此。