linux下的硬件时钟存储的时间是UTC时间还是用户设定的时区时间(比如说北京时间)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下的硬件时钟存储的时间是UTC时间还是用户设定的时区时间(比如说北京时间)?相关的知识,希望对你有一定的参考价值。

这个取决于你安装时候的设置。默认存储的是UTC时间。如果你在安装时候有册数设置,则存储的是GTM(本地)时间。

你用户显示的是你上面设置的时间+你所设置的时区的偏移量。

假设你主板存储的是UTC+0 。你用户设置时区为+8(中国)。
你主板存储的时间为0点,则你用户看到的是8点。

当你使用windows和Linux多系统的时候,建议你设置成GTM时间。如果你整台电脑只装Linux,建议你设置UTC时间。
参考技术A 貌似大部分 Linux 安装时都有设置。 参考技术B 默认设置下,一定是UTC时间

Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步

目录

基础认识

常用命令

查看和修改Linux的时区

timedatectl

时钟同步

用硬件时钟同步系统时钟:

用系统时钟同步硬件时钟:

同步网络时间

查看和修改Linux的时间

时钟--详解

硬件时钟

系统时钟

时间同步

时间标准

网络时间

ntp时钟同步服务

chrony时钟同步服务

备注

ntp常用服务器


 

 

基础认识

操作系统的时间(时钟)由以下4个部分决定:

  • 时间数值
  • 时间标准(本地时间/UTC/其他)
  • 时区
  • 夏令时(DST,Daylight Saving Time,部分适用,中国已经废止)

操作系统有两个时钟,分别是硬件时钟和系统时钟,大多数操作系统的时钟管理方式如下:

  • 启动时根据硬件时钟设置系统时钟
  • 维护准确的系统时钟
  • 关机时根据系统时钟设置硬件时钟

常用命令

查看和修改Linux的时区

1. 查看当前时区
命令 : "date -R"

2. 修改设置Linux服务器时区

timedatectl set-timezone Asia/Shanghai

timedatectl

[root@localhost ~]# timedatectl --help
timedatectl [OPTIONS...] COMMAND ...
 
Query or change system time and date settings.
 
  -h --help                Show this help message
     --version             Show package version
     --no-pager            Do not pipe output into a pager
     --no-ask-password     Do not prompt for password
  -H --host=[USER@]HOST    Operate on remote host
  -M --machine=CONTAINER   Operate on local container
     --adjust-system-clock Adjust system clock when changing local RTC mode
     --monitor             Monitor status of systemd-timesyncd
  -p --property=NAME       Show only properties by this name
  -a --all                 Show all properties, including empty ones
     --value               When showing properties, only print the value
 
Commands:
  status                   Show current time settings
  show                     Show properties of systemd-timedated
  set-time TIME            Set system time
  set-timezone ZONE        Set system time zone
  list-timezones           Show known time zones
  set-local-rtc BOOL       Control whether RTC is in local time
  set-ntp BOOL             Enable or disable network time synchronization
 
systemd-timesyncd Commands:
  timesync-status          Show status of systemd-timesyncd
  show-timesync            Show properties of systemd-timesyncd

  list-timezones 列出系统上支持的时区
set-timezone 设定时区
set-time 设置时间
set-btp 设置同步ntp

时钟同步

用硬件时钟同步系统时钟:

hwclock --hctosys 或者 clock --hctosys

hc代表硬件时间,sys代表系统时间,即用硬件时钟同步系统时钟

用系统时钟同步硬件时钟:

hwclock --systohc或者clock --systohc

即用系统时钟同步硬件时钟

同步网络时间

同步互联网时间

ntpdate -u cn.pool.ntp.org

查看和修改Linux的时间

1. 查看时间和日期
命令 : "date"

2.设置时间和日期
例如:将系统日期设定成2009年11月3日的命令

命令 : "date -s 11/03/2009"

将系统时间设定成下午5点55分55秒的命令

命令 : "date -s 17:55:55"

3. 将当前时间和日期写入BIOS,避免重启后失效
命令 : "hwclock -w"

时钟--详解

硬件时钟

硬件时钟,又称实时时钟(Real Time Clock,RTC)或CMOS时钟,是独立的硬件设备(电池、电容元件等),保存的时间包括年、月、日、时、分、秒。2016年之后的UEFI固件还能保存时区和是否使用夏令时。

操作硬件时钟的工具是hwclock,用于查询、设置硬件时钟等。

读取硬件时钟:

 hwclock --show

使用系统时钟设置硬件时钟:

hwclock --systohc

更新硬件时钟后,/etc/adjtime随之更新。

系统时钟

系统时钟,又称软件时钟,是Linux内核的一部分,包括时间、时区、夏令时(如果适用)。

系统启动时,系统时钟的初始值根据硬件时钟设定(依赖于/etc/adjtime);

系统启动后,Linux内核利用定时器中断维护系统时钟 ,与硬件时钟无关。

操作系统时钟的工具是timedatectl,用于查询/设置时间、设置时区、设置时间同步等。

查询时钟,其中包括本地时间、UTC时间、RTC时间、时区、系统时钟同步状态、NTP服务状态、RTC是否使用本地时间:

# timedatectl
               Local time: Tue 2020-06-02 18:08:06 CST
           Universal time: Tue 2020-06-02 10:08:06 UTC
                 RTC time: Tue 2020-06-02 10:08:06    
                Time zone: Asia/Shanghai (CST, +0800) 
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: no 

设置时钟,时间格式是yyyy-MM-dd hh:mm:ss

# timedatectl set-time "2020-06-02 17:30:00"
# timedatectl
               Local time: Tue 2020-06-02 17:30:05 CST
           Universal time: Tue 2020-06-02 09:30:05 UTC
                 RTC time: Tue 2020-06-02 09:30:05    
                Time zone: Asia/Shanghai (CST, +0800) 
System clock synchronized: no                         
              NTP service: inactive                   
          RTC in local TZ: no  

时间字符串为本地时间,执行命令后,本地时间、UTC时间、RTC时间会同时更新。

开启时间同步:

timedatectl set-ntp 1

时间同步

可以使用ntpd -qg命令同步时间。

另外,Linux系统自带ntpd.service,可以使用systemctl start ntpd命令启动NTP服务。

需要注意的是,ntpd命令或服务仅更新本地时间和UTC时间,不更新RTC时间。 可以设置一个过去的时间,然后执行ntpd命令校准时间,再执行timedatectl命令查询验证。

不过这并不是什么大问题,因为关机时操作系统会根据系统时钟重设硬件时钟,下次启动时,二者恢复一致。

时间标准

两种时间标准:

  • 本地时间(时区相关)
  • UTC时间(时区无关)

硬件时钟所采用的时间标准是由操作系统决定的,默认情况下,Windows使用本地时间,macOS使用UTC时间,类Unix系统则各有不同。

使用UTC时间标准的操作系统通常把硬件时钟视为UTC,然后在启动时根据时区进行调整设置系统时间。

如果一台机器上安装了多个操作系统,它们都使用硬件时钟设置系统时间,建议采用统一的UTC时间标准,避免切换系统时发生时间错乱。

网络时间

ntpdate命令用于同步更新互联网时间,或者NTP服务器时间

NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间..

ntp时钟同步服务

centos7以上版本对如下命令已经不能用:

yum install ntp
# 报如下错,
Error: Unable to find a match
# 使用如下方法 安装ntp服务
# 添加源
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
# 安装ntp服务
dnf  install wntp
# 时间同步
ntpdate ntp1.aliyun.com

chrony时钟同步服务

适用于centos7以上版本

chrony是网络时间协议(NTP)的通用实现。它可以将系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘进行的手动输入进行同步。它还可以充当NTPv4(RFC 5905)服务器并与之同行,以向网络中的其他计算机提供时间服务。


它被设计为在各种条件下均能良好运行,包括间歇性网络连接,网络严重拥塞,温度变化(普通计算机时钟对温度敏感)以及无法连续运行或在虚拟机上运行的系统。


通过Internet同步的两台计算机之间的典型精度在几毫秒内;在LAN上,精度通常为数十微秒。使用硬件时间戳记或硬件参考时钟,亚微秒精度是可能的。


chrony包括两个程序,

  • chronyd一个是守护程序,可以在引导时启动,
  • chronyc另一个是命令行界面程序,可以用来监视其chronyd性能并在运行时更改各种操作参数。

目前centos7已经默认安装chrony3.2作为时钟服务。

安装chronyd服务

# 操作主机:所有主机
yum -y install chrony

#   备份旧配置文件
cp /etc/chrony.conf /etc/chrony.$(date +'%s')

 配置chronyd服务器

# 操作主机:chronyd服务器 

#  修改服务器配置⽂件,以阿⾥云时间服务器为上游服务器
cat > /etc/chrony.conf <<_EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
local stratum 10
logdir /var/log/chrony
_EOF

 启动chrony服务

# 3. 启动chronyd
systemctl start chronyd
systemctl enable chronyd

检查阿里云时钟服务状态

[root@localhost bigunion]# chronyc sources
210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 120.25.115.20                 2  10   367   410  +2787us[+3511us] +/-   18ms
^+ 203.107.6.88                  2  10   377   438   -547us[ +176us] +/-   23ms

 查看123和323端口是否监听

 chrony配置参数说明

服务unit文件: /usr/lib/systemd/system/chronyd.service
监听端口: 323/udp,123/udp
配置文件: /etc/chrony.conf

server: 该参数可以多次用于添加时钟服务器,必须以"server "格式使用。可以添加任意个时间服务器。
stratumweight: stratumweight指令设置当chronyd从可用源中选择同步源时,每个层应该添加多少距离到同步距离。
默认情况下,CentOS中设置为0,让chronyd在选择源时忽略源的层级。
driftfile: 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,
在重启后为系统时钟作出补偿,甚至可能的话,会从时钟服务器获得较好的估值。
rtcsync: rtcsync指令将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。
allow/deny: 这里你可以指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器。
例:
allow 192.168.0.10
deny 192.168.2.10
cmdallow/cmddeny: 指定哪个IP地址或哪台主机可以通过chronyd使用控制命令。
bindcmdaddress : 该指令允许你限制chronyd监听哪个网络接口的命令包(由chronyc执行)。
该指令通过cmddeny机制提供了一个除上述限制以外可用的额外的访问控制等级。
例:
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
makestep: chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟,但只有在因为chronyd启动时间超过指定限制(可使用负值来禁用限制),没有更多时钟更新时才生效。

常见参数如上,实际参数还有很多,可以在官网查看。
https://chrony.tuxfamily.org/documentation.html 

备注

ntp常用服务器

国内:

cn.pool.ntp.org  中国开源免费NTP服务器

ntp1.aliyun.com 阿里云NTP服务器

ntp2.aliyun.com 阿里云NTP服务器

time1.aliyun.com 阿里云NTP服务器

time2.aliyun.com 阿里云NTP服务器

国外

time1.apple.com 苹果NTP服务器
time2.apple.com 苹果NTP服务器
time3.apple.com 苹果NTP服务器
time4.apple.com 苹果NTP服务器
time5.apple.com 苹果NTP服务器
time1.google.com 谷歌NTP服务器
time2.google.com 谷歌NTP服务器
time3.google.com 谷歌NTP服务器
time4.google.com 谷歌NTP服务器
pool.ntp.org 开源免费NTP服务器

参考文档

以上是关于linux下的硬件时钟存储的时间是UTC时间还是用户设定的时区时间(比如说北京时间)?的主要内容,如果未能解决你的问题,请参考以下文章

linux 修改硬件时间

Linux时间和时区设定

Linux 时间同步

linux hwclock -r显示的HWC TIME(硬件时钟时间)与timedatectl结果中的RTC TIME(实时时钟时间)有什么区别?BIOS时钟源

linux hwclock -r显示的HWC TIME(硬件时钟时间)与timedatectl结果中的RTC TIME(实时时钟时间)有什么区别?BIOS时钟源

linux hwclock -r显示的HWC TIME(硬件时钟时间)与timedatectl结果中的RTC TIME(实时时钟时间)有什么区别?BIOS时钟源