[[PageOutline]] {{{ #!html

E2Switch in DRBL

}}} ---- = 【1.基本概念】 = == 【1.1 ACPI】 == * ACPI(Advanced Configuration and Power Interface)。這種電源管理可以通過如軟體控制"開關"系統,亦可以用硬體信號喚醒和關閉系統。ACPI規格定義了幾種狀態:1.Golbal 狀態 2.System 狀態 3.Device 狀態 4.Processor 狀態 5.performance 狀態。下圖是比較常用的 Global 和 System 的狀態圖: [[Image(ACPI.png,width=650px)]] * G0/S0:正常 * G1:睡眠 (可細分為以下四種,以Resume速度由快到慢來排序) * S1:設備全部停止供電,僅有 CPU 和 Ram 供電 * S2:CPU 不供電 (此模式較少被使用) * S3:除了記憶體以外的配件都停止工作,即使是風扇也不會轉動 (window稱為睡眠/sleep,Linux稱為待機/standby) * S4:記憶體資料寫入硬碟,所有配件停止工作。就是把記憶體中的資料完整的存在硬碟中。等開機時就直接從硬碟讀到記憶體,因為不需像開機一樣執行一堆應用程式,因此速度比正常開機要快許多 (windows稱為休眠/hibernate,Liunx一樣稱為休眠) * G2/S5:正常關機,只持續供電給一些具喚醒功效的裝置外其餘部分一律斷電,而具喚醒功效的裝置包括鍵盤、滑鼠、網卡、USB埠等。要提醒的是,由於部分機內組件、機外裝置仍持續受到供電,所以各裝置、組件在此狀態下不能進行拆裝插拔等動作,若強行插拔就會破壞狀態,即進入了G3狀態 * G3:一切都斷電,沒有維持任何電能,一般來說除非是要搬移或拆裝電腦,或者是遭遇停電且沒有安裝不斷電系統 == 【1.2 Linux Hibernate Procedure】 == ---- = 【2.休眠指令】 = == 【2.1 Windsows 休眠】 == * 休眠指令 {{{ /*** 開啟可休眠模式 ***/ $ powercfg /hibernate on /*** 休眠指令 ***/ $ rundll32.exe powrprof.dll,SetSuspendState Hibernate }}} * 如何 WOL 休眠中的電腦,透過以下指令來開啟網卡 wake on {{{ $ devmgmt.msc }}} [[Image(NIC_PowerM.PNG,width=350px)]] == 【2.2 Linux 休眠】 == * 法一:直接修改系統參數 {{{ # echo 4 > /proc/acpi/sleep /** 適用 Kernel 2.4 **/ # echo disk > /sys/power/state /** 適用 Kernel 2.4 & 2.6 **/ }}} * 法二:透過高階指令 {{{ $ sudo pm-hibernate /** 使用 pm-utils **/ $ sudo acpitool -S /** 使用 acpitool **/ $ sudo hibernate-disk /** 使用 hibernate & usesusp **/ }}} * 如何 WOL 休眠中的電腦 {{{ $ sudo su /*** 確定 eth0 可以支持 WOL ***/ # ethtool -s eth0 wol g /*** 設定休眠時可wake on 的設備,本範例的網卡 device 是 GBEC ***/ # echo GBEC > /proc/acpi/wakeup # grep GBEC /proc/acpi/wakeup GBEC S4 enabled pci:0000:00:19.0 }}} == 【2.3 DRBL Diskless Linux 休眠】 == * 問題一:write error: No such device {{{ # echo 4 > /proc/acpi/sleep -bash: echo: write error: No such device }}} >> 已解決:必須使用 Swap 來作為寫入當前 Ram 和系統狀態 的資訊 (DRBL node 預設 Swap 為 128MB,須改成 521MB,或是直接分割 sdaX 作為 DRBL node 專屬的 Swap) * 問題二:Diskless linux 可正常休眠,但重開機後卻無法 resume 到原來的狀態 * DRBL Server 可以休眠(suspend & Resume),但DRBL Diskless 卻只能完成一半休眠(suspend 成功,resume失敗),猜測可能是 DRBL initrd 的過程少了 resume 的機制 >>Trace Debian initrd & DRBL initrd:[[BR]] >>(1)檔案內容少了 /etc/uswsusp.conf、/bin/resume、/conf/conf.d/{resume/uswsusp}[[BR]] >>(2)init 中少了 resume 的資訊[[BR]] >>(3)少了 scripts/[[BR]] >>正常的 Debuan initrd 的 init 會有一個機制(local-premount) 會檢查系統之前是否為 suspend 狀態,若是的話則 Resume 回來 * How to patch DRBL to support Hibernate * 於 mkpxeinitrd-net 修改: 1. init -> 增加 resume 的設定 2. 新增 scripts/{functions|init-bottom|init-premount|init-top|local|local-premount|local-top|nfs} ---- = 【2.測試】 = == 【2.1 Linux測試】 == ||測試一 ||echo 3 > /proc/acpi/sleep ||狀態存到記憶體,按下Power回到剛剛的工作狀態 || ||測試二 ||echo 4 > /proc/acpi/sleep ||狀態存到HD,按下Power會重新開機(1)BIOS -> (2)載入Kernel & Ramdisk -> (3)回到剛剛的工作狀態[[BR]]★開機過程少了 initd 那一段過程[[BR]]★使用此方式之後,無法使用WOL喚醒,等到正常程序關機之後才可以WOL(部份主板只支援從S5模式中喚醒(Wake On LAN from S5),因為休眠是S4,須找尋其它方案來讓S4狀態下喚醒)[[BR]]|| * 根據測試結果,若本機 local OS 為Linux,可先讓本機系統到 S4 狀態,再按下Power鍵,(1)BIOS -> (2)選擇網路開機 -> (3)進入 DRBL Client mode。理論上是行的通的,但凡事都有例外@@ [[BR]] == 【2.2 Windows 測試】 == * 測試結果如同 Linux 的 Case2 步驟 [[BR]] == 【2.3 DRBL 環境上實際測試】 == || '''''案例''''' || '''''情境''''' || '''''測試結果''''' || || Case 1||★Local OS(Ubuntu) & DRBL Client(Diskless Debian lenny AMD64)[[BR]]★當local OS休眠後,重先開機進入 DRBL Client,再重新開機回到 local OS休眠前的狀態 || O || || Case 2||★Local OS(Windows XP) & DRBL Client(Diskless Debian lenny AMD64)[[BR]]★當local OS休眠後,重先開機進入 DRBL Client,再重新開機回到 local OS休眠前的狀態 || O || || Case 3||★Local OS(Windows XP) & DRBL Client(Diskless Debian lenny AMD64)[[BR]]★當local OS休眠後,重先開機進入 DRBL Client 並休眠,再重新開機回到 local OS休眠前的狀態,再重新開機回到 DRBL Client 休眠前的狀態 || 測試中 || ---- = 【3.想法&問題】 = * Dual booting & Hibernate 在 DRBL 環境上的優點呢? (目前能想到的) 1. 減少開機時間 (程式初使化那一段時間) 2. 馬上回到先前的工作狀態 (先前的 Porcess 能繼續執行) * Debian 官方的 xen kernel 不支援 hibernate (或許可重 build kernel來支持!?) ---- = 【參考】 = * ACPI 相關 * [http://blog.yam.com/hongwatsu/article/9067839 ACPI,APM電源管理] * [http://blog.pmail.idv.tw/index.php?load=read&id=84 電源管理模式 APM 與 ACPI] * Linux 休眠相關 * [http://wiki.ubuntu.org.cn/index.php?title=UbuntuWiki:UnderstandingSuspend&variant=zh-hant UnderstandingSuspend] * [http://www.linux.com/archive/feed/54610 How to suspend and hibernate a laptop under Linux] * [http://www.thinkwiki.org/wiki/Talk:How_to_make_ACPI_work Talk:How to make ACPI work] * Windows 休眠相關 * [http://support.microsoft.com/kb/907477 如何疑難排解 Windows XP 中的休眠和待命問題] * [http://www.intowindows.com/how-to-enable-hibernate-option-in-windows-7/ How To: Enable Hibernate Option In Windows 7] * [http://digg.com/linux_unix/HOW_TO_dual_boot_Linux_Windows_without_rebooting HOW TO: dual-boot Linux/Windows without rebooting] * [http://www.real-knowledge.com/hibernate.htm How To Turn Off The Windows Hibernation Feature] * Wake On Lan 相關 * [http://winhlp.com/node/57 Wake On LAN] * [http://bbs.archlinux.org/viewtopic.php?id=43191 wake on lan, uswsusp and 8139too] [[BR]]