我在 Hyper-V VM 中安装了 CentOS 6.0。我正在尝试 Linux 的一些软件 RAID 功能,并且我有一个由虚拟 SCSI 磁盘组成的 RAID-5 阵列。大部分功能都运行良好:如果我关闭 VM 并删除其中一个磁盘,则重新启动时阵列会显示为降级,但数据仍然完好无损。然后我可以重新将驱动器添加到阵列并重建它,没有任何问题。
问题出现在我尝试在虚拟机仍处于开启状态时移除驱动器时。也就是说,在虚拟机处于开启状态时,我进入该虚拟机的设置并移除其中一个 SCSI 磁盘。在这种情况下,Linux 似乎没有意识到驱动器已消失,阵列没有进入降级模式。相反,我在 /var/log/messages 中收到来自 STORVSC 的大量有关 scsi 状态代码的警告。阵列不会正常失败或进入降级模式,而是开始返回损坏的数据。
我真的想不出更差结果会是这样的——如果 RAID 阵列中有一个驱动器发生故障,它决定直接返回损坏的数据?当然不会吧?
我是不是做错了什么事情,或者这就是它应该如何运作?
主机系统是 Windows Server 2008 R2 Standard x64。CentOS6 运行内核 2.6.32-71.29.1.el6.x86_64。RAID 阵列是使用 mdadm 创建的。我没有弄乱操作系统的任何内部结构 - 这基本上是全新安装。
答案1
这很可能是 HyperV 的问题。我其实不能给出明确的答案,但我知道在服务器环境中,你应该使用具有 TLER(时间受限错误恢复)的磁盘,这样驱动器就不会一直处于重试模式,而是很快让操作系统知道它已经坏了。
我对使用普通 RAID 磁盘的 Linux 软件 RAID 的经验是,一旦磁盘发生故障,阵列就会降级,但系统实际上无法继续正常工作。
我建议使用真实硬件尝试此操作,因为恢复时间、总线问题等问题实际上无法模拟。另外请注意,当您要测试拔出磁盘时,结果将取决于您是否支持热插拔,以及您是否在 SATA 电源插头上连接了 3.3V(molex-to-sata 转换器不支持...)