我有运行 Ubuntu 16.04 LTS 和 NextCloud/OwnCloud 的云存储数据中心,这些数据中心不需要全天候可用,也需要电源管理解决方案。服务器是 Dell PowerEdge 1950 Gen II 和 Dell PowerEdge 2950 Gen II
总体目标
让云存储服务器在超过空闲时间(例如 20 分钟)后进入休眠状态,然后使用 WOL 解除休眠,这样每年仅从我们的数据中心就可减少 6272.09 公斤二氧化碳(即 6680kw),这是通过详细的能源审计实现的指标。
已尝试无效的解决方案
景观
景观内部部署/cron 作业仅提供计划启动和关闭,因此对于我们实现的目标无效。
小睡
powernap 似乎是可行的方法,但该服务无法在 Ubuntu 16.04 上启动
XXXXXXX〜$ sudo 服务 powernap 状态 ● powernap.service - PowerNap 已加载:已加载(/lib/systemd/system/powernap.service;已禁用;供应商预设 活跃:不活跃(死亡)
powernap 似乎使用了 network.service 等已弃用的服务,这些服务在 Ubuntu 16.04 中不再可用
可实现的目标
局域网唤醒 (WOL)
启用 WOL 非常简单,只需按照此关联. 或使用电源唤醒
服务器休眠
到目前为止,我只能使用sudo systemctl hibernate
和sudo systemctl hibernate-sleep
- powernap - 我正在提交错误报告以删除耗尽的依赖项
- systemctl - 可能导致某处
- pm-utils - 也可能导致
硬件升级
我已经将 Dell 1950 Gen II 双路 Xeon E5335 的 CPU 升级为 Xeon X5365 CPU。X5365 启用电源管理并从 BIOS 设置电源管理。老实说,我并不赞成这种升级,因为 X5365 比 E5335 每 CPU 消耗多 70 瓦,但这样做是为了休眠测试。
更新 1
目前除了设置网卡pm-utils
之外,这是唯一的出路。目前,我正在探索最佳配置,为空闲时间的交流电设置创建一个强大的钩子。wol
请问有什么建议吗?
答案1
我编写了一个小脚本,您可以每 15 分钟在 cronjob 中运行一次,或者使用 systemd 计时器运行它:
#/bin/bash
NActiveUsers=$(who -q | awk -F'#' '{printf $2}' | awk -F'=' '{printf $2}')
AvgLoad15Min=$(cat /proc/loadavg | awk -F' ' '{print $3}')
ActiveUsersThresh=2
AvgLoadThresh=0.15
if [ "$NActiveUsers" -lt "$ActiveUsersThresh" ]
then
LoadBelowThresh=$(echo $AvgLoad15Min'<'$AvgLoadThresh | bc -l)
if [ "$LoadBelowThresh" -eq 1 ]
then
systemctl hibernate
fi
fi
它首先获取登录系统的用户数和过去 15 分钟内的平均负载。您应该能够使用 找出您的空闲平均系统负载cat /proc/loadavg
。第三个浮点数给出过去 15 分钟的平均值。此值有助于定义变量中设置的阈值AvgLoadThresh
。这当然需要调整。您可以定义的另一件事是允许多少用户登录,系统无论如何都会进入休眠状态。这在 中设置ActiveUsersThresh
。只是为了确保当您进行维护或执行其他操作时系统不会一直处于休眠状态。
我猜有人可以想出更智能的检查,所以将其视为第一种简单的方法。例如,我不知道您的 owncloud 安装中使用了哪个数据库或 Web 服务器,但您可以尝试在 hibernate 命令之前正常停止它们,这样就不会有人突然断开连接。
答案2
要简单地让 Ubuntu <21 休眠,您可以使用 hibernate 命令(sudo apt install hibernate)。其他方法不起作用。从某处偷来的:将 resume=path-to-your-swap 放入 GRUB_CMDLINE_DEFAULT
我使用苹果笔记本电脑测试了这一点。它工作正常。使用 UUID 不起作用 - 有时会发生变化
答案3
当您休眠实例时,Amazon EC2 会向操作系统发出信号以执行休眠 (挂起到磁盘)。休眠会将实例内存 (RAM) 中的内容保存到您的 Amazon Elastic Block Store (Amazon EBS) 根卷。