ipmitool 使用(二)

除了 ipmitool 这种实现,还有 ipmiutil, freeipmi, openipmi 等实现方式,各有利弊,这个是这几种工具的比较。

使用 ipmitool 的过程中发现一个比较奇怪的现象,部分的机器使用 lanplus 的方式会出现下面的 error:
Error: Unable to establish IPMI v2 / RMCP+ session

g 了不少没有个比较好的解释,后来在这个论坛上发现了一个可以运行的方式,将 lanplus 改成 open 的 interface:
# ipmitool -I open power status
注意: 改成 open 之后,只能查询本机的 ipmi 信息,像上面那样,没有必要再输入 ip, user 等信息。

这里是一些错误的总结,虽然对上面那个问题没有什么帮助,留着备用 :-)

上面的那个问题可以加上 -v 参数看到更多的 debug 信息:
# ipmitool -vv -I lanplus -U root -P calvin -H 192.168.1.2 power status

ipmi 有个 sol(serial over lan) 的功能,对于有了远程卡的用户来说,不管是 idrac 还是 openmanager 做的都比这个好很多,因此个人觉得这个功能不是很实用。

下面涉及的都是跟硬件相关的命令。获取各传感器的状态信息:
# ipmitool -I lanplus -H 192.168.1.2 -U root -P calvin sdr
# ipmitool -I lanplus -H 192.168.1.2 -U root -P calvin sensor
# ipmitool -I lanplus -H 192.168.1.2 -U root -P calvin chassis restart_cause

在使用 sdr 或者 sensor 子选项的时候会列出一大堆的硬件的状态信息,这些信息代表的什么意思,可以参考这篇文章的解释。几个要熟知的状态:
ok — okay – the sensor is present and operating correctly
ns — no sensor (corresponding reading will say disabled or Not Readable)
nc — non-critical error regarding the sensor
cr — critical error regarding the sensor
nr — non-recoverable error regarding the sensor

除此之外就是一些 pxe 相关的选项了。
设置从 pxe 启动:
# ipmitool -H 192.168.1.2 -U root -P calvin chassis bootdev pxe
# ipmitool -H 192.168.1.2 -U root -P calvin power reset

以 cold 的方式重置 BMC:
# ipmitool -I lanplus -H 192.168.1.2 -U root -P calvin mc reset cold

最后: ipmitool 可以实现的功能,openmanager 里面的 racadm 都可以实现,所以最终涉及到硬件的监控、系统的关机重启等操作都可以交给 racadm 完成。

关于 NTP 的一些问题

首先是关于时区的问题,经度的零点在 Greenwich,因此就有了 GMT(Greenwich Mean Time) 的概念,GMT 以东的快(+),以西的慢(-),比如大陆就是 GMT+8,也就是比 GMT 快 8 h。GMT 为 0 点的时候,大陆已经早上 8 点了。然后还有个国际日期变更线的问题,这个在太平洋上,也就是精读为 180 的那个线,如果从大陆飞到美国,时间需要减少 1d,相反则需要加 1d。
由于地球自转等原因,GMT 跟实际的时间不是很一样,计算机使用 UTC 来表示『正确』的时间,这两者大概有 16min 的差距。

对于计算机来说,分为软件跟硬件只分,软件的是指系统本身的,从 1970 年 1 月 1 日开始算,date 命令就是计的这个时间:
$ date +%s
1357465568

$ date
Sun Jan  6 17:46:02 CST 2013

硬件的就是 BIOS 上的时钟,这个跟系统上的可能会有时差,可以使用 hwclock 来同步:
# hwclock -r/w

客户端同步服务器有两种方式:
1. 使用 ntpdate 直接同步
2. 安装 ntpd 作为服务器下层的一个 stratum

注意:二者不能同时使用,在启用了 ntpd 的情况下,是不能执行 ntpdate 的,否则会出现下面的错误:
# ntpdate 0.cn.pool.ntp.org
2 Dec 14:27:55 ntpdate[26982]: the NTP socket is in use, exiting

所以,最简单的方式是把 ntpdate 放到 cron 里面去:
*/30 * * * * root (/usr/sbin/ntpdate 192.168.1.1 && /sbin/hwclock -w) &> /dev/null

可以将 debug 以及 verbose 的信息加到 alias 里面去:
alias ntpdate='ntpdate -d -v'

不过,ntpdate 这个命令官方不提倡使用,可以使用 ntpd 替代,可以通过默认的包管理器安装。
有个问题是,ntpd 默认会监听所有的端口,像这样:
# netstat -tunlp | grep ntp
udp        0      0 192.168.10.254:123        0.0.0.0:*                           32266/ntpd
udp        0      0 111.111.111.111:123     0.0.0.0:*                           32266/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           32266/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           32266/ntpd
udp6       0      0 :::123                  :::*                                32266/ntpd

我们明显不希望这样,因此需要指定端口。Ubuntu 10.04 的版本是 4.2.4p8,12.04 的是 4.2.6p3,前者不能在 ntp.conf 里面指定 interface。

Continue reading