中文 UPS Howto <author>Harvey J. Stein, <htmlurl url="mailto:abel@netvision.net.il" name="abel@netvision.net.il">, Berger Financial Research, Ltd. <date>v2.02, 31 March 1997 <abstract> 本文能帮助您将 Linux 系统连接到不断电系统 (uninterruptable power supply, UPS)... 如果幸运的话 .... 版权声明: Copyright (c) 1994, 1995, 1996, 1997 by Harvey J. Stein. You may use this document as you see fit, as long as it remains intact. In particular, this notice (along with the contributions below) must remain untouched. </abstract> <toc> <sect>简介 <p> 本 HOWTO 文件包含了如何连接 UPS 到执行 Linux 的电脑上。 其想法是以适当的方式将二者相连接,使得 Linux 可以在电源断电以及 UPS 的电池耗光前安全地关机。 其中还包括了一些可帮助您建立上述连线的软体,以及详述该连线的运作方式。 假如您能找到一个已设定好可以使用您的 UPS 的软体, 则後者的说明对您来说通常是不需要的。否则的话,您必须仔细地阅读它。 在相当的程度上本文件已比起我在三年前所撰写的原文多出了很多内容。 所有的基本资料都可以在 <tt/SysVinit/ 中的 <tt/powerd/ man page □找到。 尽管在三年前有人可能无法在一般的 Linux 套件中找到这篇 man page , 但我不相信今後还会再发生这样的情况。 除此之外,当我第一次撰写这篇 Howto ,除了 <tt/powerd.c/ 以外并没有其他的软体可以做为 Linux/UPS 之间的沟通与控制。 而今日我们则可以在 <url name="Sunsite's UPS directory" url="http://sunsite.unc.edu:/pub/Linux/system/ups"> 下找到一大堆 UPS 控制软体。 然而,受到 RedHat 即将重新印制 Dr. Linux 的激励,我也开始重写这篇 UPS Hotwo 。 为什麽呢? 嗯 .... <itemize> <item>我想,额外的一般性概观将能有助於了解如何将 Linux 系统连上 UPS , 即使它只是另一份内容相同的文件。 <item>这篇 HOWTO 算是各种特殊 UPS 资料的储藏库 --- 在这儿有许多尚未被整合入一般软体套件中的 UPS 资讯。 <item>这篇 HOWTO 包含了一些在其他文件中找不到的额外详细资料。 <item>一些可以在 <url name="Sunsite's UPS directory" url="http://sunsite.unc.edu:/pub/Linux/system/ups"> 找得到的 UPS 软体似乎说明文件都少得可怜。 您也许需要先阅□本文以了解如何使用他们。 <item>现在这件事似乎已有了自己的生命了。当一篇 HOWTO 文件因而诞生时事实就更加明显了。另一个比较不明显的事实是当它必须上床睡觉时。 (译注: 这一句笑话我看不懂啦! 唉! 翻得好烂 ....) </itemize> <sect1>有贡献的人们 <p> 我永远都会感激那些曾经给我帮助、给我建议、以及给我特殊的 UPS 资料的人们。 其中包括了: <itemize> <item>Hennus Bergman (<htmlurl url="mailto:hennus@sky.owl.nl" name="hennus@sky.owl.nl">) <item>Charli (<htmlurl url="mailto:mefistos@impsat1.com.ar" name="mefistos@impsat1.com.ar">) <item>Ciro Cattuto (<htmlurl name="Ciro Cattuto" url="mailto:ciro@stud.unipg.it">) <item>Nick Christenson (<htmlurl url="mailto:npc@minotaur.jpl.nasa.gov" name="npc@minotaur.jpl.nasa.gov">) <item>Lam Dang (<htmlurl url="mailto:angit@netcom.com" name="angit@netcom.com">) <item>Markus Eiden (<htmlurl url="mailto:Markus@eiden.de" name="Markus@eiden.de">) <item>Dan Fandrich (<htmlurl url="mailto:dan@fch.wimsey.bc.ca" name="dan@fch.wimsey.bc.ca">) <item>Ben Galliart (<htmlurl url="mailto:bgallia@orion.it.luc.edu" name="bgallia@orion.it.luc.edu">) <item>Danny ter Haar (<htmlurl url="mailto:dth@cistron.nl" name="dth@cistron.nl">) <item>Christian G. Holtje (<htmlurl url="mailto:docwhat@uiuc.edu" name="docwhat@uiuc.edu">) <item>Raymond A. Ingles (<htmlurl url="mailto:inglesra@frc.com" name="inglesra@frc.com">) <item>Peter Kammer (<htmlurl url="mailto:pkammer@ics.uci.edu" name="pkammer@ics.uci.edu">) <item>Marek Michalkiewicz (<htmlurl url="mailto:ind43@sun1000.ci.pwr.wroc.pl" name="ind43@sun1000.ci.pwr.wroc.pl">) <item>Jim Ockers (<htmlurl url="mailto:ockers@umr.edu" name="ockers@umr.edu">) <item>Evgeny Stambulchik (<htmlurl url="mailto:fnevgeny@plasma-gate.weizmann.ac.il" name="fnevgeny@plasma-gate.weizmann.ac.il">) <item>Clive A. Stubbings (<htmlurl url="mailto:cas@vjet.demon.co.uk" name="cas@vjet.demon.co.uk">) <item>Miquel van Smoorenburg (<htmlurl url="mailto:miquels@cistron.nl" name="miquels@cistron.nl">) <item>Slavik Terletsky (<htmlurl url="mailto:ts@polynet.lviv.ua" name="ts@polynet.lviv.ua">) <item>Tom Webster (<htmlurl url="mailto:webster@kaiwan.com" name="webster@kaiwan.com">) </itemize> 请注意下方的 email 地址是自电子信件中节录下来的,它们也许会过期。 而上方的 email 地址可能也会过期,但有些是比起下方还要新的。 除此之外,如果因我的疏忽而在上表中漏掉任何一位有贡献者的话,我真的很抱歉。 请您 email 给我,我会将您的名字加上去。 <sect1>请特别注意 <p> 我真的无法保证这些东东对您会有效。连结 UPS 到电脑上是一件相当有技巧的工作。 其中之一或二者都有可能会烧掉、爆炸、著火、或者是引发第三次世界大战。 除此之外,我只有对 Advice 1200 A UPS,以及 5kva Best Ferrups 有直接的经验, 而且我也不需要自己做一条讯号线。所以,请注意! 尽可能地收集您的 UPS 的所有资讯。 请先考虑清楚,不要随便相信任何您在本文中或其他地方所读到的内容。 另一方面,我正尽可能地收集所有使我的 UPS 可以工作的方法, 其中有很多不是来自制造商的资讯,所幸也没有烧掉任何东西,所以这些都是可能的。 <sect1>其他的文件 <p> 本文并没有包含所有 UPS 的一般特性与能力。如您需要这类型的资讯,你可以看看 <url name="The UPS FAQ" url="ftp://navigator.jpl.nasa.gov/pub/doc/faq/UPS.faq">。 这篇文件同时也可以在 <htmlurl name="ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/answers/UPS-faq" url="ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/answers/UPS-faq"> 中找到。它是由 Nick Christenson (<htmlurl url="mailto:npc@minotaur.jpl.nasa.gov" name="npc@minotaur.jpl.nasa.gov">) 所维护的,但看起来好像自从 1995 年以後就没有再重写了。如果您要 email 给他, 他希望您可以在信件的 Subject 那一行放入 <tt/UPS/ 或 <tt/UPS FAQ/ 或其他相关的词句。 有许许多多的 UPS 制造商在网路中萌芽。 其中有些确实在他们的网页中提供了有用的资讯。您可以在 <url name="The UPS Directory" url="http://www.upssystems.uk.com/upsdir.html"> 中找到这些 UPS 制造商的网页简表。该网站也包含了 <url name="UPS FAQ" url="http://www.upssystems.uk.com/upsfaqs.html"> 这篇文件。 <sect>请注意已过时的资讯 <p> 我刚刚发现底下有一些资料已经过时了。其中来自 <url name="the latest sysvinit package" url="http://sunsite.unc.edu/pub/Linux/system/daemons/init/sysvinit-2.64.tar.gz"> 的 <tt/init/ daemon 比起我所能描述的还要简陋。 尽管看起来目前的版本与该程式完成时的版本相容,但当中仍然有一些对 UPS <bf/相当重要/ 的支援没有文件说明。 底下所简述的控制机制只能让 <tt/powerd/ 送给 <tt/init/ <tt/powerfail/ 或 <tt/powerok/ 这两个讯息之一而已。<tt/init/ 接到 <tt/powerfail/ 讯息时执行一个命令,而当它接到 <tt/powerok/ 时则执行另一个命令。 这将导至 <tt/powerd/ 在处理低电力讯号及其他特殊状况时产生逻辑上的复杂性。 较新版本的 <tt/init/ (像是 2.58 版) 就比较精良了。 它可以在接到讯号时选择 <tt/三个/ script 中之一来执行。如此一来, <tt/init/ 可以在接到电源断电讯号时执行 <tt/powerfail/ script ,可以执行一个 <tt/powerfailnow/ script 做立即的关机 ,以及一个 <tt/powerok/ script 来停止任何正在进行的关机动作。这样比起要我们自行处理这些机制要简单多了。 尽管这□大部分的讨论仍假设使用旧的 <tt/init/ 通讯方式, 我已加入了两个新的章节来描述新的连线方法。这两个章节是 <ref id="ciro" name="Trust Energy Protector 400/650"> 及 <ref id="apc700" name="APC Smart-UPS 700">。其中前者特别详细。二者都包含了一个 <tt/powerd.c/ 档, 它可以在收到低电力讯号时送讯号给 <tt/init/ 以进行紧急关机, 就像是 <tt>/etc/inittab</tt> 档中那几行所写的一样。其馀的, 我所能告诉您的就只有请您看看 <tt/init/ 的原始码了。 就我所知的,在以下所列的 UPS 软体套件中有许多也采用了新式的连线方式。 <sect>聪明的与单调的 UPS <p> UPS 大至分为两类,我分别叫它们 ``聪明的 (Smart)''与 ``单调的 (Dumb)''。 二者之间的差异在於我们能自 UPS 获得多少的讯息以及我们能够对 UPS 下达多少命令。 <p> <descrip> <tag/单调的 UPS/ <itemize> <item>藉由序列阜 (serial port) 与电脑相连。 <item>使用 modem 控制线与电脑相通讯。 <item>可以在电力是否消失时给电脑送讯号。 <item>也许可以在 UPS 的电力是否偏低时通知电脑。 <item>电脑通常可以送讯号给 UPS 让它将自己关闭。 </itemize> <tag/聪明的 UPS/ <itemize> <item>藉由序列阜 (serial port) 与电脑相连。 <item>以一般的资料传输线经序列阜与电脑沟通。 <item>多半有一组命令语言可以让电脑自 UPS 那得知各式各样的资讯, 以设定各种运作参数给 UPS,同时也操作 UPS (像是将它关掉) </itemize> </descrip> <p> 通常聪明的 UPS 都可以在单调的模式下操作。这是很有用的,因为就我所知, 最常见的聪明 UPS (像是 APC) 制造商只愿意透露他们的 UPS 通讯协定给那些签署了绝不□露机密同意书的人们。 就我所知,只有 BEST 公司所制作的 UPS 可以很容易地在 Linux 下运作。 除此之外, BEST 公司还有完整的文件说明了他们的 UPS 的聪明模式 (以及单调模式)。 BEST 公司也提供了可以与他们的 UPS 沟通的程式的原始码。 所有列在 <ref id="software" name="软体"> 章节的软体皆可在单调模式下与 UPS 沟通。这些都是您真正需要的。有些软体则宣称说可以在聪明模式下操作 ARC UPS ,但我不知道他们是如何获准而做到的。 一个完整的程式运作会跳出一个视窗,□头包含了有趣的度量表, 代表著各式各样的 UPS 统计资料,像是负载程度、内部温度、断电记录、输入电压、 及输出电压 ...... 等等。看起来似乎 <tt/smupsd-0.7-1.i386.rpm/ 程式 (见 <ref id="software" name="软体">一节) 可以做到这些。 对於其他的软体我则不敢确定。 以下的内容我将尽量□限於如何调整您的系统使其能与单调模式下的 UPS 一起工作。 而对聪明模式的 UPS 而言,基本想法是一样的,但需要什麽样的 <tt>powerd</tt> 参与工作以及您需要什麽样的讯号缆线是随著 UPS 而有不同的。 <sect>软体<label id="software"> <p> 基本上,您所需的就是一个可以工作 <tt>powerd</tt> 程式档,通常您可以在 <tt>/sbin/powerd</tt> 下找到它。它通常是属於 <tt/SysVinit/ 系统的一部分。 就我所知,所有近期版本的 Linux 系统都包含了一个较新版的 <tt/SysVinit/ 。 但在非常旧的版本则不包含 <tt>powerd</tt>。 唯一的问题是您的讯号缆线可能不能与您的 <tt/powerd/ 设定相配合, 在这情况下您必须重新做一条讯号缆线,或者是找来一份 <tt/powerd.c/ 档并修改它使得它能配合您的讯号缆线工作。或者是, 您可以使用以下所列的软体,大部分的软体允许您做适当的设定以配合您的讯号缆线。 就像刚刚所提到的,除了使用 <tt/SysVinit/ 的 <tt/powerd/ 之外您也可以拿现有的任何一种 UPS 软体来用。目前有许多软体可以帮助您建立电脑与 UPS 之间的连线。在我第一次写这篇 HOWTO 时都还没有这些软体, 而这也是为什麽我要写这篇 HOWTO 。事实上,您也可以从中选一个软体来用, 而完全忽略这篇 HOWTO 的内容。 在 1997 年 3 月 15 日左右, <url name="Sunsite 的 UPS 目录" url="http://sunsite.unc.edu:/pub/Linux/system/ups"> 下可以找到一大堆的软体可用。而在其他的网站似乎也有 UPS 控制软体可以找到。 以下是我目前所找到的 (除了其中两个以外,其他都是在 sunsite 找到的): <descrip> <tag><url name="Enhanced_APC_BackUPS.tar.gz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/Enhanced_APC_BackUPS.tar.gz"></tag> 这是一个可以控制 APC 聪明模式的 UPS 。看起来基本上是依据 BUPS Howto (包含了这一篇) ,但也好像有一些低电力警告的支援。 <tag/<url name="Enhanced_APC_UPSD-v1.4.tar.gz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/Enhanced_APC_UPSD-v1.4.tar.gz"><label id="Enhanced">/ 在 <tt/.lsm/ 档中提到它从前就是上一个所提到的软体, 但事实上它正是将上一个软体的 <tt/.tar.gz/ 档包装在它的 <tt/tar.gz/ 档之内。那篇文件说明有问题,看起来它似乎同时支援 APC UPS 的聪明与单调模式,但我不敢确定。 <tag/<url name="apcd-0.5.tar.gz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/apcd-0.5.tar.gz"><label id="apcd">/ 这是另一个可以控制 APC UPS 於聪明模式下运作的软体。 看起来似乎可以支援主/从模式 (也就是说,当停电时可以由一台机器送讯号给另一台机器叫它关机) 。 看起来似乎是使用了 UPS 的聪明模式,不像是经由 modem 的讯号线来控制。 <tag/<url name="smupsd directory" url="ftp://cms180.cmsnet.com/pub/smupsd/"><label id="smupsd">/ 又是另一个控制 APC UPS 的软体。看起来可以在非常聪明 (tm) 模式下操作 UPS 。举例来说,它包含了一个 Java 图形介面的 UPS 监控工具程式。 该目录下包含了已编译好的 RPM 形式的软体 (<htmlurl url="ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.i386.rpm" name="ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.i386.rpm">) , 一个原始码 RPM 格式档 (<htmlurl url="ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.src.rpm" name="ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.src.rpm">) , 以及一个□我档案 (<htmlurl url="ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.README" name="ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.README">) 。 <tag/<url name="genpower-1.0.1.tgz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/genpower-1.0.1.tgz"><label id="genpower">/ 一个一般化的 UPS 控制软体。它包含了很多种 UPS 的设定 --- 两种 TrippLite 的设定,以及三种 APC 的设定。同时也包含了很好的说明文件。物超所值。 <tag/<url name="powerd-2.0.tar.gz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/powerd-2.0.tar.gz"><label id=" powerd2">/ 一个 <tt/SysVinit/ 的 <tt/powerd/ 程式的替代品。 与它的说明文件所提到的相反,它似乎没有整合到 <tt/SysVinit/ 2.62 版中。它的优点在於它可以做为在其他机器上执行的 <tt/powerd/ 的伺服端 (假如您的机器有连上网路且只有一个 UPS 的话) ,而且它可以用设定档来进行设定 ---- 故其原始码不需修改及重新编译。 <tag/<url name="upsd-1.0.tgz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/upsd-1.0.tgz"><label id="upsd">/ 另一个 <tt/powerd/ 的替代品。看起来似乎与 powerd-2.0.tar.gz 有许多相似的特色。 <tag/<url name="checkups.tar" url="http://www.bestpower.com/section/software/checkups.tar"><label id="checkups ">/ 这个软体是用来控制 Best UPS 的。它是直接来自 Best 公司的网页的。 它包含了多种 <tt/unix/ 的可执行档,但更重要的是,它还包含了原始码, 故您可以在 Linux 下测试它,而且假如它无法工作,您也可以试著修改它。 此原始码同时包含了在单调模式下控制 UPS 的 "基本检测" 指令, 以及一些更精巧的 "先进检测" 指令 --- 当 UPS 回报说它只剩 X 分钟的电力时即发出关机的讯号,而不是等到 X 分钟後电力都用光了才开始关机。 此先进检测程式也会在 UPS 发出像是周围环境温度过高、接近低电力、 低交流电输出、或者是使用者测试等警告时关闭机器。 <tag/<url name="bestups-0.9.tar.gz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/bestups-0.9.tar.gz"><label id="bestups">/ 可能在您读到这篇文章时,此在 sunsite 可以找得到的软体已发展得很好了。 它是一对可以相互通讯的模组,用以控制 Best Ferrups UPS。它可以在聪明模式下 控制 UPS 。它可以与 powerd-2.0 合作操控 --- 这一点在当您有一个大型的 Best Ferrups UPS 支援连接在网路上机器的电力时格外有用。 </descrip> <p> 请注意我只是快速地浏览过这些软体。我并没有用它们,除了那个我们才开始使用的 <url name="bestups-0.9.tar.gz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/bestups-0.9.tar.gz"> 以及 <url name="powerd-2.0.tar.gz" url="http://sunsite.unc.edu:/pub/Linux/system/ups/powerd-2.0.tar.gz"> , 其中 ``才开始'' 意思是说我们才在上个星期四开使做测试。 <sect>自己动手指南 <p> 这□的讨论是针对单调模式的 UPS 控制而写就的。然而, 大部分的过程对单调的 UPS 与聪明的 UPS 几乎是一样的。最大的不同在於 UPS 监控程式 (基本上是 <tt/powerd/) 如何与 UPS 沟通。 在开始之前,我建议以下的工作流程: <itemize> <item>略读这篇文件。 <item>下载并审查所有看起来特别适合您的 UPS 的软体。 <item>下载并审查所有更一般化的软体。请注意有些较一般化的软体事实上更为强大、 有更好的说明文件、且比起那些较特殊的软体更容易使用。 <item>如果您依然无法让 UPS 工作,或是您的方向依旧不清楚, 请您仔细阅读本文,并试试做 hack 的工作 .... </itemize> <sect1>您所需的工作 (总结) <p> <itemize> <item>将您的电脑接上 UPS 。 <item>用特殊的讯号缆线将您的电脑的的串列阜与 UPS 连接在一起。 <item>在您的电脑上跑 <tt>powerd</tt> (或其他类似的软体) 。 <item>设定您的 <tt/init/ 程式使它能在 powerfail 及 powerok 事件发生时做适当的处理 (例如分别启动 <tt/shutdown/ 程序及停止正在执行的 <tt/shutdown/ 程序)。 </itemize> <sect1>这应该是做什麽工作的? <p> <descrip> <tag/UPS 的工作/ 当电力消失时, UPS 持续供应电脑所需的电力, 并以送出重置讯号或是在它的控制阜上打开连接讯号以通知电脑电力消失了。 <tag/讯号缆线的工作/ 讯号缆线是设计为当 UPS 送出重置讯号时,会使得特殊的序列阜控制接脚 (基本上是 <tt/DCD/) 出现高电位。 <tag/Powerd 的工作/ <tt/powerd/ 程式负责监视序列阜。它保持著 UPS 所需而升高 / 降低序列阜控制接脚的高 / 低电位 (基本上, <tt/DTR/ 接脚必须保持在高电位且关闭 UPS 的接脚必须保持在低电位) 。当 <tt/powerd/ 发觉控制接脚变成高电位,它会在 <tt>/etc/powerfail</tt> 档中写入 <tt/FAIL/ 这个字并送 <tt/SIGPWR/ 讯号给 <tt/init/ 行程。 当控制接脚再次变回低电位时,它会在 <tt>/etc/powerfail</tt> 档中写入 <tt/OK/ 这个字并送 <tt/SIGPWR/ 讯号给 <tt/init/ 。 <tag/Init 的工作 (除上述之外它负责所有的工作)/ 当它接到了 <tt/SIGPWR/ 讯号,它会检查 <tt>/etc/powerfail</tt> 档。 如果□头是 <tt/FAIL/ 这个字眼它会执行 <tt>/etc/inittab</tt> 档中 <tt/powerfail/ 那一行的指令。如果□头是 <tt/OK/ 这个字它则执行 <tt/inittab/ 档中 <tt/powerokwait/ 那一行的指令。 </descrip> <sect1>如何设定好所有的工作 <p> 以下我们假设您有一条可以和 <tt/powerd/ 正常工作的讯号缆线。 如果您不确定您的讯号缆线是否可以工作 (或它如何工作),请参考 <ref id="hacking" name="讯号缆线反向分析及修改 power.c"> 一节,那儿有关於少见的讯号缆线处理及重新设定 <tt/powerd.c/ 的资讯。 <ref id="serial-port" name="序列阜接脚的指定"> 及 <ref id="ioctl" name="有关读写 RS232"> 这两节也将对您有帮助。 如果您需要制作一条讯号缆线,请见 <ref id="make-cable" name="如何制作讯号缆线"> 的详细说明,以及 <ref id="ups-specific" name="UPS 资料节选"> 一节中有关您的 UPS 的小节。 後者可能也包含了制造商所提供的讯号缆线的相关资讯。 或许您应至少将 <ref id="ups-specific" name="UPS 资料节选"> 中所有的小节浏览过一遍,因为每一小节都会有一些额外的一般性资料能对您有帮助。 <itemize> <item>修改 <tt>/etc/inittab</tt> 档。写入像以下的内容: <verb> # What to do when power fails (Halt system & drain battery :): pf::powerfail:/etc/powerfailscript +5 # If power is back before shutdown, cancel the running shutdown. pg:0123456:powerokwait:/etc/powerokscript </verb> <item>写 <tt>/etc/powerfailscript</tt> 及 <tt>/etc/powerokscript</tt> 这两个 script 档分别在五分钟 (或其他您喜欢的时间) 之内进行关机及停止任何存在的 <tt/shutdown/ 程序。 依您所用的 <tt/shutdown/ 程式版本的不同, 它可能会相当单简以至於您根本不需使用 script 档,或者是一行 <tt/bash/ 的 script 档像是以下这一行: <verb> kill `ps -aux | grep "shutdown" | grep -v grep | awk '{print $2}'` </verb> (为了避免您弄错,上一行中第一个单引号是反向单引号,第二及第三个是单引号, 而最後一个则为反向单引号。) <item>用以下的命令告诉 <tt/init/ 重新读取 <tt/inittab/ 档中的设定: <verb> telinit q </verb> <item>编□ rc.local 档在开机时执行 <tt/powerd/ 。其语法如下: <verb> powerd <line> </verb> 其中,请您自行将 <tt><line></tt> 这个字替换成 modem 所连接的序列阜名,像是 <tt>/dev/cua1</tt>。 <item>将电脑的序列阜与 UPS 的讯号缆线相连。请先不要将电脑的电源直接接到 UPS 上。 <item>将一个光源 (如灯泡) 接到 UPS 上。 <item>执行 <tt/powerd/。 <item>依照以下的步骤进行测试: <itemize> <item>拔掉 UPS 的插头。 <itemize> <item>检查该灯泡是否仍然亮著。 <item>检查 <tt>/etc/powerfailscript</tt> 是否已开始执行。 <item>检查 <tt/shutdown/ 是否正在执行。 </itemize> <item>接回 UPS 的插头。 <itemize> <item>检查该灯泡是否仍然亮著。 <item>检查 <tt>/etc/powerokscript</tt> 是否已开始执行。 <item>检查 <tt>/etc/powerfailscript</tt> 是否已停止执行。 <item>检查 <tt/shutdown/ 是否已停止执行。 </itemize> <item>再次拔掉 UPS 的插头。放著不去管它并确定电脑在一段时间後 可以正常关机。 <item><bf/危险步骤。/ 在所有的步骤看起来都正常之後, 将电脑电源关闭并将电脑的电源接到 UPS 上。请执行一个 script 大约每秒钟做一次 sync 硬碟资料回存的动作,同时也跑另一个 script 持续以 find 指令搜寻整颗硬碟。其中第一个 script 是为了确保安全,而第二个则是助长电力的消耗。现在,将 UPS 的插头拔出,再次检查 <tt/shutdown/ 是否已在运作,并等待一段时间。 确定电脑在 UPS 的电力用完前完全地关机。此一步骤是很危险的, 因为如果 UPS 的电力在电脑完成关机之前先用完了, 您的档案系统将会受损,且您将可能丢失一些档案。 您可能在进行这项测试之前会想要备份您所有的档案, 并将开始关机的时间设短一点以开始这项测试。 </itemize> </itemize> 恭喜您! 您的 Linux 系统现在已在 UPS 的保护下, 且它将会在电力耗尽之前安全地关机了。 <sect1>进一步的改善 <p> <itemize> <item>修改 <tt/powerd.c/ 使它在监视 UPS 的讯号线时能得知电池电力已弱。 当电力微弱时,马上进行紧急关机程序。 <item>修改关机程序使它在 <tt/powerfail/ 情况下关机时, 能够在完成所有工作之後将 UPS 关掉。 </itemize> <sect>硬体的注意事项 <p> <sect1>如何制作讯号缆线<label id="make-cable"> <p> 本节的内容只是些我在网路上看到的资讯。我并没有亲自试过, 所以我无法依我的经验写下来。如果有人有经验,麻烦您为我写这一节 :)。 同时也请您参考 <ref id="gps1000" name="ACCODATA 的 GPS1000"> 中有关 GPS1000 的资料,不必说,<ref id="ups-specific" name="UPS 资料节选"> 这一节中所有特殊 UPS 的资料也是值得参考的。 <verb> >From miquels@caution.cistron.nl.mugnet.org Wed Jul 21 14:26:33 1993 Newsgroups: comp.os.linux Subject: Re: UPS interface for Linux? From: miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) Date: Sat, 17 Jul 93 18:03:37 Distribution: world Organization: Cistron Electronics. In article <1993Jul15.184450.5193@excaliber.uucp> joel@rac1.wam.umd.edu (Joel M. Hoffman) writes: > 我正打算要购买 UPS (不断电系统),我注意到有些具有 LAN 的介面, > 可以在停电时向 LAN 送讯号。 > > 而 Linux 有没有这样的介面呢? > > 谢谢您的回答。 > >-Joel >(joel@wam.umd.edu) > 当我在修改上一版的 SysVinit 时 (现在的版本是 2.4), 那时我的电脑有一个 UPS ,所以我加入了对它的支援。 您也许已在最近的一个 <signal.h> 标头档中看到了 #define SIGPWR 30 这一行 :-)。总之,我并没有那个特殊的介面,但大多数的 UPS 是靠产生或中断一个电源中断讯号在运作的。 我想到一个简单的方式可以将它的讯号线连接到电脑讯列阜的 DCD 接脚。在 SysVinit 套件中有一个叫做 'powerd' 的常驻程式可以追踪并监视该讯号线,当讯号的状态改变时它会送一个 SIGPWR 的讯号给 init 程式,因此 init 便可以采取适当的行动 (像是在 5 分钟之後让系统关机) 。如何将讯号线与 UPS 相连在 "powerd.c" 已有说明,但我还是图示如下以做为解释: +------------------------o DTR | +---+ | | resistor | | 10 kilo-Ohm | | +---+ To serial port. | +-----o-------+------------------------o DCD | | o UPS | \ relais | \ | | | +-----o-------+------------------------o GND 画得还可以吗? 希望这样会有帮助。 SysVinit 可以在 sunsite (或可能在 tsx-11) 下找到,档名是 SysVinit2.4.tar.z 。 Mike. -- Miquel van Smoorenburg, <miquels@cistron.nl.mugnet.org> Ibmio.com: cannot open CONFIG.SYS: file handle broke off. >From danny@caution.cistron.nl.mugnet.org Wed Jul 21 14:27:04 1993 Newsgroups: comp.os.linux Subject: Re: UPS interface for Linux? From: danny@caution.cistron.nl.mugnet.org (Danny ter Haar) Date: Mon, 19 Jul 93 11:02:14 Distribution: world Organization: Cistron Electronics. In article <9307174330@caution.cistron.nl.mugnet.org> miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) writes: > 如何将讯号线与 UPS 相连在 "powerd.c" 已有说明, > 但我还是图示如下以做为解释: 该图示并不十分清楚,请改用以下的图示! > > +------------------------o DTR > | > +---+ > | | resistor > | | 10 kilo-Ohm > | | > +---+ To serial port. > | > +-----o-------+------------------------o DCD > | > o UPS > \ relais > \ > | > +-----o--------------------------------o GND > 其中 DTR 接脚是保持在高电位,则当 UPS 的外界输入电源消失时, 那个开关 (relais) 会关闭。而电脑便是监视 DCD 输入接脚,等著它变成低电位。 当事情发生时它将会启动关机程序 ... _____ Danny -- <=====================================================================> Danny ter Haar <dannyth@hacktic.nl> or <danny@cistron.nl.mugnet.org> Robins law #103: 'a couple of lightyears can't part good friends' </verb> <sect1>讯号缆线反向分析及修改 power.c<label id="hacking"> <p> </article>