張磊 馬威 楊元淦
摘要:為了解決服務器操作系統版本管理問題。使用原子系統版本管理方案,大概分為四個步驟,系統版本升級或者修改配置,驗證功能和版本,回滾系統版本,驗證功能和版本。其中本方案主要介紹了針對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)