我的 Debian(杰西) 系统运行几天后,我的一个 RAID 磁盘出现故障。如果我重新启动机器,几天后一切都会恢复正常,直到问题再次出现。
这是我的环境:
系统正在运行Debian Jessie 64位并有两个物理磁盘,用作RAID1和管理。
该系统还使用逻辑卷管理器以便更加灵活地处理分区。
在 - 的里面VirtualBox 5.1.10 环境有两个虚拟机正在运行。这些机器的 .VDI 文件也位于逻辑卷管理器上文提到的。
现在我遇到的问题是,几天后其中一个磁盘似乎出现错误 - 至少 RAID 控制器将该磁盘设置为故障。在过去两个月中,两个物理磁盘都已更换为新磁盘,但问题仍然存在。因此,我想知道这些是真正的磁盘故障还是软件 RAID 控制器将磁盘设置为故障,尽管它们没有问题。
这种软件 RAID、LVM 和 Virtualbox 组合是否存在已知错误?
一些命令输出:
~# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda3[0] sdb3[2](F)
1458846016 blocks [2/1] [U_]
md1 : active raid1 sda1[0] sdb1[2](F)
4194240 blocks [2/1] [U_]
unused devices: <none>
~# mdadm -D /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Sat May 14 00:24:24 2016
Raid Level : raid1
Array Size : 4194240 (4.00 GiB 4.29 GB)
Used Dev Size : 4194240 (4.00 GiB 4.29 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Sun Dec 4 00:59:17 2016
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0
Number Major Minor RaidDevice State
0 8 1 0 active sync
2 0 0 2 removed
2 8 17 - faulty /dev/sdb1
~# mdadm -D /dev/md3
/dev/md3:
Version : 0.90
Creation Time : Sat May 14 00:24:24 2016
Raid Level : raid1
Array Size : 1458846016 (1391.26 GiB 1493.86 GB)
Used Dev Size : 1458846016 (1391.26 GiB 1493.86 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 3
Persistence : Superblock is persistent
Update Time : Sun Dec 4 00:59:16 2016
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0
Number Major Minor RaidDevice State
0 8 3 0 active sync
2 0 0 2 removed
2 8 19 - faulty /dev/sdb3
~# cat /etc/fstab
/dev/md1 / ext3 defaults 1 1
/dev/sda2 none swap sw
/dev/sdb2 none swap sw
/dev/vg00/usr /usr ext4 defaults 0 2
/dev/vg00/var /var ext4 defaults 0 2
/dev/vg00/home /home ext4 defaults 0 2
#/dev/hdd/data /data ext4 defaults 0 2
devpts /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /tmp tmpfs defaults 0 0
答案1
首先,我们想从系统日志中查看一些信息。当内核从 RAID 阵列中取出磁盘时,将要记录一些信息。在我能找到的最近一次事件中,关键行是
Nov 21 08:45:49 lory kernel: md/raid1:md1: Disk failure on sdb2, disabling device.
很可能会立即记录一些其他信息前这表明存在非常严重的问题;在我的例子中,它们看起来像
Nov 21 08:45:49 lory kernel: end_request: I/O error, dev sdb, sector 1497413335
Nov 21 08:45:49 lory kernel: sd 1:0:0:0: [sdb] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
Nov 21 08:45:49 lory kernel: sd 1:0:0:0: [sdb] CDB: Write(10): 2a 00 59 40 b6 bf 00 00 18 00
Nov 21 08:45:49 lory kernel: end_request: I/O error, dev sdb, sector 1497413311
Nov 21 08:45:49 lory kernel: sd 1:0:0:0: [sdb] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
Nov 21 08:45:49 lory kernel: sd 1:0:0:0: [sdb] CDB: Write(10): 2a 00 59 40 b6 a7 00 00 18 00
因此,如果不是最近两三个 RAID 事件的话,至少从最近的 RAID 事件中查看这些信息会非常有用(请澄清在这些日志之间是否发生过 HDD 更换)。我无法告诉您在 Debian 下会记录在哪里,恐怕您需要知道这一点。
其次,我同意你的观点,你已经更换了两个硬盘。我同意,这意味着两个硬盘都不太可能有问题,尽管我仍然会smartctl -t long /dev/sdX
优先对它们运行一次(不是请同时更换两块硬盘!)。不过,这确实让我怀疑电缆的问题。下次发生这种情况时,您可以考虑在关机重启时交换两块硬盘之间的电缆。如果问题互换了,您就有一个非常有力的候选者。或者,如果您负担得起,只需立即更换坏驱动器的电缆,使用已知良好的或全新的替换件即可。
最后顺便提一下,为什么你不镜像交换?如果持久存储镜像但不交换,那么如果驱动器发生故障(并且虚拟机处于负载状态),你很可能会遇到内核崩溃并重新启动,而 RAID 设备故障时间正是你不希望发生无人值守、非计划的重启。