当我尝试使用笔记本电脑唤醒远程机器(ubuntu 服务器)时,powerwake host01.cluster
我收到一条消息说:
INFO: Trying to wake host: [host01.cluster]
INFO: Sending magic packet to: [xxxxxxxxxxxx]
不幸的是,xxxxxxxxxxxx
MAC 地址不正确,因此无法远程唤醒远程机器。
当我尝试使用 IP 地址(powerwake 192.168.1.101
)时,它也会将魔术包发送到错误的 MAC 地址。
我有以下行/etc/hosts/
192.168.1.101 host01.cluster host01
但是,我可以使用和ssh
进入机器。我假设,我已为静态地址设置(在我的笔记本电脑上)在这里用于解析。ssh host01
ssh host01.cluster
/etc/hosts
当阅读时,man powerwake
它会提供一个层次结构,其中搜索用于解析名称的缓存:
/var/cache/powerwake/ethers
/etc/ethers
- 或 arp 表 (
arp -n
)
在我的笔记本电脑上 ( uname -r
-> 4.2.0-35-generic
),项目符号列表项 1 是空的,2不存在,并且错误的 MAC 地址甚至在arp -n
表中也不存在。
如果我sudo arp-scan -l
在笔记本电脑上运行,错误的 MAC 地址也不会显示在那里。
运行sudo find /var/cache/ -type f -exec grep -il "host01" {} \;
也没有任何结果。
除了 ubuntu/ 以外,MAC 地址还能在哪里缓存powerwake
?
我希望能够清除错误的 MAC 地址,以便可以用来powerwake
远程唤醒这台特定的机器。
sudo ethtool eth0
在远程运行显示 WOL 已启用。
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
答案1
我仔细研究了一下/usr/bin/powerwake
(只是一个 python 脚本),发现了对 的引用"%s/.cache/ethers"
,因此我查看了我的主目录,果然,这个文件存在(cat ~/.cache/ethers
),但它不是 的一部分man powerwake
。
该文件保存了导致问题的 IP 地址 -> MAC 地址映射的错误引用。
解决方案
不管怎样,我删除了该文件~/.cache/ethers
,然后再次“加热”了这个缓存文件。
预热 powerwake 缓存
首先,我检查了我的arp
表(因为我已经将其清除),以查看其中的内容。我想要联系的远程设备均未列出,因此我对ping -c 2 192.168.1.XXX
希望唤醒的每台机器执行了简单操作(远程机器需要处于打开状态并能够 ping 通)。这会将它们加载到 arp 表中(由 确认arp -n
)。
然后我跑了:
powerwake 192.168.1.XXX
每台机器powerwake hostXX
每台机器再次- 这样就可以
~/.cache/ethers
加载与我/etc/hosts
的笔记本电脑上的文件相匹配的每个条目 - 运行
cat ~/.cache/ethers
以确认文件存在并且已填充正确的 IP 地址 -> MAC 映射