我有一个家庭服务器(HP Proliant ML310 G4),大约一个月前从雇主那里购买的。该服务器运行Debian Linux,我几乎将其用于所有方面。我可以避免这样做,因为我的需求不是很高,因此在任何给定时间服务器很少会承受重负载。该服务器有一个2 TB RAID1阵列(带有一个热备用),由mdadm管理,我用于通过Samba通过网络共享文件。我正在使用不在阵列中的较小硬盘驱动器来运行操作系统。
我通过小型255瓦UPS为服务器供电,因为我需要它承受较小的电源波动而不会停机。这一点非常重要,因为突然的不正常关机(由电源下降或停电引起)会损坏RAID阵列,这种情况已经发生过一次了。
如果发生电源故障,我估计UPS的电源只有10-15分钟。可能还有更多,但我不想自动假设有。这足以解决持续几分钟或更短时间的停电。但是,如果电源关闭了几个小时,我需要服务器在UPS电源出现故障之前自动正确关闭自身。在这种情况下,这有望防止RAID完整性下降。
这种事情在笔记本电脑b / c上很容易,因为它具有内置传感器来确定何时使用电池供电,但是据我所知,这台服务器不是这样。我有一个不寻常的网络设置,其中DSL调制解调器与路由器分开。路由器也在UPS上,这使我可以通过笔记本电脑进行SSH接入,并在发生电源故障时关闭服务器。不幸的是,这只有在我当时在那里时才有效。我需要一个无论是否参与干预始终有效的解决方案。
由于我的DSL调制解调器不在UPS上,因此如果断电,它将与其他所有设备一起掉线。之所以这样设置,是因为我对如何解决此问题有一个想法:我正在考虑编写一个脚本来对google.com或其他一些高流量/高可用性网站进行ping操作。如果ping成功完成,则服务器将继续运行。如果ping失败(因为调制解调器已关闭),脚本将认为电源已关闭,并会告诉服务器关闭。我将脚本添加到Cron并使其每5分钟运行一次。希望这将使服务器有足够的时间在UPS没电之前关闭。
在麻烦编写脚本之前,我想知道是否有更好的方法来完成所需的工作。在此先感谢您的帮助。