跳到主要内容

非正常关机

当 Unraid 检测到 array 没有在系统断电前正确停止时,就会出现不干净关机。这种情况可能会在下次启动时触发自动 parity check 以确保数据完整性。

Recommendations 防止不洁的关闭

采取一些主动的步骤可以帮助你避免或识别非正常关机:

  • **使用不间断电源(UPS):**确保服务器连接到UPS并设置在电池电量不足时自动关闭。
  • **尝试优雅关闭:**如果您的服务器无响应,短按电源按钮以触发安全关闭。不要长按该按钮,因为这将强制硬关机并导致不洁关机。
  • 启用持久日志记录: 前往 设置 → Syslog 服务器 以激活在重启后仍然存在的日志记录。查看 持久日志 (Syslog 服务器) 以了解更多详情。
  • 附加诊断信息以获得支持: 如果发生非正常关机,Unraid 将尝试将诊断信息保存到您的闪存设备的 /log/diagnostics.zip 中。当您寻求帮助时,请将此文件附加到论坛帖子中。
UPS 配置最佳实践

配置良好的 UPS 是防止因掉电导致非正常关机的最佳防卫。

  • 通过 USB 连接 UPS 到 Unraid 服务器。
  • 在设置中启用 UPS 支持。
  • 配置关闭超时: 设置不间断电源(UPS)在电池电量不足前触发自动关闭。调整"剩余电池运行时间"或"电池电量水平"阈值,确保Unraid有足够时间停止array并安全关闭电源。
  • 测试配置: 模拟掉电以确保 UPS 和 Unraid 的正确反应。

了解 NUT 插件,它可以更广泛地兼容更多高级 UPS 型号或未支持的硬件。

配置关机超时​

Properly configuring shutdown timeouts is essential to ensure your Unraid server can stop all services effectively, preventing unclean shutdowns, particularly during power loss or maintenance. Each component of your system - VMs, Docker containers, and the overall array - has its own timeout setting that can be adjusted.

推荐的超时设置​

电源中断是导致非清洁关机的主要原因之一。配置良好的 UPS 可以在电池耗尽前自动关闭 Unraid,从而保护您的系统。

备注

Unraid 支持大多数使用 apcupsd 协议 协议的 UPS 单元(APC 和 CyberPower 通常兼容)。如果您的 UPS 不受支持,建议使用来自社区应用程序的网络 UPS 工具(NUT)插件。

“闪存驱动器故障”​

The array status is stored on your boot device. If the boot device becomes unavailable or enters a read-only state, Unraid cannot update the shutdown status, even if the array stops correctly. This results in an unclean shutdown being detected at the next boot.

打开终端会话​

Unraid 在关闭期间会等待所有打开的终端或 SSH 会话关闭。如果这些会话保持活动状态并且关闭计时器到期,将发生强制关闭。

提示

Dynamix 停止外壳 插件可以自动关闭滞留的 bash 或 SSH 会话,帮助确保优雅关闭。然而,如果有正在进行的写操作到 %%array|阵列%%,请小心。


虚拟机超时时间​

正确配置停机超时时间对于确保您的 Unraid 服务器能有效地停止所有服务至关重要。这能防止不干净的关机,特别是在断电或者维护期间。最重要的步骤是配置你的虚拟机(VMs)进入休眠状态,而不是完全关机。这种方式有助于消除许多与超时相关的问题。

虚拟机休眠设置​

Use 虚拟机休眠

为了获得最可靠和最快速的关机,配置你的虚拟机(VMs)进入休眠状态而不是关机。虽然这对 Windows 虚拟机(VMs)尤为重要,但对所有类型的虚拟机(VM)都有好处。

我们建议使用休眠,因为它:

  • 即时保存虚拟机状态 - 无需等待客户操作系统关闭。
  • 防止数据丢失 - 无需担心更新被中断或未保存的工作丢失风险。
  • 避免超时问题 - 休眠几乎是即时完成的。
  • 更快的恢复 - 虚拟机(VMs)能准确的恢复到上次关闭时的状态。

关机存在的问题在于:

  • Windows 可能会显示对话框("是否保存此文档?"),这会导致关机被无限期中止。
  • Windows 更新可能会在关机过程中耗时 10 分钟以上。
  • 如果超时过期,Unraid 会强制关闭 VM,这可能导致正在进行的 Windows 更新被破坏,未保存的文档、应用程序数据和客户端操作系统中的文件系统遭到破坏。

**关键要求:**确保在 VM 中安装了 QEMU Guest Agent 以使休眠功能正常运行。

要启用虚拟机(VM)休眠:

  1. 下载 QEMU Guest Agent:

  2. 在 Windows 虚拟机(VM)中安装:

    • 将 virtio-win.iso 挂载到您的 VM。
    • 从挂载的 ISO 中运行安装程序。
    • 安装 VirtIO 驱动程序和 QEMU Guest Agent。
    • 重启虚拟机(VM)。
  3. 在 Unraid 中配置:

    • 前往 虚拟机 タブ中的您的虚拟机(VM)设置。
    • 将 关机动作 设置为 休眠。
    • 点击 应用。

现在验证您的休眠功能,启动您的虚拟机(VM)并打开一些应用程序。然后从 Unraid 停止它。当您再次启动它时,它应该恢复到应用程序仍然打开的状态。

Guest 代理是关键

没有安装 QEMU Guest Agent 时,休眠可能无法正常工作。在这种情况下,虚拟机(VM)将退回到关机模式,耗尽整个超时时间。


超时配置​

在本节中,我们将介绍如何为不同的系统和过程配置超时信息。这对确保您的虚拟机(VMs)和 Docker 容器能平滑关闭且无数据丢失至关重要。

设置默认值何时增加配置位置
VM 关机超时60秒如果没有使用休眠且虚拟机崩溃则设置为 300s设置 → 虚拟机管理 → 虚拟机关机(高级)
Docker 容器停止超时时间10秒如果任何容器在停止时崩溃则设置为 30s设置 → Docker(高级)
通用关机超时时间90秒如果出现不干净关机,设置为 180s,与虚拟机一起 300s+设置 → 磁盘设置 → 关机超时
When 增加超时

如果您遇到不干净的关机或容器在关机时崩溃的情况,请考虑将通用关机超时时间增加到 180 秒(如果您有多个 VMs,则为 300+ 秒)。这将为服务提供更多时间来优雅地关闭。

停机顺序​

关机时,过程按以下顺序发生:

  1. 虚拟机(VM)关闭: 这涉及三个阶段,每个阶段可耗尽虚拟机关闭超时:

    • 阶段 1:恢复任何暂停的虚拟机(VMs)
    • 阶段 2:让配置为休眠状态的虚拟机(VMs)进入休眠
    • 阶段 3:关闭任何剩余的虚拟机(VMs)

    每个阶段中的所有虚拟机(VMs)同时进行处理,这意味着总关闭时间可以计算为:虚拟机关闭超时 × 3。

  2. Docker容器同时停止(总时间= Docker超时)。

  3. 其他服务包括LXC容器和第三方插件,通常只需几秒钟。

  4. 阵列关闭:驱动器需卸载并同步数据;这通常需要15-30秒。

Calculate 您的总体关机超时

公式: 您的总体关机超时值应大于:

(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秒)作为备用。


详细配置指南​

本节提供有关不同系统组件的超时配置的深入信息。每个超时设置共同作用以确保您的服务器能平滑关闭且无数据丢失。

虚拟机超时​

在 设置 → 虚拟机管理器 → 虚拟机关机(启用高级视图)中配置虚拟机关机超时。

原理:

  • 虚拟机(VMs)经过三个关闭阶段,每个阶段耗尽虚拟机关闭超时
  • 每个阶段中的所有虚拟机(VMs)同时进行处理
  • 总虚拟机关闭时间 = 虚拟机关闭超时 × 3

常见问题:

  • Windows 更新中断: 关机时的更新可能会在超时截止后损坏。
  • 未保存的工作: 提示用户是否保存文档的对话框可能会导致关机无期限中止。
  • 休眠失败: 在没有 QEMU Guest Agent 的情况下,虚拟机(VMs)可能无法休眠并使用完整的超时时间。
VM 超时建议
  • 主要建议: 配置你的虚拟机(VMs)为休眠状态而不是关机(需要 QEMU Guest Agent)。
  • 如果虚拟机在关机时崩溃: 增加超时至 300 秒(5 分钟) 针对 Windows 虚拟机(VMs)。
  • Windows 更新: 设定 Windows 在启动时执行更新而不是在关机时。
  • 测试您的配置: 手动停止您的VMs以确认它们在超时时间内关闭或休眠。
No 无休眠的安全超时

没有休眠和QEMU Guest Agent,对于Windows VMs,没有真正安全的超时。对话框或正在进行的更新安装可能会使任何超时不足,导致强制关机和数据损坏风险。

Docker 超时​

在 设置 → Docker(启用高级视图)中配置 Docker 容器停止超时。

原理:

  • 容器是并行停止的,因此总时间等于 Docker 停止超时。
  • 大多数容器会在 10 秒内停止,但有些可能需要更长时间。
  • 复杂的容器具有大型数据库或正在进行的操作,可能需要额外时间。
  • 如果定时器到期,容器将被强制停止。
Docker 超时建议
  • 默认的 10 秒 对大多数容器效果良好。
  • 如果容器在停止时崩溃:将超时增加到 30 秒。
  • 在关机期间监控您的容器,以识别需要更多时间的容器。

通用超时​

在 设置 → 磁盘设置 → 关机超时 中配置通用关机超时。

UPS 使用注意事项(最关键因素):

  • 您的UPS必须提供足够的运行时间,以在电池耗尽之前完成完全关机过程。
  • 对于手动关机,您可以设置更长的超时时间,因为您可以控制何时开始关机。
  • 在 停电关机 时,您的超时受限于 UPS 电池寿命。
  • 测试您的UPS,通过模拟停电确保服务器能在电池充分的情况下干净关机。
General 超时建议
  • 如果遇到非干净关机:对于没有虚拟机的系统,将超时增至 180 秒(3 分钟)。
  • 对于有虚拟机的系统:在不使用休眠的情况下使用 300+ 秒(5+ 分钟)。
  • 如果使用休眠:通常 180-300 秒 是足够的。
  • 确保超时不超过您的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”) 中安装它。

When 使用该插件
  • 如果您定期打开终端会话。
  • 为了防止忘记的 SSH 会话延迟关机。
  • 用于关机期间自动清理。
注意
  • 如果您在终端会话中运行脚本或进程,请保持谨慎。
  • 确保在关机前没有正在进行的重要写入操作。
  • 插件会强行关闭会话,这可能会中断工作。