我的公司运行小型 NAS 盒,我们将其分发到企业和家庭,供个人或企业网络使用。这些机器运行 Ubuntu Server 10.04 并设置为从闪存驱动器启动。大部分存储和共享位于 4 驱动器 RAID5 阵列上。我们使用 dd 克隆闪存驱动器并将其替换出来,以便快速轻松地修复操作系统的问题。我们的一些客户甚至连几分钟的重启时间都承受不起关闭他们的盒子。所以我们想知道如何开始创建“热插拔”闪存驱动器。我考虑从 RAID5 阵列运行一个只有基本共享、ssh 和 FTP 的小型操作系统,并使用 USB 信号运行脚本,指示机器将引导加载程序切换到这个“微型”操作系统。因此,当机器在这个临时操作系统上运行时,我们将闪存驱动器与主操作系统切换,然后再次运行 USB 信号以将引导加载程序切换回来。所以我想我的问题是是否已经有用于此的软件,如果没有,我应该采取什么途径来开始?
答案1
所以...这实际上是一个很好的问题。
我先告诉你为什么它行不通,然后再告诉你它如何可能工作。 :-)
您的“操作系统”(更具体地说是您的内核)为您的设备提供所有必要的接口。包括您的磁盘阵列。它还保存一个描述符列表,告诉进程将数据发送到何处。
因此,当您谈论“热交换”您的“操作系统”时,您实际上是在要求在操作期间替换您的内核(以及所有相关的库和配置)。您可以让一个操作系统在运行,另一个操作系统存储在设备上。但您不能在操作期间热交换标准内核。
但是,你可以看看一项新技术,叫做拼接。它的目标是提供无需重启的内核。我不熟悉您当前的实现,也不知道 ksplice 目前的稳定性如何,但它应该可以让您走上正确的道路。而且 Canonical 甚至是他们的主要支持者之一!
祝你好运!
答案2
如果问题出在操作系统配置上,则更换驱动器不会产生任何效果。您无法简单地改变正在运行的操作系统的状态,除非您至少重新启动服务。
例如,使用 USB 上的新驱动器替换有故障的驱动器,这是可以做到的。
如果您在 LVM2 中将 USB 磁盘创建为卷组,那么您可以使用移动命令来实现这个效果。
该过程如下:
- 插入相同或更大尺寸的新 USB 磁盘。
- 使用扩展将该磁盘添加到现有卷组。
- 使用移动将范围从旧的根分区切换到新的 USB 磁盘。
- 使用减少从卷组中删除旧的旧 USB 磁盘。
- 移除旧驱动器。
我再说一遍,这根本不能解决由服务器状态引起的任何潜在问题,而这可能是大多数问题的根本原因。
此外,这不会帮助您修复未启用 LVM 的现有套件。只是您现在要发送的东西。
如果您想提供高可用性解决方案,请首先设计一个。构建冗余 NAS。您可以使用驱动执行此操作。然后,您可以安全地进行故障转移,以根据需要对问题机器进行尽可能多的离线工作。