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 确认槽位占用情况,避免覆盖已有账号。密码字段在命令行中出现会留下历史记录,生产脚本应从受保护的凭据文件读取,而不是硬编码在脚本里。
编写批量配置脚本
批量脚本的核心结构是“读取主机清单 → 逐台执行 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 确认。
结果判断与常见问题
批量配置完成后,应形成一份可复查的结果记录:每台主机的 IP、执行的参数、目标值、回读值、是否一致、是否需要重启。若某台服务器回读失败,优先排查三类原因:一是管理网络不通或 iDRAC 未就绪;二是账号权限不足,普通用户可能无权修改 iDRAC 网络或用户配置;三是参数名或槽位错误,例如把 iDRAC.Users.3 写成了不存在的槽位。把这些判断条件固化进脚本的日志输出,批量运维才能从“执行了命令”变成“确认了结果”。