IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux系统时间、系统时区和时钟同步的部分理解 -> 正文阅读

[系统运维]Linux系统时间、系统时区和时钟同步的部分理解

1、写在前面

因为最近一段时间以来,本人在项目遇到的因为Linux系统时间所引发的问题比较多,所以在此进行总结。

2、Linux系统时间与BIOS硬件时间之间的关系

2.1、Linux将BIOS时间视作UTC时间(协调世界时),而Windows则认为BIOS时间就是本地时区的时间

Linux系统对于BIOS硬件时间的处理方式与Windows对于BIOS硬件时间的处理是有区别的,Windows和Linux的系统时间在没有NTP服务器的情况下,均读取自BIOS的时间。Windows系统会BIOS时间作为当下本地时区的时间;而Linux系统则会将BIOS时间作为UTC时间(协调世界时),然后根据系统设定的本地时区进行增加或者减少相应的小时数。(如,假使BIOS时间是10:00,且两个系统的时区都设定为东八区的上海时间,Windows系统会认为10:00就是上海时间,而Linux会在10:00的基础上增加8个小时,最后认为18:00为上海时间)
Windows和Linux对待BIOS硬件时间不同所造成的最直接的现象在于,在安装Windows+Linux的双系统时,两个系统之间的系统时间会相差8个小时(相对于东八区而言)。而如果想要消除“双系统8小时时差”这样的现象,可以在Linux系统上通过“hwclock -w”命令将Linux系统时间和BIOS时间同步为一致,即可解决。
在这里插入图片描述

2.2、Linux怎样更新系统时间

Linux系统有两个时间,一个是系统时间,另一个是BIOS时间。Linux系统在启动时,会自动读取BIOS时间作为系统时间,如果读取不到BIOS时间,则会将上一次成功读取到BIOS时间作为本次的系统时间,Linux系统成功启动完成后,假使Linux开启了时钟自动同步功能并成功连接到NTP服务器上,则会将NTP服务器上的时间作为本机的系统时间。相关流程图如下所示:
在这里插入图片描述
以上流程图是Linux系统启动时的流程图,Linux关机时,还会将系统时间写入到BIOS时间中,以保持软硬件时间同步。

3、未安装ntpdate或chronyc的情况下,Linux如何实现与NTP服务器时间的同步

在很多Linux教材中,谈到时间同步的时候,绝大多数都是通过ntpdate命令与安装有ntpd的时钟服务器同步,或者是通过chronyc命令与安装有chrony的时钟服务器同步,但对于客户端而言,ntpdate和chronyc都不是Linux自带的时间同步命令,需要额外安装。而像debian等这样的Linux发行版,其本身又可以进行时间同步,那这样的时间同步又是怎样实现的呢?其实这都归功于Linux中的systemd-timesyncd.service服务,相关服务可以通过命令“systemctl status systemd-timesyncd.service”命令查看,如果相关的服务为active状态,说明时间同步服务时开启的,如下图所示:
在这里插入图片描述
既然有相关服务,就会有相关的配置文件,systemd-timeryncd.service服务的配置文件位于“/etc/systemd”路径下,文件名称为“timesyncd.conf”,如下图所示:
在这里插入图片描述
将相关配置文件打开后,我们可以看到内容如下:
在这里插入图片描述
按照译者金步国的博客(http://www.jinbuguo.com/systemd/timesyncd.conf.html#NTP=)针对于timesyncd.conf文件参数字段的解释,我们可以获知到以下信息:

参数字段解释
NTP=一个空格分隔的NTP服务器列表, 可以使用主机名,也可以使用IP地址。在运行时, 此处设置的列表将与 systemd-networkd.service(8) 中已配置的NTP服务器列表合并在一起。 systemd-timesyncd 将会依次尝试列表中的每个NTP服务器, 直到同步成功为止。 如果为此选项设置一个空字符串, 那么表示清空所有此选项先前已设置的NTP服务器列表。 此选项的默认值为空。
FallbackNTP=一个空格分隔的NTP服务器列表,用作备用NTP服务器。 可以使用主机名,也可以使用IP地址。如果所有已配置在 systemd-networkd.service(8) 中的NTP服务器以及上述 NTP= 中设置的NTP服务器都尝试失败, 那么将尝试此处设置的备用NTP服务器。 如果为此选项设置一个空字符串, 那么表示清空所有此选项先前已设置的NTP服务器列表。 若未设置此选项, 则使用编译时设置的默认备用NTP服务器。
RootDistanceMaxSec=最大可接受的"root distance"秒数(最大误差)。 默认值为 5 秒。
PollIntervalMinSec=, PollIntervalMaxSec=NTP消息的最小/最大轮询间隔秒数。 PollIntervalMinSec= 必须不小于 16 秒。 PollIntervalMaxSec= 必须大于 PollIntervalMinSec= 。 PollIntervalMinSec= 默认为 32 秒, PollIntervalMaxSec= 默认为 2048 秒。

换言之,我们在NTP字段后添加了一个NTP地址后(需要删除前面“#”以取消注释),通过命令“systemctl restart systemd-timesyncd.service”即可完成与NTP服务器的时间同步,而不需要额外安装ntpdate和chronyc工具,如果NTP字段后的服务器连接或同步失败,则会去匹配FallbackNTP字段后的NTP服务器。
上述提到,配置文件timesyncd.conf在路径/etc/systemd下影响时间同步服务的进行,而有的发行版(如deepin V20.2.4),在/etc/systemd目录下还有一个timesyncd.conf.d文件夹,该文件夹下还有一个配置文件,在deepin系统中,该文件的文件名为deepin.conf,其内容编写规则与/etc/systemd/timesyncd.conf一致。如果某个Linux发行版和deepin一样具有/etc/systemd/system.d/timesyncd.conf文件夹,那么systemd-timesyncd.service服务将优先选择这个文件夹下的.conf文件作为自己的优先配置文件,而原有的/etc/systemd/timesyncd.conf将作为备用的配置文件,优先级相对较低。

4、Linux系统时区的注意事项

4.1、Linux的世界里,没有北京时间

本章节具体阐述前,我们或许可以这样说——“Linux的世界里,实际上不存在北京时间”。
之所以这样说,是因为Linux系统普遍采用IANA(互联网数字分配机构)的时区数据库(Time Zone Database)作为系统的时区。在该数据库中,中国地区的IANA标准时区有四个——上海、香港、澳门和台北,因此“北京时间”在Linux系统里面本质上是没有的,不过不同的Linux发行版会对这个时区数据库做修改,如debian系统,增加有“重庆时间”,deepin系统则将中国省份增加得更多,如北京、重庆、成都、西安、南京、乌鲁木齐等等,这些时区各对应了一个时区相关文件,位于/usr/share/zoneinfo或/usr/share/zoneinfo/Asia目录下。而针对于debian、deepin等系统自行修改添加的时区,其本质上是在相应的目录下创建了一个链接文件指向上海时区的时区文件,毕竟上海时区是IANA规定的标准时区。相关链接文件如下所示(以debian中的重庆时间为例):
在这里插入图片描述
当然也有例外,像OpenEuler,则没有采用链接文件形式指向上海。
在这里插入图片描述

4.2、Linux设置时区时应尽可能设置IANA标准时区

之所以要将Linux尽可能设置为IANA标准时区,是针对于和涉及到时区相关定制开发Linux软件而言的。因为全球的Linux发行版有几百种,并且这些发行版的非IANA标准时区都不同,在不同的开发人员采用不同的Linux发行版当开发环境情况下,会出现他们所开发的软件没能适配很多非IANA标准时区,这将导致一些问题——比如某个Linux系统时区为非IANA标准的北京时区,因运行的软件只适配了IANA标准的上海时间,所以此时软件内的时间会显示为UTC时间(数值上等同于零区的格林尼治时间,与北京时间有8小时时差),但系统时间仍旧是正确的北京时间,这会给最终的使用者带来很不好的体验。

4.3、典型故障现象——无论怎样修改时区,Linux系统始终都显示零区的格林尼治时间

出现这样的情况一般是因为/usr/share/zoneinfo目录遭到严重破坏造成的,针对这样的故障,最简单粗暴的方式就是将找到一套同版本、正常运行的Linux发行版,将其/usr/share/zoneinfo目录复制出来,对故障Linux系统的相关目录进行替换。

5、扩展补充:协调世界时(UTC)和格林尼治标准时(GMT)的区别

格林尼治标准时(GMT),是指英国皇家格林尼治天文台的标准时间,因地理学上的本初子午线被定义为通过在格林尼治天文台的经线,因此理论上格林尼治标准时间的正午是指当太阳横穿本初子午线时的时间。由于地球在其椭圆轨道里的运动速度不均匀,该时刻可能和实际的太阳时相差16分钟。 加之地球每天的自转是不规则的,且自转速度正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用,取而代之的是基于国际原子时秒长为基础的协调世界时(UTC)。
原子时秒的定义:铯-133原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间。
目前,UTC被应用在互联网和万维网标准中,例如NTP(网络时间协议)就是UTC被使用在互联网中的一种方式,而日常生活中,在不需要将时间精度控制在秒的情况下,UTC可以被视作和GMT等同。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 22:09:38  更:2021-11-14 22:11:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:01:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码