非正常关机
当 Unraid 检测到 array 没有在系统断电前正确停止时, 就会出现不干净关机。这种情况可能会在下次启动时触发自动 parity check 以确保数据完整性。
采取一些主动的步骤可以帮助你避免或识别非正常关机:
- **使用不间断电源(UPS):**确保服务器连接到UPS并设置在电池电量不足时自动关闭。
- **尝试优雅关闭:**如果您的服务器无响应,短按电源按钮以触发安全关闭。不要长按该按钮,因为这将强制硬关机并导致不洁关机。
- 启用持久日志记录: 前往 设置 → Syslog 服务器 以激活在重启后仍然存在的日志记录。查看 持久日志 (Syslog 服务器) 以了解更多详情。
- 附加诊断信息以获得支持: 如果发生非正常关机,Unraid 将尝试将诊断信息保存到您的闪存设备的
/log/diagnostics.zip中。当您寻求帮助时,请将此文件附加到论坛帖子中。
引发非 正常关闭的事件
了解非正常关闭的主要原因有助于预防。以下部分介绍了最常见的情况及其解决方案。
“意外的电源损失”
Power interruptions are one of the main reasons for unclean shutdowns. Protect your system with a properly configured UPS that can automatically shut down Unraid before the battery runs out.
Unraid 支持大多数使用 apcupsd 协议 协议的 UPS 单元(APC 和 CyberPower 通常兼容)。如果您的 UPS 不受支持,建议使用来自社区应用程序的网络 UPS 工具(NUT)插件。
“闪存驱动器故障”
"array 状态存储在您的 USB 闪存设备上。如果闪存不可用或进入只读状态,Unraid 无法更新关机状态,即使 array 正确停止。这会导致在下次启动时检测出不干净关机。"
打开终端会话
Unraid waits for all open terminal or SSH sessions to close during shutdown. If these sessions remain active and the shutdown timer expires, a forced shutdown occurs.
The Dynamix Stop Shell plugin can automatically close lingering bash or SSH sessions, helping ensure a graceful shutdown. However, be cautious if there are ongoing write operations to the array.
虚拟机超时时间
正确配置停机超时时间对于确保您的 Unraid 服务器能有效地停止所有服务至关重要。这能防止不干净的关机,特别是在断电或者维护期间。最重要的步骤是配置你的虚拟机(VMs)进入休眠状态,而不是完全关机。这种方式有助于消除许多与超时相关的问题。
虚拟机休眠设置
为了获得最可靠和最快速的关机,配置你的虚拟机(VMs)进入休眠状态而不是关机。虽然这对 Windows 虚拟机(VMs)尤为重要,但对所有类型的虚拟机(VM)都有好处。
我们建议使用休眠,因为它:
- 即时保存虚拟机状态 - 无需等待客户操作系统关闭。
- 防止数据丢失 - 无需担心更新被中断或未保存的工作丢失风险。
- 避免超时问题 - 休眠几乎是即时完成的。
- 更快的恢复 - 虚拟机(VMs)能准确的恢复到上次关闭时的状态。
关机存在的问题在于:
- Windows 可能会显示对话框("是否保存此文档?"),这会导致关机被无限期中止。
- Windows 更新可能会在关机过程中耗时 10 分钟以上。
- 如果超时过期,Unraid 会强制关闭 VM,这可能导致正在进行的 Windows 更新被破坏,未保存的文档、应用程序数据和客户端操作系统中的文件系统遭到破坏。
**关键要求:**确保在 VM 中安装了 QEMU Guest Agent 以使休眠功能正常运行。
要启用虚拟机(VM)休眠:
- Windows 虚拟机
- Linux 虚拟机
- 设备虚拟机
-
下载 QEMU Guest Agent:
- 前往 VirtIO 驱动程序下载页面。
- 下载最新的
virtio-win.iso文件。
-
在 Windows 虚拟机(VM)中安装:
- 将
virtio-win.iso挂载到您的 VM。 - 从挂载的 ISO 中运行安装程序。
- 安装 VirtIO 驱动程序和 QEMU Guest Agent。
- 重启虚拟机(VM)。
- 将
-
在 Unraid 中配置:
- 前往 虚拟机 タブ中的您的虚拟机(VM)设置。
- 将 关机动作 设置为 休眠。
- 点击 应用。
- 安装 QEMU Guest Agent:
# Ubuntu/Debian
sudo apt install qemu-guest-agent
# CentOS/RHEL/Fedora
sudo yum install qemu-guest-agent
# or
sudo dnf install qemu-guest-agent
-
启用服务:
sudo systemctl enable qemu-guest-agent
sudo systemctl start qemu-guest-agent -
在 Unraid 中配置:
- 在您的虚拟机(VM)设置中将 关机动作 设置为 休眠。
一些虚拟机(VMs),如 Home Assistant,不允许安装额外的软件。对此类虚拟机:
- 保持 关机动作 设定为 关机。
- 使用较长的超时值 (请参见下文的超时建议)。
- 考虑在更新期间强制关闭这些虚拟机(VMs)的风险。
Appliance VMs are designed to run specific software and often don't allow the installation of additional packages, such as QEMU Guest Agent. This means hibernation isn't available, so you'll need to rely on proper timeout configuration.
现在验证您的休眠功能,启动您的虚拟机(VM)并打开一些应用程序。然后从 Unraid 停止它。当您再次启动它时,它应该恢复到应用程序仍然打开的状态。
没有安装 QEMU Guest Agent 时,休眠可能无法正常工作。在这种情况下,虚拟机(VM)将退回到关机模式,耗尽整个超时时间。
超时配置
在本节中,我们将介绍如何为不同的系统和过程配置超时信息。这对确保您的虚拟机(VMs)和 Docker 容器能平滑关闭且无数据丢失至关重要。
| 设置 | 默认值 | 何时增加 | 配置位置 |
|---|---|---|---|
| VM 关机超时 | 60秒 | 如果没有使用休眠且虚拟机崩溃则设置为 300s | 设置 → 虚拟机管理 → 虚拟机关机(高级) |
| Docker 容器停止超时时间 | 10秒 | 如果任何容器在停止时崩溃则设置为 30s | 设置 → Docker(高级) |
| 通用关机超时时间 | 90秒 | 如果出现不干净关机,设置为 180s,与虚拟机一起 300s+ | 设置 → 磁盘设置 → 关机超时 |
如果您遇到不干净的关机或容器在关机时崩溃的情况,请考虑将通用关机超时时间增加到 180 秒(如果您有多个 VMs,则为 300+ 秒)。这将为服务提供更多时间来优雅地关闭。
停机顺序
关机时,过程按以下顺序发生:
-
虚拟机(VM)关闭: 这涉及三个阶段,每个阶段可耗尽虚拟机关闭超时:
每个阶段中的所有虚拟机(VMs)同时进行处理,这意味着总关闭时间可以计算为:虚拟机关闭超时 × 3。
-
Docker容器同时停止(总时间= Docker超时)。
-
其他服务包括LXC容器和第三方插件,通常只需几秒钟。
-
阵列关闭:驱动器需卸载并同步数据;这通常需要15-30秒。
公式: 您的总体关机超时值应大于:
(VM timeout × 3) + (Docker timeout) + (Other services) + 15-30 seconds
示例: 如果我们按照公式进行,结果如下:(300 × 3) + 30 + 10 + 30 = 970 秒(超过 16 分钟)。
建议: 至少 180 秒(3 分钟) 至少,若您有多个虚拟机(VMs)或复杂的容器则设置为 300+ 秒(5+ 分钟)。
如果所有的VMs设为休眠而不是关机,那么虚拟机超时不那么重要,因为休眠几乎是即时的。您可以为不支持休眠的VMs使用较低的虚拟机超时(例如,60-120秒)作为备用。
详细配置指南
本节提供有关不同系统组件的超时配置的深入信息。每个超时设置共同作用以确保您的服务器能平滑关闭且无数据丢失。
虚拟机超时
在 设置 → 虚拟机管理器 → 虚拟机关机(启用高级视图)中配置虚拟机关机超时。
原理:
常见问题:
- Windows 更新中断: 关机时的更新可能会在超时截止后损坏。
- 未保存的工作: 提示用户是否保存文档的对话框可能会导致关机无期限中止。
- 休眠失败: 在没有 QEMU Guest Agent 的情况下,虚拟机(VMs)可能无法休眠并使用完整的超时时间。
- 主要建议: 配置你的虚拟机(VMs)为休眠状态而不是关机(需要 QEMU Guest Agent)。
- 如果虚拟机在关机时崩溃: 增加超时至 300 秒(5 分钟) 针对 Windows 虚拟机(VMs)。
- Windows 更新: 设定 Windows 在启动时执行更新而不是在关机时。
- 测试您的配置: 手动停止您的VMs以确认它们在超时时间内关闭或休眠。
Without hibernation and QEMU Guest Agent, there isn't a truly safe timeout for Windows VMs. Dialog boxes or ongoing update installations could render any timeout inadequate, leading to forced shutdowns and data corruption risk.
Docker 超时
在 设置 → Docker(启用高级视图)中配置 Docker 容器停止超时。
原理:
- 容器是并行停止的,因此总时间等于 Docker 停止超时。
- 大多数容器会在 10 秒内停止,但有些可能需要更长时间。
- 复杂的容器具有大型数据库或正在进行的操作,可能需要额外时间。
- 如果定时器到期,容器将被强制停止。
- 默认的 10 秒 对大多数容器效果良好。
- 如果容器在停止时崩溃:将超时增加到 30 秒。
- 在关机期间监控您的容器,以识别需要更多时间的容器。
通用超时
在 设置 → 磁盘设置 → 关机超时 中配置通用关机超时。
UPS 使用注意事项(最关键因素):
- 您的UPS必须提供足够的运行时间,以在电池耗尽之前完成完全关机过程。
- 对于手动关机,您可以设置更长的超时时间,因为您可以控制何时开始关机。
- 在 停电关机 时,您的超时受限于 UPS 电池寿命。
- 测试您的UPS,通过模拟停电确保服务器能在电池充分的情况下干净关机。
第三方服务
LXC 容器: LXC 插件有自己的容器停止超时设置。像 Docker 容器一样,LXC 容器通常在几秒钟内停止,但有些可能需要更多时间。检查 LXC 插件设置中的容器停止超时,并将此超时包括在您的通用关机超时计算中。
其他服务: 某些插件或自定义服务可能有自己的关机程序。请参阅插件文档中的特定超时设置,并将其纳入您的计算。
带有第三方服务的更新公式:
(VM timeout × 3) + (Docker timeout) + (LXC/other timeouts) + 15-30 seconds
Dynamix Stop Shell 插件: 如果您经常使用 SSH 或终端会话,打开的会话可能会阻止干净的关机,因为 Unraid 在关闭之前会等待它们关闭。
Dynamix Stop Shell 插件通过在停止阵列时自动关闭剩余的 bash 或 SSH 会话以确保及时关机。
您可以在 Community Applications (搜索“Dynamix Stop Shell”) 中安装它。
- 如果您定期打开终端会话。
- 为了防止忘记的 SSH 会话延迟关机。
- 用于关机期间自动清理。
- 如果您在终端会话中运行脚本或进程,请保持谨慎。
- 确保在关机前没有正在进行的重要写入操作。
- 插件会强行关闭会话,这可能会中断工作。