經歷硬碟掛點,決定改變電腦使用習慣,防止悲劇重演。
學到一個教訓-非企業級硬碟只是一般兵,經不起7x24小時兩棲偵營魔鬼操練,有提早升天的風險!改善之道很簡單:只要由7x24待命責任制回歸5x8下班打卡制,就能有效延長硬碟乃至整台機器的使用壽命,另一方面還兼顧省電環保。
原本機器不關機是工作需要,方便從家裡走VPN連回公司機器遠端桌面處理,同時有些私有排程或服務也放在自己機器上跑。排程及服務可以重新評估規劃,集中到少數機器,大部分個人主機下班時便可睡眠或休眠,需要遠端連線時再開起來,這倒也不難,打電話給家離公司最近的同事,要他馬上衝去辦公室幫忙開機不就好了~ 喂!不要這樣陷害同事啦,有更高級的做法-網路喚醒(Wake On LAN,WOL)。在軟硬體支援的前題下,電腦在休眠(Hibernation)或睡眠(Sleep)期間,網路卡仍能接收及解讀封包,當接收特定內容封包(稱為Magic Paket,內含該網卡的MAC地址)就會叫醒電腦。透過WOL技術,即能達成「下班先休眠,需要連線再開」的目標。
原本工作機安裝Windows 2008 R2,啟用Hyper-V後得動點手腳才能休眠。趁著硬碟故障重灌,索性改換Windows 8.1,更符合其開發者客戶端性質,真需要伺服器,再跑Hyper-V VM模擬。
Windows要設定WOL,第一步得啟用網卡的WOL功能,如下圖由網卡內容找到「允許這個裝置喚醒電腦」及「只允許Magic封包喚醒電腦」選項勾選起來,一般多會限定Magic封包(封包內需包含該網卡MAC地址),以免意外被無關封包喚醒。
接著,我們需要網卡IP及MAC地址以便產生Magic封包,可透過ipconfig /all取得。
Windows 8及8.1要啟用WOL,還有一個額外步驟:停用快速啟動,理由是快速啟動會讓系統進入Hybrid Shutdown狀態(S4),而WOL功能只支援從Sleep狀態(S3)或Hibernation狀態(S4)被喚醒。如下圖所示,要使用WOL記得要在電源選項取消快速啟動。
最後一步是取得發送WOL Magic封包的軟體,WOL Magic Packet Sender是個介面簡潔易用的小程式,更重要的是,它是用.NET寫的, 二話不說,非它莫屬了。
輸入IP、MAC地址,按下送出鈕,程式會送出一個六個Byte 0xff外加MAC地址重複16次,共102個Byte的封包到指定IP。若此封包能順利送抵睡眠中的電腦,即可將其喚醒。而如何能將封包送達目的地,便是WOL成敗所在,公司的網路環境有些複雜,花了點功夫摸索外加溫習了當年考MCSE所學的Network Essentials,大略摸出輪廓,細節留待後面再提。先回到WOL軟體,我們可以在目標機器也執行該軟體的Receive功能進行測試,發送端按下送出鈕後,接收端應跳出訊息顯示MAC網址,代表發送成功。接著實測,讓目標電腦睡眠,在同一網段(Subnet,在本例中即為192.168.1.*的其他電腦)送出WOL封包,機器果然成功被喚醒。
不過,多做一些測試後發現結果不如預期:
- 目標機器為192.168.1.91,睡眠後由192.168.1.90送出Magic封包至192.168.1.91可將其喚醒,但等待一段時間後再送封包卻無效。
- 由另一個網段192.168.2.1送出Magic封包,192.168.1.91開機用軟體Receive功能測試OK,睡眠後隨即傳送可喚醒,但等待一段時間後喚醒功能亦會失效。
- 將發送目標IP改為192.168.1.255,睡眠後不管多久,都可順利喚醒。
由以上結果,推敲與網路交換器(Switch)特性有關,192.168.1.91在開機期間有網路活動,Switch會記錄並保留192.168.1.91對應MAC地址及實體插孔資料,當有傳給1.91的封包,Switch才知道要往哪個實體插孔傳送。機器睡眠後不再傳送封包,經一段時間後Switch認定該MAC所屬機器離線,便不再傳送給91的封包到該實體線路上。這可解釋剛關機時可喚醒,一段時間後Switch資料更新,便無法再用Magic封包喚醒主機。第三項實驗將目標IP設為192.168.1.255,末碼255會使Switch對全網段廣播,以MAC地址ff-ff-ff-ff-ff-ff送出封包,該網段所有網卡都會看到,睡眠電腦由封包內容識別出自己的MAC地址,就能被喚醒。
因此,WOL最容易實現的情境是在同一網段下以廣播方式(IP用*.*.*.255)傳送Magic封包。想跨網段傳送,需Switch或路由器配合,例如:設定一靜態IP 192.168.1.253 MAC定為ff-ff-ff-ff-ff-ff[參考],傳送Magic封包時將目標IP設為192.168.1.253,即可達到廣播效果。VPN連到主機是跨網段無誤,但公司Switch不在掌控範圍內,此路不通,最後只能繞路解決,不過這又是另一段故事了…