本發(fā)明涉及Linux操作系統(tǒng)領(lǐng)域,尤其涉及一種保障Linux操作系統(tǒng)正常啟動的方法。
背景技術(shù):
目前,由于MTCA平臺廣泛應(yīng)用于環(huán)境穩(wěn)定性不高的場合,經(jīng)常面臨一些設(shè)備整框斷電的情況,會給正在讀寫中的硬盤造成一定影響,比如數(shù)據(jù)不完整、文件系統(tǒng)損壞等問題,尤其是后者,嚴(yán)重時(shí)會導(dǎo)致板卡上的系統(tǒng)無法啟動,板卡因而無法正常工作。MTCA平臺中配備硬盤的板卡主要是x86計(jì)算板,由于x86架構(gòu)的通用性,各個廠家為節(jié)約成本、方便使用、快速部署等方面考慮,一般不會專門為其開發(fā)系統(tǒng),而是直接安裝成熟穩(wěn)定的Linux發(fā)行版,如Redhat、CentOS、Ubuntu Server等,這些系統(tǒng)在啟動時(shí)如果檢測到硬盤上的文件系統(tǒng)損壞,會采取保守修復(fù),即僅當(dāng)文件并無實(shí)際損壞、只是文件系統(tǒng)記錄表為非clean狀態(tài)時(shí),才進(jìn)行輕微的狀態(tài)修復(fù),修復(fù)成功后正常啟動。如果確實(shí)有文件損壞,則系統(tǒng)不進(jìn)行修復(fù),也不會正常啟動,而是進(jìn)入一種維護(hù)模式,需要用戶連接顯示器進(jìn)入系統(tǒng),手動做一些備份數(shù)據(jù)、修復(fù)系統(tǒng)之類的工作;該模式只是一個最小化系統(tǒng),不會運(yùn)行用戶部署的各種軟件和服務(wù),也就是說板卡沒有正常工作。目前,安裝這些系統(tǒng)的x86計(jì)算板一旦出現(xiàn)文件損壞、系統(tǒng)無法啟動的情況,主要是靠用戶連接顯示器手工修復(fù),不僅對用戶的技術(shù)能力要求高,而且在MTCA應(yīng)用場合中,顯示器和有技能的人并非經(jīng)常在現(xiàn)場,發(fā)現(xiàn)和解決問題將大大滯后,該問題對工作的不良影響較大。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的在于提供一種保障Linux操作系統(tǒng)正常啟動的方法,在硬盤上的文件系統(tǒng)損壞時(shí),仍可保證該Linux操作系統(tǒng)能夠正常啟動。
為實(shí)現(xiàn)上述目的,本發(fā)明提供的保障Linux系統(tǒng)正常啟動的方法,包括下列步驟:在硬盤分區(qū)時(shí),創(chuàng)建一與原始根分區(qū)大小相同的分區(qū)作為快照分區(qū);安裝所述Linux操作系統(tǒng)至所述原始根分區(qū)中;修改/boot中的原始initramfs鏡像文件;所述修改/boot中的原始initramfs鏡像文件的步驟具體包括:用gunzip命令和cpio命令將所述原始initramfs鏡像文件解包到一預(yù)定目錄中;在所述預(yù)定目錄中加入device-mapper軟件包;當(dāng)sbin子目錄中不存在dmsetup命令,則將所述所含device-mapper軟件包里面的dmsetup命令放到所述sbin子目錄中;編輯init腳本程序,修改其掛載根文件系統(tǒng)的代碼,加入相應(yīng)的代碼邏輯;生成新的initramfs鏡像文件以覆蓋所述原始initramfs鏡像文件。
優(yōu)選地,所述原始initramfs鏡像文件是一個gz格式壓縮的cpio文件。
優(yōu)選地,所述修改/boot中的原始initramfs鏡像文件具體是修改所述原始initramfs鏡像文件的init腳本程序,并視存在與否加入dmsetup程序到sbin目錄。
優(yōu)選地,所述Linux系統(tǒng)為Red hat、CentOS或Ubuntu Server發(fā)行版系統(tǒng)。
優(yōu)選地,所述保障Linux系統(tǒng)正常啟動的方法應(yīng)用于MTCA環(huán)境中硬盤文件系統(tǒng)損壞的情況。
優(yōu)選地,所述Packages存在于安裝光盤中。
優(yōu)選地,所述相應(yīng)的代碼邏輯包括:根據(jù)配置文件的內(nèi)容確定是否掛載快照分區(qū)、是否對文件系統(tǒng)進(jìn)行檢查和修復(fù)、以及是否對新文件的合并處理。
優(yōu)選地,所述生成新的initramfs鏡像文件以覆蓋所述原始initramfs鏡像文件文件的步驟具體是采用cpio命令和gzip命令生成新的initramfs鏡像文件以覆蓋所述原始initramfs鏡像文件。
優(yōu)選地,所述預(yù)定目錄為目錄initramfs-new,所述device-mapper軟件包具體是Packages中的device-mapper軟件包。
在本發(fā)明中,通過采用以上這種保障Linux系統(tǒng)正常啟動的方法之后,在硬盤上的文件系統(tǒng)損壞時(shí),不需要人工參與,即可自動恢復(fù)系統(tǒng)而正常啟動,可保證操作系統(tǒng)能夠正常啟動。
附圖說明
圖1為本發(fā)明保障Linux系統(tǒng)正常啟動的方法一實(shí)施例的流程示意圖;
圖2為圖1中修改/boot中的原始initramfs鏡像文件步驟的具體流程示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供了一種保障Linux系統(tǒng)正常啟動的方法,適用于MTCA環(huán)境中硬盤文件系統(tǒng)損壞的情況下使用。主要是利用Linux系統(tǒng)的設(shè)備映射(device mapper)機(jī)制和文件系統(tǒng)快照(snapshot)功能,并且不需要修改Linux內(nèi)核或已有程序,解決硬盤上的文件系統(tǒng)損壞時(shí)操作系統(tǒng)的啟動問題,而該Linux系統(tǒng)包括但不限于Redhat、CentOS、Ubuntu Server等發(fā)行版。
圖1為本發(fā)明保障Linux系統(tǒng)正常啟動的方法一實(shí)施例的流程示意圖。圖2為圖1中修改/boot中的原始initramfs鏡像文件步驟的具體流程示意圖。請結(jié)合參照圖1和圖2,該保障Linux系統(tǒng)正常啟動的方法的工作流程如下:
步驟S10:在硬盤分區(qū)時(shí),創(chuàng)建一與原始根分區(qū)大小相同的分區(qū),以作為快照分區(qū)。
在本實(shí)施中,開始的準(zhǔn)備工作:硬盤分區(qū),與平時(shí)的操作過程相同,唯一要注意的是硬盤分區(qū)時(shí)要多劃分出一個與根分區(qū)大小相同的分區(qū),后面作為快照分區(qū)使用。
步驟S20:安裝Linux操作系統(tǒng)至所述原始根分區(qū)中。
在本實(shí)施中,還包括安裝相關(guān)部署軟件等操作。
步驟S30:修改/boot中的原始initramfs鏡像文件。
上述步驟中,具體是修改原始initramfs鏡像文件中的init腳本程序。其中,原始initramfs鏡像文件是一個gz格式壓縮的cpio文件。
步驟S30具體步驟如下:
步驟S310:用gunzip命令和cpio命令將所述原始initramfs鏡像文件解包到一預(yù)定目錄中,可定義該預(yù)定目錄為目錄initramfs-new;
步驟S320:在所述預(yù)定目錄中加入Packages(Packages可存在于安裝光盤中)中所含device-mapper軟件包,當(dāng)sbin子目錄中不存在dmsetup命令,則將所含device-mapper軟件包里面的dmsetup命令放到sbin子目錄中。如果當(dāng)sbin子目錄中已經(jīng)存在dmsetup命令,則無需此操作。
步驟S330:編輯init腳本程序,修改其掛載根文件系統(tǒng)的代碼,加入相應(yīng)的代碼邏輯。
其中,該相應(yīng)的代碼邏輯:根據(jù)配置文件的內(nèi)容確定是否掛載快照分區(qū)、是否對文件系統(tǒng)進(jìn)行檢查和修復(fù)、以及是否對新文件的合并處理。
步驟S340:采用cpio命令和gzip命令生成新的initramfs鏡像文件以覆蓋所述原始initramfs鏡像文件。
在執(zhí)行上述方法之后,啟動該Linux系統(tǒng),內(nèi)核運(yùn)行修改后的init程序,并解析/boot/snapshot.cfg配置文件;根據(jù)解析后的配置文件內(nèi)容決定下一步流程,具體包括以下3種流程:
第1種流程:如果解析后的配置文件內(nèi)容為不啟用快照功能,則按原來的方式掛載根分區(qū),該Linux系統(tǒng)將正常啟動。
第2種流程:如果解析后的配置文件內(nèi)容為啟用快照功能,則掛載快照分區(qū),并用fsck命令檢查文件系統(tǒng)是否損壞,當(dāng)檢查結(jié)果為無損壞則該Linux系統(tǒng)將正常啟動。當(dāng)檢查結(jié)果為有損壞則擦除快照分區(qū)、重新掛載,修復(fù)系統(tǒng)狀態(tài)回到創(chuàng)建快照時(shí)的狀態(tài),該Linux系統(tǒng)將正常啟動。
第3種流程:如果解析后的配置文件內(nèi)容為合并快照分區(qū)中的文件到根分區(qū)中,則將快照分區(qū)用snapshot-merge類型掛載,掛載后內(nèi)核會自動開始合并,用dmsetup status命令檢查到合并完成后,擦除快照分區(qū),將配置文件內(nèi)容改為啟用快照,然后重啟該Linux系統(tǒng),重啟后,該Linux系統(tǒng)將正常啟動。
在本實(shí)施例中,通過執(zhí)行采用本發(fā)明這種保障Linux系統(tǒng)正常啟動的方法之后,在硬盤上的文件系統(tǒng)損壞時(shí),不需要人工參與,即可自動恢復(fù)系統(tǒng)而正常啟動,可保證操作系統(tǒng)能夠正常啟動。
另外,在其它實(shí)施例中,可根據(jù)設(shè)備映射機(jī)制中snapshot類型的寫時(shí)復(fù)制(COW)技術(shù),對新根分區(qū)上文件的寫操作會寫入到硬盤的快照分區(qū),原來的根分區(qū)中的所有文件不受影響,也就是受到保護(hù)。每次系統(tǒng)啟動時(shí),修改過的init程序如果檢測到快照分區(qū)中的數(shù)據(jù)有損壞,則擦除快照分區(qū),重新掛載,系統(tǒng)狀態(tài)回到創(chuàng)建快照時(shí)的狀態(tài)。系統(tǒng)啟動掛載文件系統(tǒng)時(shí),是否掛載快照分區(qū)可以根據(jù)配置文件進(jìn)行選擇。剛裝完系統(tǒng)、服務(wù)軟件沒有部署好時(shí)不用掛載,等服務(wù)軟件部署好之后再配置為需要掛載(稱為創(chuàng)建快照),這樣如果文件損壞系統(tǒng)狀態(tài)回退時(shí)能回到一個健康完整、服務(wù)良好的狀態(tài)。系統(tǒng)運(yùn)行過程中可能會產(chǎn)生新的數(shù)據(jù)文件,如果希望把這些數(shù)據(jù)合并到原根分區(qū)中保護(hù)起來,也可以修改配置文件,下次系統(tǒng)啟動時(shí)修改過的init腳本程序會自動把快照分區(qū)中的文件合并到原根分區(qū),然后重新創(chuàng)建快照。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。