3. 使用RACADM批量配置BIOS与iDRAC设置

当服务器数量从几台增长到几十台甚至上百台时,逐台登录 iDRAC Web 界面点击配置的方式会迅速成为瓶颈。RACADM(Remote Access Controller Admin)是 Dell 提供的命令行管理工具,它既能通过本地操作系统直接访问本机 iDRAC,也能从一台管理机远程连接多台服务器的 iDRAC,是批量配置 BIOS 与 iDRAC 参数的核心手段。本节围绕 RACADM 的本地与远程用法、set/get 命令的参数读写机制,以及如何用脚本对多台服务器执行相同配置展开。

本地与远程两种连接方式

RACADM 有两种基本工作模式。本地模式在服务器操作系统内执行,命令直接与本地 iDRAC 通信,无需网络凭据,典型形式是 racadm get BIOS.BootSeq。远程模式在管理机上执行,通过 -r 指定目标 iDRAC 的 IP 或主机名,用 -u 和 -p 提供账号密码,例如 racadm -r 192.168.10.21 -u root -p calvin get iDRAC.Info。批量场景几乎都使用远程模式,因为管理机可以集中发起连接,而无需登录每台服务器。

需要特别注意的是,远程模式默认使用 HTTPS 访问 iDRAC,若目标 iDRAC 使用自签名证书,首次连接可能提示证书不受信任。生产环境中应统一导入受信任证书,或在受控脚本中明确处理该提示,而不是长期依赖跳过校验。此外,远程操作要求 iDRAC 已启用 IPMI/Redfish 相关服务并具备可用的管理网络连通性。

用 get 读取当前配置

批量修改前必须先读取现状,否则无法判断哪些参数需要变更、变更后是否生效。RACADM 的配置对象以“组.对象”形式组织,例如 BIOS 启动顺序属于 BIOS.BootSeq,iDRAC 用户属于 iDRAC.Users,网络属于 iDRAC.IPv4,NTP 属于 iDRAC.NTPConfigGroup,SNMP 属于 iDRAC.SNMP。读取单个参数用 get,读取整组参数用 get 加组名,例如:

racadm -r 192.168.10.21 -u root -p calvin get BIOS.BootSeq
racadm -r 192.168.10.21 -u root -p calvin get iDRAC.Users
racadm -r 192.168.10.21 -u root -p calvin get iDRAC.NTPConfigGroup

输出会以“对象=值”的形式列出当前配置。批量巡检时,可以把多台服务器的 get 结果重定向到文件,再用文本比对找出配置漂移的机器。例如将 get BIOS.BootSeq 的输出保存为 bootseq_192.168.10.21.txt,逐台对比即可发现某台服务器是否仍保留着出厂启动顺序。

用 set 写入配置

写入使用 set,语法为 racadm set 组.对象 值。BIOS 参数与 iDRAC 参数有一个关键差异:iDRAC 参数通常立即生效,而 BIOS 参数大多需要重启服务器才能应用。因此批量修改 BIOS 启动顺序时,必须规划好重启窗口,或使用 --nocreate 等选项控制作业行为。

以设置启动顺序为例,假设希望服务器优先从硬盘启动,其次为光驱,最后为 PXE:

racadm -r 192.168.10.21 -u root -p calvin set BIOS.BootSeq HardDrive.1,Optical.1,NIC.1
racadm -r 192.168.10.21 -u root -p calvin jobqueue create BIOS.Setup.1-1

第一条命令写入启动顺序,第二条通过作业队列触发 BIOS 配置在下次重启时应用。iDRAC 用户、网络、NTP、SNMP 等参数则可以直接 set 并即时生效,例如:

racadm -r 192.168.10.21 -u root -p calvin set iDRAC.Users.3.UserName opsadmin
racadm -r 192.168.10.21 -u root -p calvin set iDRAC.Users.3.Password NewPassw0rd!
racadm -r 192.168.10.21 -u root -p calvin set iDRAC.IPv4.Address 192.168.10.21
racadm -r 192.168.10.21 -u root -p calvin set iDRAC.NTPConfigGroup.NTP1 192.168.10.5
racadm -r 192.168.10.21 -u root -p calvin set iDRAC.SNMP.AgentEnable Enabled

这里 iDRAC.Users.3 表示第 3 个 iDRAC 用户槽位,实际环境中应先 get iDRAC.Users 确认槽位占用情况,避免覆盖已有账号。密码字段在命令行中出现会留下历史记录,生产脚本应从受保护的凭据文件读取,而不是硬编码在脚本里。

RACADM 批量配置数据流与参数分组 管理机 racadm -r 远程调用 凭据文件 / 主机清单 iDRAC 管理网络 HTTPS / Redfish 192.168.10.0/24 目标服务器 iDRAC .21 / .22 / .23 … 每台独立执行 set/get 参数分组(get 读取现状 → set 写入目标值) BIOS BootSeq 启动顺序 需重启生效 iDRAC 用户 Users.3 账号密码 即时生效 网络 IPv4 地址/网关 即时生效 NTP NTP1/NTP2 时间同步 SNMP AgentEnable 告警上报 批量脚本执行链 读取主机清单 hosts.txt 逐台 get 巡检 记录当前值 逐台 set 写入 目标参数 回读校验 get 对比目标值 结果 日志

编写批量配置脚本

批量脚本的核心结构是“读取主机清单 → 逐台执行 get 巡检 → 逐台执行 set 写入 → 回读校验”。下面是一个 Bash 示例,主机清单 hosts.txt 每行一个 iDRAC IP,凭据从环境变量读取:

#!/bin/bash
USER="root"
PASS="${IDRAC_PASS}"
NTP1="192.168.10.5"
SNMP_ENABLE="Enabled"

while read -r IP; do
  [ -z "$IP" ] && continue
  echo "=== $IP ==="
  racadm -r "$IP" -u "$USER" -p "$PASS" set iDRAC.NTPConfigGroup.NTP1 "$NTP1"
  racadm -r "$IP" -u "$USER" -p "$PASS" set iDRAC.SNMP.AgentEnable "$SNMP_ENABLE"
  racadm -r "$IP" -u "$USER" -p "$PASS" get iDRAC.NTPConfigGroup.NTP1
  racadm -r "$IP" -u "$USER" -p "$PASS" get iDRAC.SNMP.AgentEnable
done < hosts.txt

脚本执行后,每台服务器都会输出 set 后的回读值。判断是否成功的方法很直接:回读值与目标值一致即视为写入成功;若出现 ERROR 或值未变化,则需检查网络连通性、账号权限、参数名拼写以及该参数是否被其他配置锁定。对于 BIOS 启动顺序这类需要重启的参数,回读只能确认“已写入待应用”,真正生效要在重启后再次 get 确认。

批量操作前建议先对一台服务器完整执行一遍 get 巡检并保存基线,确认参数名和槽位无误后再扩展到全部主机。脚本中应加入超时控制,避免某台 iDRAC 无响应导致整个批次卡住。
iDRAC 用户密码、SNMP 团体名等敏感信息不要明文写入脚本或命令行历史。推荐使用环境变量、受权限保护的凭据文件,或结合 iDRAC 的 Redfish 接口做更安全的凭据管理。批量修改网络参数时尤其要谨慎,错误的 IP 或网关可能导致 iDRAC 失联,需要现场通过 KVM 或前面板恢复。

结果判断与常见问题

批量配置完成后,应形成一份可复查的结果记录:每台主机的 IP、执行的参数、目标值、回读值、是否一致、是否需要重启。若某台服务器回读失败,优先排查三类原因:一是管理网络不通或 iDRAC 未就绪;二是账号权限不足,普通用户可能无权修改 iDRAC 网络或用户配置;三是参数名或槽位错误,例如把 iDRAC.Users.3 写成了不存在的槽位。把这些判断条件固化进脚本的日志输出,批量运维才能从“执行了命令”变成“确认了结果”。