郭垚 閆博文 王少君






摘要 :為了解決用戶在遇到缺少存儲介質或未適配硬件時無法使用live系統實現系統啟動的問題。使用live系統啟動流程大致分為四步,啟動介質選擇,加載內核及必須的驅動,內存加載SquashFS文件,掛載根文件系統并初始化。其中,本專利主要針對的是啟動介質的維護及驅動快速適配。我們使用了“以local系統為宿主的live系統實現機制”技術。本文詳細介紹了local系統的實現及優勢,將local系統作為宿主實現live系統詳細實現流程,并詳細闡述了使用本專利技術帶來的優勢。采用以local系統為宿主的live系統實現機制,相比原live系統大大減少了對存儲介質的依賴,并提升了對硬件設備的兼容性。
關鍵詞 Local系統;Live系統;SquashFS(只讀文件壓縮);BIOS;initramfs(內存加載臨時根文件)
1簡介
使用live系統啟動linux操作系統時過于依賴外部介質,以及在使用過程中會出現高額的硬件適配維護成本,為了解決這些問題,我們使用了“以local系統為宿主的live系統實現機制”技術。
本專利技術中發現Local系統無需依賴外部介質,并存在大量可用的穩定存儲空間,squashfs-tools的文件壓縮也可直接壓縮至Loacl系統中,這樣通過squashfs-tools將原Live系統中的SquashFS文件壓縮至Local系統即可無需外部介質也能正常啟動Live系統,并且通過本技術中的菜單引導項以及initramfs的虛擬根文件系統,減少對硬件驅動的維護成本。
2根文件系統宿主轉移設計
2.1 簡要分析
一個標準的Linux系統,必須要有一個完整的根文件系統,Live文件系統作為以外部介質為存儲的啟動系統,直接從CD-ROM或類似存儲設備運行到計算機內存中的操作系統,而不是從硬盤驅動器中加載。Live系統可以在沒有輔助存儲(例如硬盤驅動器)或損壞的硬盤驅動器或文件系統的計算機上運行,從而可以恢復數據。
Live系統主要分為兩部分:完整的根文件系統,Linux內核啟動管理器。但由于受硬件設備的限制,不可能直接將根文件系統拷貝到計算機內存中去使用,必須使用SquashFS對根文件系統進行壓縮,然后將其加載進內存中供操作系統調用。
Local文件系統直接儲存在硬盤中,隨時可供系統讀寫,依賴硬盤存儲,并具備完整的適配驅動。一般的PC機上自啟動的系統則是依賴Local文件系統,但是由于硬件存儲的局限性,無法做到系統可移動啟動,一旦硬盤出現損壞將會導致整個系統無法正常運行。
本技術結合Local的優勢,將Live文件系統依賴的啟動介質轉移至機器硬件上,減輕了Live文件系統對外部介質的依賴,并且由于Local文件系統中存在完整的系統內核和必備的硬件驅動,在使用本技術時可以避免對這部分的額外維護。
2.2 與本發明相關的現有技術
Live文件系統本質上是一個簡易的Linux操作系統,其技術是將Linux系統的根文件進行壓縮管理,壓縮成SquashFS文件,在使用時將Live文件系統中的SquashFS加載進內存中供操作系統調用,Live文件系統的啟動則一般使用Syslinux、GRUB、GRUB Legacy和LILO,指引用戶選擇正確的Live文件系統選項,加載內核及initramfs,保證系統的完整性。
使用Live文件系統啟動流程如下圖:
1.用戶進入BIOS設置界面,將承載Live文件系統的介質作為系統的啟動盤;
2.等待系統加載承載介質中的內核及initramfs;
3.完成內核及initramfs加載后,查找Live文件系統中的SquashFS文件;
4.將SquashFS文件加載到內存中,供Linux內核讀寫;
5.將內存中的SquashFS文件以偽設備的形式進行掛載,并作為當前系統的根文件系統;
6.掛載根文件完成后,調用初始化腳本對操作系統進行初始化,完成Live系統的啟動。
2.3現有技術的缺點
用戶選擇使用Live文件系統啟動,必須將Live文件系統存儲到額外的存儲介質,并保證該存儲介質有足夠的空間存放,一旦缺少存儲介質,該技術則無法使用,因此使用Live文件系統對存儲介質的依賴太強。由于當前Live文件系統多數是可移動的,無法適配所有機型,因此在Live文件系統中必須使用單獨的內核及必要的設備驅動,一旦出現使用的Live文件系統中設備驅動無法適配當前機型,則會導致在使用Live文件系統時需要額外新增當前機型的設備適配,這樣大大增加了系統的維護成本。
3本發明技術方案的詳細闡述
3.1本發明所要解決的技術問題
本發明解決了Linux操作系統使用Live文件系統帶來的下列技術問題:
1.當缺少外部介質時仍可以正常使用Live文件系統,減輕Live文件系統對存儲介質依賴;
2.避免使用Live文件系統時對基礎設備驅動帶來的維護成本;
3.2本發明提供的完整技術方案
3.2.1根文件宿主轉移
完整的根文件系統是標準Linux系統必備的,正常使用的Linux根文件系統一般是存儲在硬盤中,系統運行需要提供文件讀寫服務,如果用戶使用Live文件系統作為機器運行系統,則系統運行依附于運行環境內存,當前市場是普遍使用的機器并沒有太大的內存,因此使用Live文件系統其根文件系統不能過大,為了保證運行環境內存的充分利用,一般Live文件系統使用的根文件系統都是壓縮之后的,更方便讀取。
在本技術中根文件系統的壓縮采用的是debootstrap工具,在chroot進入根文件系統后,使用squashfs-tools壓縮Live文件系統所需的根文件,將整個系統目錄打包壓縮成一個SquashFS文件供Live文件系統使用,SquashFS文件則被安裝到Local文件系統中,在用戶選擇Live文件啟動后,會直接從硬盤中查找壓縮的SquashFS文件并加載到當前環境內存中,供Linux內核使用,這樣就完美的避開了Live文件系統中根文件必須存儲到額外存儲介質的特定條件,只需要保證使用Live文件系統啟動的機器中硬盤沒有完全損壞即可正常使用。
根文件宿主轉移流程如下圖:
3.2.2 Live文件系統引導
Live系統正常啟動需要啟動管理器來進行引導,常見的啟動管理器有Syslinux、GRUB、GRUB Legacy和LILO等,本技術以GRUB為例。
GRUB啟動器的主體主要分三部分:
1./etc/default/grub:grub的默認配置文件,控制GRUB菜單項的部分功能,并附帶系統所有內核配置。
2./etc/grub.d/:包含所有GRUB需要使用的腳本,用戶創建grub.cfg,并且grub.cfg中的菜單順序也是由此目錄中的文件順序決定的。
3./boot/grub/grub.cfg:這是GRUB的主要配置文件,但是不應手動更改,應該使用grub.d文件夾中的腳本去更新該文件。
為了實現使用Live文件系統可以在當前運行環境上使用,本技術在grub.d文件夾中新增Live文件系統的啟動項配置腳本,在腳本中實現Live文件系統啟動的內核和initramfs與當前運行環境是相同的,保證使用Live文件系統在安裝SquashFS文件時使用指定分區加載根文件系統,確定根文件路徑,腳本同時添加了Live的引導方式。這樣,在用戶進入GRUB界面選擇Live文件系統啟動時,提供了指定的SquashFS文件路徑,保證Live啟動能正確查找到選定SquashFS加載到內存,并將根文件掛載到指定路徑,在掛載根文件系統后,直接使用Local系統的內核和initramfs,減少后期環境適配成本。
Live系統添加到GRUB啟動器引導流程如下圖:
3.2.3同步內核模塊
Initramfs作為tmpfs的一個應用,使用cache作為文件系統的裝卸,在本技術中,initramfs是通過啟動引導程序加載到內存中,在內存中解壓形成一個仿真根文件系統,為了實現加載啟動過程中所需的設備驅動,仿真根文件系統會提供一個可執行程序,在仿真根目錄下加載必要的設備驅動,如:USB、SATA、SCSI硬盤驅動、LVM、RAID文件系統驅動等等。在加載必須的設備驅動后,完整的Linux系統所需前置條件就達成了,之后就可以加載硬盤上的根目錄了,系統運行環境滿足后調用Linux系統初始化進程/sbin/init完成系統初始化。
由于Live文件系統的局限性,內核及設備驅動必須與根文件壓縮文件同時存儲在額外介質內,這樣在使用Live文件系統啟動運行環境時,可能出現Live文件系統的設備驅動與運行環境不適配,Live文件系統啟動完成后還需要用戶進行額外的設備驅動更新安裝,造成不必要的維護成本。在本技術中可以實現Live文件系統中的設備驅動與當前運行環境保持一致,在initramfs初始化時,會主動從Local文件系統中拷貝當前運行環境的驅動模塊,將/lib/modules拷貝到Live文件系統中對應目錄,這樣在使用Live文件系統啟動時,運行環境的設備驅動與Live文件系統完全適配,無需后續的驅動維護。
內核模塊同步流程如下圖:
3.3本發明技術方案的整體架構
本技術檔案選擇以Local文件系統為宿主,實現了不依賴額外介質,使用本地引導的方式,消除了采用Live文件系統啟動的維護成本,整體的實現架構如上圖,采用本技術后運行環境的Live文件系統啟動流程如下圖:
1.用戶進入BIOS設置界面,直接選擇本地磁盤啟動,不用依賴額外介質;
2.磁盤讀取成功后,加載Local文件系統中的內核及initramfs,保證設備驅動與運行環境正常適配;
3.依據GRUB新增腳本,快速找到SquashFS文件系統;
4.將壓縮后的SquashFS文件系統加載到內存中,此為Live系統的根文件系統;
5.將Local文件系統中的設備驅動模塊/lib/modules拷貝到Live文件系統中的相同目錄,保證Live文件系統的設備與當前運行環境保持一致;
6.卸載Local文件系統根文件系統,防止Local文件系統與Live文件系統發生沖突,完成Live系統的啟動;
通過對比本技術與原Live文件系統啟動流程,我們可以發現:
1.SquashFS存儲,原Live文件系統啟動方式中需要額外的存儲介質,但是在本技術中直接安裝在Loacl文件系統中,脫離了外接存儲介質的依賴;
2.系統啟動的引導項,原Live文件系統啟動方式中是引導跟隨SquashFS一起存儲的內核及initramfs,但是在本技術中是引導運行環境中的內核及initramfs;
3.內核模塊共用,原Live文件系統的內核模塊是存儲在額外介質中的,但是在本技術中直接將運行環境的內核模塊在initramfs中拷貝到Live文件系統的相同目錄下,這樣保證了使用Live文件系統啟動運行環境也無需消耗額外的維護成本。
3.4本發明技術方案帶來的有益效果
本發明技術方案通過轉移Live文件系統中SquashFS存儲宿主,實現Live文件系統啟動脫離外接存儲介質依賴,針對Live文件系統添加引導菜單,在運行環境中如果存在內核及內核模塊,Live文件系統啟動直接拷貝Local系統的內核及內核模塊,提升了對硬件設備的兼容性,避免了在Live文件系統啟動后,基礎設備驅動不適配帶來的維護成本。此方案可廣泛應用與Linux操作系統中的系統回退或還原中,實現以Live文件系統回退或還原系統。
參考文獻
[1]David Clinton.Linux實戰[M].北京:機械工業出版社,2019:105-122,298-299
[2]冉宏元.跟老男孩學Linux運維:核心基礎篇(上)(第2版)[M].北京:機械工業出版社,2019:179-186
[3]Chris Simmonds.嵌入式Linux編程.北京:機械工業出版社,2017:134-140