如何遠程喚醒(WOL)主板爲技嘉(gigabyte)的B85M-D3H的linux主機

     筆者最近鼓搗如何把家裏的linux主機(centos 7)改造成家庭私有云,在外面可以隨時遠程訪問,當中涉及到一個重要環節,就是在主機關機的情況下如何開機,查到有個蒲公英的X1路由器既可以支持VPN旁路,還支持遠程喚醒(WOL)。  遠程喚醒WOL簡稱Wake On Lan, 現在大部分的電腦都支持這個功能,需要在BIOS裏做設置,我的LINUX主機用的是技嘉(gigabyte)的B85M-D3H主板,查了下網上資料說WOL功能默認是開啓的,用自己筆記本里的虛擬機linux的wol命令測試了下,可以用。於是果斷網上下單買了蒲公英X1路由器再加一個5口千兆交換機回來進行改造。

     拿回來的第一天測試發現一個問題,就是遠程喚醒有時候可以,有時候沒有反應,反覆的試驗找規律,折騰了一天無果,把什麼BIOS的設置,LINUX的設置都試過,沒有解決,後來發現如果是手動物理開機後又馬上關機,這個時候可以網絡喚醒,如果是進入到Linux系統後再正常關機後,就怎麼樣也喚醒不了。在網上查了很多資料也沒有解決,就準備要放棄改用智能插座方案的時候,突然想到有可能還是網卡的問題,後來按這個思路並結合一個網上的帖子做實驗,最終找到方法解決了這個問題。

      這個問題的根本原因是因爲網卡是千兆網卡,在linux系統裏默認是自適應模式,當插在千兆口交換機時,如果是關機狀態,可能因爲電源功率問題(千兆需要更高的能耗)而處於關閉狀態,這個可以觀察交換機口上的指示燈是熄滅狀態,所以必須要改成非自適應,直接設成百兆模式,在關機狀態下交換機口上的指示燈是亮着的,網卡能接受到網絡喚醒的消息包。

       那如何能在網絡喚醒時是百兆模式,然後啓動後又切換到自適應呢,然後在關機後又變回百兆模式呢?參考了另外一個帖子使用systemd來進行控制,詳細步驟如下:

   編寫一個腳本用來設置wol和網卡,筆者在/usr/etc/network-scripts下建立一個腳本文件名wakeonlan.sh

    內容如下:

#!/bin/sh

# only usable for root
[ $EUID = 0 ] || exit 4

start() {
   ethtool -s enp2s0 wol g autoneg on
}

stop() {
   ethtool -s enp2s0 wol g autoneg off speed 100 duplex full
}

case "$1" in
        start|stop) "$1" ;;
esac

     添加執行權限

chmod +x wakeonlan.sh

    編寫systemd的service配置文件

    在/etc/systemd/system目錄下編寫一個wakeonlan.service文件,內容如下:

[Unit]
Description=Configure Wake-up on LAN

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/etc/network-scripts/wakeonlan.sh start
ExecStop=/usr/etc/network-scripts/wakeonlan.sh stop

[Install]
WantedBy=basic.target

   創建服務鏈接

systemctl enable wakeonlan.service

  關閉系統,觀察交換機口是否亮燈,是否可以喚醒

   喚醒後,使用命令查看是否切換到千兆自適應模式

sudo ethtool <網卡名>
例如筆者的是enp2s0,則
sudo ethtool enp2s0
輸出結果如下

Settings for enp2s0:
	Supported ports: [ TP MII ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Half 1000baseT/Full 
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Half 1000baseT/Full 
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full 
	                                     100baseT/Half 100baseT/Full 
	                                     1000baseT/Full 
	Link partner advertised pause frame use: Symmetric Receive-only
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Port: MII
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	Supports Wake-on: pumbg
	Wake-on: g
	Current message level: 0x00000033 (51)
			       drv probe ifdown ifup
	Link detected: yes

    可以看到speed爲 1000M

 

參考:

     https://www.linuxunit.com/add-systemd-service-to-start-wake-on-lan/

      https://www.cyberciti.biz/tips/linux-send-wake-on-lan-wol-magic-packets.html

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章