張磊 馬威 楊元淦
摘要:為了解決服務(wù)器操作系統(tǒng)版本管理問(wèn)題。使用原子系統(tǒng)版本管理方案,大概分為四個(gè)步驟,系統(tǒng)版本升級(jí)或者修改配置,驗(yàn)證功能和版本,回滾系統(tǒng)版本,驗(yàn)證功能和版本。其中本方案主要介紹了針對(duì)uos服務(wù)器操作系統(tǒng)上的技術(shù)實(shí)現(xiàn)。相比原有的系統(tǒng)升級(jí)回退方案,操作更簡(jiǎn)單,更可靠。提升系統(tǒng)穩(wěn)定性。
關(guān)鍵詞:原子系統(tǒng),版本管理,系統(tǒng)回滾,系統(tǒng)版本
1.簡(jiǎn)介
傳統(tǒng)通用操作系統(tǒng)發(fā)行版都使用包管理方案(rpm或者deb)來(lái)管理各種軟件包版本。升級(jí)操作系統(tǒng)版本,也就是批量升級(jí)軟件包的版本。在升級(jí)之后,如果想回退整個(gè)操作系統(tǒng)的版本,首先需要識(shí)別每個(gè)軟件的版本,然后分別回退,操作非常麻煩,不僅效率低,而且容易出錯(cuò)。
在現(xiàn)有uos服務(wù)器操作系統(tǒng)中實(shí)現(xiàn)了原子系統(tǒng)管理方案,能有效解決上面提到的問(wèn)題。不僅僅局限于軟件包的版本升級(jí)和回退,同時(shí)還可以回退整個(gè)系統(tǒng)文件的版本。
2.背景介紹
2.1.現(xiàn)有技術(shù)方案
系統(tǒng)版本管理,包括系統(tǒng)軟件包版本管理,系統(tǒng)配置文件版本管理。
現(xiàn)有軟件包管理方案,通過(guò)apt/yum等軟件包管理工具實(shí)現(xiàn)。這個(gè)方案軟件包可以一鍵升級(jí)所有包版本,但是不能一鍵回退所有包版本。apt等包管理方案針對(duì)的是單獨(dú)軟件,這個(gè)方案的粒度太細(xì)了。
系統(tǒng)軟件包升級(jí)使用命令:
1.sudo apt update ;
2.sudo apt upgrade完成升級(jí)軟件包升級(jí)。
系統(tǒng)軟件回退的場(chǎng)景中,操作起來(lái)比較復(fù)雜。大致操作流程如下:
1.通過(guò)解析/var/log/dpkg.log日志文件,識(shí)別系統(tǒng)軟件安裝順序和版本。
2.通過(guò)sudo apt install pkgame=version命令來(lái)安裝制定版本的方式回退版本,每次只能回退一個(gè)軟件版本。
系統(tǒng)文件版本管理,目前沒(méi)有系統(tǒng)層面的管理技術(shù),更多是使用第三方軟件的系統(tǒng)文件備份方案。
2.2.現(xiàn)有技術(shù)方案缺點(diǎn)
1.系統(tǒng)軟件版本回退場(chǎng)景,需要關(guān)注軟件依賴(lài)關(guān)系,識(shí)別歷史軟件版本,升級(jí)軟件列表。不僅退回效率低,而且容易回退錯(cuò)誤。
2.系統(tǒng)沒(méi)有自帶文件版本管理技術(shù),如果系統(tǒng)配置文件修改,無(wú)法直接回退,需要在文件修改前,手動(dòng)備份或者使用第三方軟件備份。
3.新技術(shù)方案介紹
3.1.新技術(shù)方案解決哪些問(wèn)題
新的技術(shù)方案采用原子系統(tǒng)方案來(lái)管理系統(tǒng)版本,能快速回退系統(tǒng)軟件包和系統(tǒng)配置文件。整個(gè)系統(tǒng)版本管理的操作過(guò)程通過(guò)一兩個(gè)命令就能完成,操作過(guò)程不僅簡(jiǎn)單高效,而且避免了誤操作導(dǎo)致的系統(tǒng)問(wèn)題。并且在系統(tǒng)層面自帶了系統(tǒng)配置文件的版本管理功能,豐富了用戶(hù)體驗(yàn),減低了運(yùn)維成本。
3.2.完整技術(shù)方案介紹
3.2.1.系統(tǒng)安裝階段的準(zhǔn)備工作
在安裝操作系統(tǒng)過(guò)程的磁盤(pán)分區(qū)階段,一般情況下只需要?jiǎng)澐忠粔K“/”根分區(qū),掛載目錄為根目錄。系統(tǒng)所有安裝的軟包和系統(tǒng)配置文件等都存儲(chǔ)在根分區(qū)目錄中。在新的技術(shù)方案中,系統(tǒng)安裝階段,需要?jiǎng)澐謨蓧K“/”根分區(qū),大小相同,還需要給兩個(gè)根分區(qū)分區(qū)打上不同的標(biāo)簽;以及一塊獨(dú)立分區(qū),用于存儲(chǔ)系統(tǒng)升級(jí)回滾狀態(tài)和內(nèi)核安裝包和系統(tǒng)版本狀態(tài),例如:
/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
系統(tǒng)所有軟件都會(huì)安裝在LABEL="Roota"(下面簡(jiǎn)稱(chēng)roota分區(qū)) 的分區(qū)中,LABEL="Rootb"(下面簡(jiǎn)稱(chēng)rootb分區(qū)) 的分區(qū)不安裝任何數(shù)據(jù)。
LABEL="pool" (下面簡(jiǎn)稱(chēng)pool分區(qū))分區(qū)中默認(rèn)存儲(chǔ)了當(dāng)前版本的內(nèi)核安裝包。
3.2.2.系統(tǒng)啟動(dòng)階段準(zhǔn)備工作
在分區(qū)劃分完成之后,需要使用overlay技術(shù)將兩塊根分區(qū)聯(lián)合起來(lái)。
1.系統(tǒng)啟用overlay技術(shù)。
2.將roota的”/”根分區(qū)重新掛載為只讀分區(qū)。
3.將rootb分區(qū)掛載為 /overlay 目錄。
4.在/overlay 目錄中創(chuàng)建三個(gè)目錄 lower,work,upper,這個(gè)是overlay掛載必須的目錄。
5.并將 “/” 根分區(qū)與 /overlay分區(qū)通過(guò)overlay類(lèi)型掛載綁定。
通過(guò)overlay技術(shù)掛載之后,roota分區(qū)會(huì)掛載到lower目錄,為只讀分區(qū);系統(tǒng)中的所有對(duì)roota分區(qū)的增加,刪除,修改的文件都會(huì)記錄到upper目錄中,這個(gè)時(shí)候upper為空目錄。
3.2.3.系統(tǒng)版本升級(jí)操作實(shí)現(xiàn)步驟
UOS開(kāi)發(fā)團(tuán)隊(duì)實(shí)現(xiàn)了一個(gè)系統(tǒng)軟件包版本升級(jí)和回退的工具,通過(guò)這個(gè)工具,可以實(shí)現(xiàn)系統(tǒng)軟件包的升級(jí),回退,保存等功能。
系統(tǒng)中升級(jí)的軟件包版本,修改的系統(tǒng)配置等都會(huì)保存在upper目錄中。這些修改不會(huì)直接寫(xiě)入lower目錄,在這個(gè)時(shí)刻,系統(tǒng)的lower目錄保存的是上一個(gè)系統(tǒng)版本,upper目錄中保存的是最新的系統(tǒng)版本。所有系統(tǒng)軟件包版本升級(jí)修改的文件,以及針對(duì)系統(tǒng)配置文件做的修改,都認(rèn)為是系統(tǒng)版本發(fā)生了變化,這些修改全部保存在upper目錄中。
由于內(nèi)核升級(jí)比較特殊,針對(duì)內(nèi)核的版本升級(jí),做了特殊處理。首先下載最新版本的內(nèi)核安裝包到pool分區(qū)中,這個(gè)時(shí)刻pool分區(qū)中是有當(dāng)前版本內(nèi)核安裝包,以及準(zhǔn)備升級(jí)的內(nèi)核版本安裝包;第二步直接將準(zhǔn)備升級(jí)的內(nèi)核版本安裝到lower目錄中,并修改grub啟動(dòng)相關(guān)參數(shù),確保系統(tǒng)能正常啟動(dòng)。
3.2.4.系統(tǒng)版本回滾操作實(shí)現(xiàn)步驟
系統(tǒng)版本回滾,也就是將系統(tǒng)版本回滾到上一次保存的系統(tǒng)版本狀態(tài)。這里面涉及一下兩個(gè)方面的實(shí)現(xiàn):
1.系統(tǒng)內(nèi)核版本回滾,內(nèi)核版本回滾是將pool中保存的上一個(gè)內(nèi)核版本安裝包直接安裝到lower目錄中,并同步修改grub啟動(dòng)相關(guān)參數(shù),確認(rèn)系統(tǒng)能正常啟動(dòng)。并且刪除最新的內(nèi)核版本安裝包。
2.系統(tǒng)軟件包和配置文件版本回滾,將upper目錄的修改內(nèi)容刪除,可以理解為將upper目錄清空,同時(shí)記錄當(dāng)前系統(tǒng)狀態(tài)保存到pool分區(qū)中。
在用戶(hù)側(cè),整個(gè)操作過(guò)程只需要執(zhí)行一條回滾命令,簡(jiǎn)單高效完成系統(tǒng)版本的回滾操作,告別復(fù)雜的軟件包和配置文件版本管理查詢(xún)和管理過(guò)程。系統(tǒng)版本回滾之后,需要重啟系統(tǒng)。
3.2.5.系統(tǒng)版本保存操作實(shí)現(xiàn)步驟
系統(tǒng)版本保存操作,實(shí)現(xiàn)過(guò)程如下:
1.將upper目錄的內(nèi)容回寫(xiě)到lower目錄,這里涉及到提權(quán)操作;
2.清空upper目錄;
3.記錄當(dāng)前系統(tǒng)狀態(tài)保存到pool分區(qū)中。
系統(tǒng)狀態(tài)保存之后,就無(wú)法通過(guò)回滾操作回退系統(tǒng)版本了。所以這個(gè)操作需要確認(rèn)系統(tǒng)版本的修改驗(yàn)證都通過(guò)之后才能操作。
3.3.技術(shù)方案整體架構(gòu)
整體技術(shù)框架如下圖所示:
當(dāng)前系統(tǒng)版本管理方案中,只能保存上一個(gè)系統(tǒng)版本(lower目錄)與當(dāng)前系統(tǒng)版本(upper目錄)這兩個(gè)版本。雖然無(wú)法保存更多版本,但是整個(gè)版本管理過(guò)程簡(jiǎn)單明了,操作過(guò)程高效快速。同時(shí)也不需要額外的服務(wù)來(lái)管理系統(tǒng)版本,是與系統(tǒng)深度融合的版本管理方案。
3.4.技術(shù)方案的有益效果
1.具有系統(tǒng)保護(hù)能力,系統(tǒng)roota分區(qū)狀態(tài)為只讀目錄,如果用戶(hù)有誤刪除文件操作,誤修改權(quán)限操作等,可以通過(guò)回滾命令很簡(jiǎn)單實(shí)現(xiàn)系統(tǒng)恢復(fù)。
2.具有系統(tǒng)版本快速回退能力,一條簡(jiǎn)單回滾命令可以回退到上一個(gè)系統(tǒng)版本。
3.不需要部署額外的服務(wù)來(lái)管理系統(tǒng)版本,與系統(tǒng)深度融合的系統(tǒng)版本管理方案。
參考文獻(xiàn):
[1]維基百科.覆蓋_(編程) [J/OL].https://zh.m.wikipedia.org/ zh-hans/覆蓋_(編程)
[2]維基百科.Linux [J/OL].https://zh.m.wikipedia.org/zh-hans/ Linux
[3]維基百科.硬盤(pán)分區(qū) [J/OL]https://en.wikipedia.org/wiki/硬盤(pán)分區(qū)
[4]維基百科.APT包管理 [J/OL]https://zh.m.wikipedia.org/ wiki/ APT
[5]維基百科.內(nèi)核 [J/OL]https://zh.m.wikipedia.org/wiki/內(nèi)核
作者簡(jiǎn)介:
1.張磊(1977.01-)男,漢,湖北武漢人,本科,統(tǒng)信軟件技術(shù)有限公司高級(jí)副總經(jīng)理、系統(tǒng)架構(gòu)設(shè)計(jì)師,主持過(guò)多個(gè)國(guó)家級(jí)科研項(xiàng)目,對(duì)linux操作系統(tǒng)內(nèi)核、應(yīng)用開(kāi)發(fā)、軟件測(cè)試、系統(tǒng)配置與遷移有著深入的研究與豐富的經(jīng)驗(yàn)。
2.馬威(1988.01-)男,漢,湖北咸寧人,本科,武漢統(tǒng)信軟件技術(shù)有限公司資深系統(tǒng)研發(fā)工程師,主要從事操作系統(tǒng)軟件研發(fā)
3.楊元淦(1998.03-)男,漢,湖北武漢人,學(xué)士,武漢深之度科技有限公司測(cè)試主管,主要從事系統(tǒng)測(cè)試相關(guān)
基金項(xiàng)目:本文系武漢市科學(xué)技術(shù)局“基于國(guó)產(chǎn)CPU平臺(tái)的輕量級(jí)服務(wù)器操作系統(tǒng)”項(xiàng)目支撐(項(xiàng)目編號(hào)2019010702011235)