基于uos服务器操作系统的原子系统版本管理方案

2021-11-07 19:12张磊马威杨元淦
科技信息·学术版 2021年22期

张磊 马威 杨元淦

摘要:为了解决服务器操作系统版本管理问题。使用原子系统版本管理方案,大概分为四个步骤,系统版本升级或者修改配置,验证功能和版本,回滚系统版本,验证功能和版本。其中本方案主要介绍了针对uos服务器操作系统上的技术实现。相比原有的系统升级回退方案,操作更简单,更可靠。提升系统稳定性。

关键词:原子系统,版本管理,系统回滚,系统版本

1.简介

传统通用操作系统发行版都使用包管理方案(rpm或者deb)来管理各种软件包版本。升级操作系统版本,也就是批量升级软件包的版本。在升级之后,如果想回退整个操作系统的版本,首先需要识别每个软件的版本,然后分别回退,操作非常麻烦,不仅效率低,而且容易出错。

在现有uos服务器操作系统中实现了原子系统管理方案,能有效解决上面提到的问题。不仅仅局限于软件包的版本升级和回退,同时还可以回退整个系统文件的版本。

2.背景介绍

2.1.现有技术方案

系统版本管理,包括系统软件包版本管理,系统配置文件版本管理。

现有软件包管理方案,通过apt/yum等软件包管理工具实现。这个方案软件包可以一键升级所有包版本,但是不能一键回退所有包版本。apt等包管理方案针对的是单独软件,这个方案的粒度太细了。

系统软件包升级使用命令:

1.sudo apt update ;

2.sudo apt upgrade完成升级软件包升级。

系统软件回退的场景中,操作起来比较复杂。大致操作流程如下:

1.通过解析/var/log/dpkg.log日志文件,识别系统软件安装顺序和版本。

2.通过sudo apt install pkgame=version命令来安装制定版本的方式回退版本,每次只能回退一个软件版本。

系统文件版本管理,目前没有系统层面的管理技术,更多是使用第三方软件的系统文件备份方案。

2.2.现有技术方案缺点

1.系统软件版本回退场景,需要关注软件依赖关系,识别历史软件版本,升级软件列表。不仅退回效率低,而且容易回退错误。

2.系统没有自带文件版本管理技术,如果系统配置文件修改,无法直接回退,需要在文件修改前,手动备份或者使用第三方软件备份。

3.新技术方案介绍

3.1.新技术方案解决哪些问题

新的技术方案采用原子系统方案来管理系统版本,能快速回退系统软件包和系统配置文件。整个系统版本管理的操作过程通过一两个命令就能完成,操作过程不仅简单高效,而且避免了誤操作导致的系统问题。并且在系统层面自带了系统配置文件的版本管理功能,丰富了用户体验,减低了运维成本。

3.2.完整技术方案介绍

3.2.1.系统安装阶段的准备工作

在安装操作系统过程的磁盘分区阶段,一般情况下只需要划分一块“/”根分区,挂载目录为根目录。系统所有安装的软包和系统配置文件等都存储在根分区目录中。在新的技术方案中,系统安装阶段,需要划分两块“/”根分区,大小相同,还需要给两个根分区分区打上不同的标签;以及一块独立分区,用于存储系统升级回滚状态和内核安装包和系统版本状态,例如:

/dev/vda1:LABEL="Roota" UUID="xxx" TYPE="ext4" PARTUUID="xxx"

/dev/vda5:LABEL="Rootb" UUID="xxx" TYPE="ext4" PARTUUID="xxx"

/dev/vda6:LABEL="pool" UUID="xxx" TYPE="ext4" PARTUUID="xxx

系统所有软件都会安装在LABEL="Roota"(下面简称roota分区) 的分区中,LABEL="Rootb"(下面简称rootb分区) 的分区不安装任何数据。

LABEL="pool" (下面简称pool分区)分区中默认存储了当前版本的内核安装包。

3.2.2.系统启动阶段准备工作

在分区划分完成之后,需要使用overlay技术将两块根分区联合起来。

1.系统启用overlay技术。

2.将roota的”/”根分区重新挂载为只读分区。

3.将rootb分区挂载为 /overlay 目录。

4.在/overlay 目录中创建三个目录 lower,work,upper,这个是overlay挂载必须的目录。

5.并将 “/” 根分区与 /overlay分区通过overlay类型挂载绑定。

通过overlay技术挂载之后,roota分区会挂载到lower目录,为只读分区;系统中的所有对roota分区的增加,删除,修改的文件都会记录到upper目录中,这个时候upper为空目录。

3.2.3.系统版本升级操作实现步骤

UOS开发团队实现了一个系统软件包版本升级和回退的工具,通过这个工具,可以实现系统软件包的升级,回退,保存等功能。

系统中升级的软件包版本,修改的系统配置等都会保存在upper目录中。这些修改不会直接写入lower目录,在这个时刻,系统的lower目录保存的是上一个系统版本,upper目录中保存的是最新的系统版本。所有系统软件包版本升级修改的文件,以及针对系统配置文件做的修改,都认为是系统版本发生了变化,这些修改全部保存在upper目录中。

由于内核升级比较特殊,针对内核的版本升级,做了特殊处理。首先下载最新版本的内核安装包到pool分区中,这个时刻pool分区中是有当前版本内核安装包,以及准备升级的内核版本安装包;第二步直接将准备升级的内核版本安装到lower目录中,并修改grub启动相关参数,确保系统能正常启动。

3.2.4.系统版本回滚操作实现步骤

系统版本回滚,也就是将系统版本回滚到上一次保存的系统版本状态。这里面涉及一下两个方面的实现:

1.系统内核版本回滚,内核版本回滚是将pool中保存的上一个内核版本安装包直接安装到lower目录中,并同步修改grub启动相关参数,确认系统能正常启动。并且删除最新的内核版本安装包。

2.系统软件包和配置文件版本回滚,将upper目录的修改内容删除,可以理解为将upper目录清空,同时记录当前系统状态保存到pool分区中。

在用户侧,整个操作过程只需要执行一条回滚命令,简单高效完成系统版本的回滚操作,告别复杂的软件包和配置文件版本管理查询和管理过程。系统版本回滚之后,需要重启系统。

3.2.5.系统版本保存操作实现步骤

系统版本保存操作,实现过程如下:

1.将upper目录的内容回写到lower目录,这里涉及到提权操作;

2.清空upper目录;

3.记录当前系统状态保存到pool分区中。

系统状态保存之后,就无法通过回滚操作回退系统版本了。所以这个操作需要确认系统版本的修改验证都通过之后才能操作。

3.3.技术方案整体架构

整体技术框架如下图所示:

当前系统版本管理方案中,只能保存上一个系统版本(lower目录)与当前系统版本(upper目录)这两个版本。虽然无法保存更多版本,但是整个版本管理过程简单明了,操作过程高效快速。同时也不需要额外的服务来管理系统版本,是与系统深度融合的版本管理方案。

3.4.技術方案的有益效果

1.具有系统保护能力,系统roota分区状态为只读目录,如果用户有误删除文件操作,误修改权限操作等,可以通过回滚命令很简单实现系统恢复。

2.具有系统版本快速回退能力,一条简单回滚命令可以回退到上一个系统版本。

3.不需要部署额外的服务来管理系统版本,与系统深度融合的系统版本管理方案。

参考文献:

[1]维基百科.覆盖_(编程) [J/OL].https://zh.m.wikipedia.org/ zh-hans/覆盖_(编程)

[2]维基百科.Linux [J/OL].https://zh.m.wikipedia.org/zh-hans/ Linux

[3]维基百科.硬盘分区 [J/OL]https://en.wikipedia.org/wiki/硬盘分区

[4]维基百科.APT包管理 [J/OL]https://zh.m.wikipedia.org/ wiki/ APT

[5]维基百科.内核 [J/OL]https://zh.m.wikipedia.org/wiki/内核

作者简介:

1.张磊(1977.01-)男,汉,湖北武汉人,本科,统信软件技术有限公司高级副总经理、系统架构设计师,主持过多个国家级科研项目,对linux操作系统内核、应用开发、软件测试、系统配置与迁移有着深入的研究与丰富的经验。

2.马威(1988.01-)男,汉,湖北咸宁人,本科,武汉统信软件技术有限公司资深系统研发工程师,主要从事操作系统软件研发

3.杨元淦(1998.03-)男,汉,湖北武汉人,学士,武汉深之度科技有限公司测试主管,主要从事系统测试相关

基金项目:本文系武汉市科学技术局“基于国产CPU平台的轻量级服务器操作系统”项目支撑(项目编号2019010702011235)