如果cfgadm状态断开连接,如何在Solaris中自动检测插入的SATA磁盘?

use*_*391 5 solaris hard-drive hba illumos omnios

我的目标是在结合 SATA 磁盘的小型 OpenSolaris NAS(在 HP Microserver N54L 上运行 OmniOS + napp-it)上自动执行备份程序。

背景:

我安装了其中一个 5.25" -> 3.5" 无托架硬盘托盘,其中包含一个简单的 SATA 或 SAS/SATA 背板,带有一个端口、一个电源按钮和一些 LED(电源和硬盘活动)。为了备份多个 HDD(每周轮换一个,异地存储),我编写了一个脚本,用于zfs send/recv转储完整的主池,包括所有快照(仅更新新块)。当我手动启动它时,这个脚本工作正常。

我想进一步自动化该过程,因为 NAS 没有直接连接 VGA 或串行控制台,插入磁盘、返回桌面系统、登录 Web 界面或 SSH 并手动启动脚本很繁琐. 通过 cron 作业定时启动不是一种选择,因为备份的日期可能略有不同(忘记磁盘、假期等)。所以备份应该在插入磁盘后立即开始。

问题:

在我cfgadm用来连接 + 配置和稍后取消配置 + 断开磁盘的脚本中。如果我只插入磁盘并且它旋转起来,我就无法知道磁盘在那里。我已经考虑过的可能解决方案:

  1. 通过使用cfgadm -f -c connect和检查错误结果,每 x 分钟连续探测新磁盘和 zpool 。不是很优雅。
  2. /var/adm/messages每 x 分钟检查一次并搜索设备路径或 AHCI。不可能,因为只有在手动连接设备时才会写入消息。
  3. 使用iostat -En. 显示磁盘,但我必须 grep 获取确切的序列号,因为它没有列出端口信息。还需要每 x 分钟完成一次。
  4. 使用cfgadmSELECT 语法过滤插座状态。不起作用,因为插入不会触发任何东西(也许背板太便宜了)。
  5. 识别机柜的电源开/关。会好的,但我无法弄清楚如何实现这一点。
  6. 重新映射电源按钮或向机器添加另一个按钮。可以工作,但我也不知道如何做到这一点。

我想我需要两件事:

  • 一种结合识别磁盘和端口状态的可靠方法(因此仅检测到正确插槽中的正确磁盘)
  • 一种注册此检测并触发事件的方法(启动 shell 脚本)

这可能吗?如果没有,您会建议什么作为替代方案?

最终解决方案(2015-01-26 更新):

对于将来遇到类似问题的任何人:

  1. 在 OmniOS 中启用 AHCI 热交换,如 gea接受的答案中所述。
  2. 使用我自己的答案中的syseventadm详细说明在磁盘联机时触发备份脚本。
  3. 确保您的电缆、控制器和磁盘没有故障并且可以很好地协同工作(我在使用 WD SE 4TB 磁盘和板载 AHCI SATA 控制器时遇到问题,导致WARNING: ahci0: ahci_port_reset port 5 the device hardware has been initialized and the power-up diagnostics failed系统日志中出现随机消息)。

小智 3

板载 Sata/AHCI 具有热插拔功能,但默认情况下在 OmniOS 中禁用此功能:要启用,请将以下行添加到 /etc/system

设置SATA:sata_auto_online = 1