不确定这是否与硬件或软件有关,但我在这里发帖,希望有人能给我指明正确的方向。
硬件用途:家用NAS和KVM主机。
操作系统:Ubuntu server 14.04 安装在内部 SSD 上。
内部 RAID:4 x 2TB 3.5 英寸 HDD,采用 mdadm 软件 RAID 5 格式 ext4。
服务器还包含一个 PCI-Express USB3.0 卡,便携式 USB2.0 驱动器连接到该卡,以便按计划备份宝贵的数据。服务器在这种配置下运行良好 3 年,从未出过问题。
最近的变化:便携式 USB2.0 驱动器被便携式 USB3.0 驱动器取代 -希捷 Backup Plus Slim 2TB格式化 ntfs。此驱动器在连接到工作站时运行无故障,并且如果在启动后插入服务器上的 USB3.0 卡,则可以手动安装和访问它。
问题:启动时,BIOS 识别所有驱动器。操作系统从内部 SSD 启动,但在 GRUB 启动后挂起,提示无法初始化 /mnt/raidmount(我的挂载点)处的内部 RAID。
dmesg | tail 显示 /dev/md0 上存在坏超级块错误。但是,当断开外部 USB3.0 HDD 驱动器并重新启动服务器时,一切都正常,mdadm 加载 raid,我可以毫无问题地访问其上的所有数据。这对我来说意味着 RAID 没有问题,但由于某种原因,当连接 USB3.0 驱动器时,它无法正确呈现给操作系统。
我认为这可能是 raid 阵列电源供应不足的问题(USB3.0 比 USB2.0 消耗更多的电量)我将 PSU 从 300W 升级到 450W,但问题仍然存在。
我在 Google 上没有找到这方面的例子,不知道下一步该怎么做。我计划最终将服务器操作系统升级到 16.04,并用 ZFS 文件系统替换 ext4 raid,以便更好地纠正错误,但除非我能自信地将 RAID 的内容备份到外部硬盘,否则我无法继续。
答案1
我找到了自己问题的答案。我的问题是由两件事引起的:
1. 当插入 USB 驱动器时,Ubuntu 在启动时更改驱动器号分配
没有插入 USB 驱动器后,Ubuntu 在我的系统中分配了磁盘,如下所示:
/dev/sda : RAID disk 1
/dev/sdb : RAID disk 2
/dev/sdc : RAID disk 3
/dev/sdd : RAID disk 4
/dev/sde : Operating System disk
和在启动时插入 USB 驱动器时,Ubuntu 分配磁盘如下:
/dev/sda : USB connected drive
/dev/sdb : RAID disk 1
/dev/sdc : RAID disk 2
/dev/sdd : RAID disk 3
/dev/sde : RAID disk 4
/dev/sdf : Operating System disk
2. mdadm.conf 专门引用驱动器号
我的 mdadm.conf 文件 (/etc/mdadm/mdadm.conf) 包含以下条目:
DEVICE /dev/sd[abcd]
这迫使 mdadm 在启动时使用前四个驱动器号来组建 RAID 阵列,但在插入 USB 驱动器时失败,因为/dev/sda1分配给 USB 驱动器,而不是 RAID 阵列中的第一个驱动器。由于 mdadm 使用每个磁盘上的超级块来存储 RAID 阵列成员信息,因此通常不需要告诉 mdadm 要使用哪些驱动器 - mdadm 只会查看所有可用驱动器并自行将 RAID 组合在一起。
相反,我的 mdadm.conf 文件应该包含以下行:
DEVICE partitions
它告诉 mdadm 扫描所有驱动器上的所有分区,查找用于识别 RAID 成员的超级块。这样更可靠,Ubuntu 可以根据需要分配驱动器号,而 mdadm 则可以不受阻碍地完成将 RAID 组合在一起的工作。
进行这个简单的改变使问题消失。