Xen虚拟机的Linux系统时间设置本来没想到会成为问题,但是因为项目中的特殊要求,需要服务器设定为中国标准时间。因此研究了一下。
原来,安装虚拟机后,在虚拟机脚本中的时间设定部分,一般都默认设置为localtime=0,即取物理机的时间为虚拟机的RTC。而物理机一般都把时间设置为北京时间。结果,虚机里的时间总是错的,原来是虚机把物理机的北京时间当作的UTC。所以,虚拟机的时间总是和物理机相差8个小时。当项目对服务器时间要求严格的情况下,不得不认真面对这个问题的时候,只好认真地梳理一下Linux系统的各种时间设定方法。
首先又重新了解一下Linux上面的时间的种类。
Linux上面的时间的种类
Linux上面一般有UTC, CST时间,以及RTC,他们的含义分别是:
GMT(Greenwich Mean Time,格林威治标准时间): 是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。UTC(Universal Time/Temps Cordonné 世界标准时间)
CST(Central Standard Time 國家標準時間,一說中原標準時間); 中国标准时间(China Standard Time)。实际就是北京时间。
GMT + 8 = UTC + 8 = CST ,也就是说中国标准时间比UTC快8个小时。
RTC(Real Time Clock) -- 实时时钟,也叫做CMOS时钟, 它是PC主机板上的一块芯片,它靠电池供电,即使系统断电,也可以维持日期和时间。由于它独立于操作系统,所以也被称为硬件时钟,它为整个计算机提供一个计时标准,是最原始最底层的时钟数据,Linux只用RTC来获得时间和日期;然而,通过作用于/dev/rtc设备文件,也允许进程对RTC编程。通过执行/sbin/clock系统程序,系统管理员可以配置时钟.
在虚拟机中没有物理时钟,因此通过修改clock文件来设定时钟的属性。
设定虚拟机时间
若想达到虚拟机中的时间能够正确地显示为中国标准时间。需要作这些修改:
1.首先修改这个文件的内容:
/etc/sysconfig/clock 设置硬件时钟,
设置为UTC时间
HWCLOCK="--utc"
正确设置时区,如果不知道时区的格式,可以通过tzselect命令工具看到。
TIMEZONE="Asia/Shanghai"
2.设定本地时间为CST,即中国标准时间
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
这样就OK了,虚拟机的时间能够显示为正确的CST时间了。