中文 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 �塈鋮魽C 儘管在三年前有人可能無法在一般的 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 來停止任何正在進行的關機動作。這樣比起要我們自行處理這些機制要簡單多了。 儘管這�堣j部分的討論仍假設使用舊的 <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 ,但我不知道他們是如何獲准而做到的。 一個完整的程式運作會跳出一個視窗,�媕Y包含了有趣的度量表, 代表著各式各樣的 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> 這�堛滌Q論是針對單調模式的 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> 檔。 如果�媕Y是 <tt/FAIL/ 這個字眼它會執行 <tt>/etc/inittab</tt> 檔中 <tt/powerfail/ 那一行的指令。如果�媕Y是 <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>