让Linux家庭服务器闲置时休眠,并在需求时唤醒 (2023)
Hacker News 摘要原标题:Making a Linux home server sleep on idle and wake on demand (2023)
该网页由丹尼尔·P·格罗斯撰写,介绍了如何让Linux家庭服务器在闲置时自动休眠,并在需要时唤醒。作者在设置家庭服务器以托管Time Machine备份时,面临的挑战是希望服务器在不使用时能够休眠,并在网络请求到来时自动唤醒。
文章分为几个部分,首先提到使用Ubuntu Linux的家庭服务器,想要实现“闲置时休眠,需求时唤醒”这一目标。作者经历了许多挫折,但最终还是找到了一个简单、高效的解决方案。
主要步骤和设置
1. 准备工作:
• 需要一个持续在线的Linux设备(如Raspberry Pi)和一个支持唤醒请求的网络接口设备。
• 在服务器上启用“唤醒”(Wake-on-LAN)功能,并确保它能响应单播数据包。
2. 自动休眠配置:
• 编写一个脚本检查服务器的活动(如登录用户数和AFP连接数),如果都为零,则调用系统休眠命令。
• 使用cron作业定期执行该脚本,自动检测服务器是否闲置。
3. 禁用IPv6:
• 通过更改GRUB配置来禁用IPv6,以确保额外的网络流量不会干扰唤醒功能。
4. 处理网络服务:
• 定义一个systemd服务,在服务器休眠之前停止Netatalk服务,以减少唤醒请求。
5. ARP Stand-in:
• 在Raspberry Pi上实现一个Ruby脚本,使其在服务器休眠时能够响应ARP请求,从而让网络中的其他设备能够找到服务器。
6. mDNS服务:
• 使用Avahi来发布服务器的网络服务,使其在休眠时仍能响应Bonjour(mDNS)请求。
运行效果
• 服务器成功地在闲置时进入休眠状态,并在网络上的请求时可以自动唤醒。
• 通过Raspberry Pi的ARP Stand-in,确保网络中的设备能够正常找到服务器的MAC地址,即使服务器处于休眠状态。
问题解决
在实现过程中,作者面临了一些问题,如服务器很容易被一些不必要的网络活动唤醒。通过使用Wireshark和端口镜像技术,作者找到了导致唤醒的根源,如AFP和NetBIOS的请求,并通过相应的配置解决了这些问题。
最终,作者的解决方案经过了一段时间的验证,稳定运行,成功实现了闲置状态下的自动休眠和需求时的自动唤醒。希望这种方法对其他使用者也能有所帮助。