對嵌入式Linux操作系統中的UBIFS文件系統備份方法
【技術領域】
[0001]本發明涉及一種系統文件備份方法,尤其涉及對嵌入式Linux操作系統中的UBIFS文件系統備份方法。
【背景技術】
[0002]目前Iinux操作系統由于源碼開放及技術成熟,從而大量使用在儀器儀表的軟件設計中。而Iinux的文件系統也由最初的jiffs2、yaffs2等系統發展到目前的UBIFS文件系統。UBIFS是Nokia工程師在the university of Szeged大學幫助下開發的新的flashfile system。被認為是JFFS2文件系統的下一代。JFFS2運行在MTD設備之上,而UBIFS則只能工作于UBI volume之上。也可以說,UBIFS涉及了三個子系統:
[0003]1.MTD子系統,提供對flash芯片的訪問接口,MTD子系統提供了 MTD device的概念,比如/dev/mtdx,MTD可以認為是raw flash ;
[0004]2.UBI subsystem,為flash device提供了 wear-leveling和 volume management功能;UBI工作在MTD設備之上,提供了 UBI volume ;UBI是MTD設備的高層次表示,對上層屏蔽了一些MTD不得不處理的問題,比如wearing以及壞塊管理
[0005]3.UBIFS文件系統,工作于UBI之上。
[0006]UBIFS文件系統屬于日誌型文件系統,無論速度、性能還是對NAND FLASH的損益均衡都相對于jiffs2和yafTs2有了很大的改變。但UBIFS文件系統需要經常記錄日誌,因而在MTD分區時,給UBIFS部分的硬件分區不能配置為只讀,必須配置為可讀可寫。這樣在設備突然停電而系統又正在進行日誌記錄時,往往由于沒有操作完而中斷,會造成文件系統的損壞,從而造成再次來電系統不能正常工作。
[0007]目前常規linux+UBIFS文件系統的MTD分區是這樣的:將MTD分為3個區,其中第一區存放Uboot及kener,該區只讀,長度8M,第二區存放UBIFS文件系統,長度16M,第三區存放應用程序及數據,第2區和第3區是可讀/寫的。
[0008]系統啟動時,先啟動UB00T,通過UB00T拉起kener、文件系統ubifs,在ubifs的shell文件啟動應用程序。這里第I區是只讀區,其中的文件不會損壞,因而UB00T及kener不會出問題,但UBIFS分區是可讀可寫區,該區間是允許寫操作的,這樣設備在運行中突然停電而系統又正在寫UBIFS分區的話,會造成沒有寫完而損壞文件系統,再次上電系統無法工作。
[0009]為了避免突然停電,目前常規做法是采用可充電的備用電池,在交流電源停電后,利用備用電池,維持系統工作,應用程序檢測到停電,通過Iinux的復位命令reboot關機,系統在接收到reboot命令,關閉所有操作后復位。使用了備用電池,在一定程度上減少了系統崩潰的風險,但備用電池畢竟有壽命的限制,在電池失效而又沒有及時更換的時候,文件崩潰的風險就會隨時發生。
【發明內容】
[0010]本發明的目的在于提供對嵌入式Linux操作系統中的UBIFS文件系統備份方法,主要針對電表等設備中的UBIFS文件系統進行備份,減少由于斷電導致數據設置問題,同時也不需要額外的備用電池,在減少了設備成本的前提下對于設備的保護更為完善。
[0011]為了實現所述目的,對嵌入式Linux操作系統中的UBIFS文件系統備份方法,用于非易失存儲器上,包括以下步驟:
[0012]步驟1,將MTD分為3個區;其中第一區設置空間為24M,第二區設置空間為16M,剩余空間全部留給第三區;
[0013]步驟2,將第一區設置兩個功能區塊,其中一塊為uboot及kener存放區,該區只讀,長度8M ;另一個功能區塊為備份區,備份區16M空間用來存放UBIFS文件系統,作為備份;
[0014]步驟3,第二區內存放和第一區中備份區相同的UBIFS文件系統,該區為可讀寫區;
[0015]步驟4,在第三區內存放應用程序及數據,該區為可讀寫區;
[0016]步驟5,每次系統啟動時記錄第二區內存中UBIFS文件系統的uboot特征碼;
[0017]步驟6,進行程序更新時應用程序修改第二區中UBIFS文件系統數據;在下一次系統啟動時,uboot程序通過特征碼對比判斷該區域內容是否已經修改,如果檢測到現在的特征碼和記錄中應用程序uboot的特征碼不一致,則說明上次系統是正常啟動,無需啟動備份;如果特征碼沒有變化,判斷該區間仍是uboot所寫數據,說明上次系統啟動后,沒有進入應用程序,通過看門狗對系統再次重啟,此次重啟后將第一區中備份區的備份文件覆蓋第二區文件,覆蓋完畢后重新進行程序更新。
[0018]優選的,所述特征碼選用4個字節。過長的特征碼會影響判斷時間,太短的特征碼會導致誤判率。
[0019]優選的,所述非易失存儲器連接計時模塊,整個系統第二次重啟距離第一次重啟不得小于I分鐘,以后每次重啟間隔不得小于半分鐘,在3分鐘內出現4次重啟則停止作業發出報警信號。由于要確保非易失存儲器的使用壽命,在工作環境不供能不穩定的情況下如果在短時間內出現大量重啟,則停止作業,發出警報由人工確認下次嘗試。
[0020]優選的,所述非易失存儲器為鐵電存儲器FRAM。這樣的非易失存儲器性能較好。
[0021]通過這樣的設置,本發明對嵌入式Linux操作系統中的UBIFS文件系統備份方法可以解決這個問題。本發明通過開辟一塊只讀MTD分區,用來備份UBIFS文件系統,UBOOT在檢測到文件系統損壞后,用備份區文件系統覆蓋工作區文件系統,從而達到修復文件系統的目的。
【附圖說明】
[0022]圖1是本發明對嵌入式Linux操作系統中的UBIFS文件系統備份方法的具體實施例工作流程示意圖。
【具體實施方式】
[0023]為了實現備份文件系統覆蓋工作區UBIFS文件,需要更改uboot程序和應用程序。核心思想是在uboot程序中對非易失存儲器的某區域讀取一個固定數據,而在系統正常工作后,由應用程序修改uboot在該單元所寫的數據。這樣系統再次啟動時,uboot程序判斷該特征碼是否為Uboot所寫數據,如果檢測到的數據已經和前一次記載的發生改變了,則說明上次系統是正常啟動,無需啟動備份;如果判斷該區間仍是Uboot所寫數據,說明上次系統啟動后,沒有進入應用程序此時應用程序的守護進程會清“看門狗”,由“看門狗”動作造成系統再次重啟,于是啟動備份文件覆蓋工作區文件,覆蓋完畢后只是恢復到初始狀況,還需要重新進行一次。
[0024]如圖1所示,以uboot所寫數據為(0x55)為例;當程序異常重啟后,系統自行對比特征碼發現
[0025]覆蓋文件系統的執行過程:
[0026]1、擦除UBIFS工作區,長度:16M,首地址0x1800000
[0027]nand erase 1800000 1000000
[0028]2、讀取備份工作區內容到內存的0x20040000,備份文件首地址0x800000
[0029]nand read 20040000 800000 1000000
[0030]3、將讀出的備份文件內容寫到工作區:
[0031]nand write, trimffs 20040000 1800000 1000000
[0032]備份恢復完畢后系統正常工作,由應用程序將FRAM的指定單元寫為OxAA。這樣當下次重啟時檢測到OxAA已經和上次記載的0x55產生變化,說明覆蓋成功。這樣將心的OxAA記錄為當前特征碼,等待下一次的程序寫入。
[0033]對嵌入式Linux操作系統中的UBIFS文件系統備份方法,從采用linux+UBIFS的儀器儀表設備中隨機選取了 10臺樣板進行試驗,并且把所有樣本的備用電池統一去掉。首先采用常規方法,即不對樣品做任何處理,由外部設備對每臺樣本進行每I分鐘I次的停上電操作,結果在實驗24小時后就出現了 I臺設備因為文件系統損壞而不能啟動。而后按照本發明方法對該批設備做了改進,采用同樣的實驗環境,同樣的實驗方法,并把實驗時間延長到72小時后觀察,發現所有的樣本仍可以正常啟動工作,很明顯,通過本發明,大大提高了系統的容錯能力及可靠性。
【主權項】
1.對嵌入式Linux操作系統中的UBIFS文件系統備份方法,其特征在于:用于非易失存儲器上,包括以下步驟: 步驟1,將MTD分為3個區;其中第一區設置空間為24M,第二區設置空間為16M,剩余空間全部留給第三區; 步驟2,將第一區設置兩個功能區塊,其中一塊為uboot及kener存放區,該區只讀,長度8M ;另一個功能區塊為備份區,備份區16M空間用來存放UBIFS文件系統,作為備份;步驟3,第二區內存放和第一區中備份區相同的UBIFS文件系統,該區為可讀寫區;步驟4,在第三區內存放應用程序及數據,該區為可讀寫區; 步驟5,每次系統啟動時記錄第二區內存中UBIFS文件系統的uboot特征碼; 步驟6,進行程序更新時應用程序修改第二區中UBIFS文件系統數據;在下一次系統啟動時,uboot程序通過特征碼對比判斷該區域內容是否已經修改,如果檢測到現在的特征碼和記錄中應用程序uboot的特征碼不一致,則說明上次系統是正常啟動,無需啟動備份;如果特征碼沒有變化,判斷該區間仍是uboot所寫數據,說明上次系統啟動后,沒有進入應用程序,通過看門狗對系統再次重啟,此次重啟后將第一區中備份區的備份文件覆蓋第二區文件,覆蓋完畢后重新進行程序更新。2.根據權利要求1所述對嵌入式Linux操作系統中的UBIFS文件系統備份方法,其特征在于,所述特征碼選用4個字節。3.根據權利要求1所述對嵌入式Linux操作系統中的UBIFS文件系統備份方法,其特征在于,所述非易失存儲器連接計時模塊,整個系統第二次重啟距離第一次重啟不得小于I分鐘,以后每次重啟間隔不得小于半分鐘,在3分鐘內出現4次重啟則停止作業發出報警信號。4.根據權利要求1所述對嵌入式Linux操作系統中的UBIFS文件系統備份方法,其特征在于,所述非易失存儲器為鐵電存儲器FRAM。
【專利摘要】本發明的目的在于提供對嵌入式Linux操作系統中的UBIFS文件系統備份方法,減少由于斷電導致數據設置問題。為了實現所述目的,對嵌入式Linux操作系統中的UBIFS文件系統備份方法,用于非易失存儲器上,包括以下步驟:步驟1,將MTD分區;步驟2,將第一區設置兩個功能區塊;步驟3,第二區內存放和第一區中備份區相同的UBIFS文件系統;步驟4,在第三區內存放應用程序及數據;步驟5,每次系統啟動時記錄第二區內存中UBIFS文件系統的uboot特征碼;步驟6,進行程序更新時應用程序修改第二區中UBIFS文件系統數據。通過這樣的設置,本發明通過開辟一塊只讀MTD分區,用來備份UBIFS文件系統,從而達到修復文件系統的目的。
【IPC分類】G06F11/14
【公開號】CN105138433
【申請號】CN201510641909
【發明人】馬小輝, 趙強, 郭巨鋒
【申請人】華立儀表集團股份有限公司
【公開日】2015年12月9日
【申請日】2015年9月30日